Monitorización

Para la monitorización de nuestros sistemas vamos a usar el tandem prometheus y grafana

Prometheus

Nos servira para recuperar datos de unos sensores que pondremos en nuestros sistemas y crear alertas por si algo sucede, para empezar vamos a descargamos prometheus

wget https://github.com/prometheus/prometheus/releases/download/v2.36.1/prometheus-2.36.1.darwin-amd64.tar.gz

Descomprimimos

tar xfz prometheus-*.tar.gz

Creamos el usuarios para prometehus

useradd --no-create-home --shell /usr/sbin/nologin prometheus

Creamos las carpetas

mkdir /etc/prometheus
mkdir /var/lib/prometheus

Les asignamos el usuario creado anteriormente

chown prometheus:prometheus /etc/prometheus
chown prometheus:prometheus /var/lib/prometheus

Entramos en la carpeta de prometheus y copiamos los binarios

cd prometheus-2.36.0.linux-amd64
cp ./prometheus /usr/local/bin/
cp ./promtool /usr/local/bin/

asignamos usuario prometheus

Copiamos la consola y las librerías

Damos permisos

Ahora que lo tenemos instalado lo vamos a configurar, para ello creamos el siguiente fichero

Con esto definimos cada cuanto tiene que scrapear los datos de los diferentes nodos que configuraremos más adelante

Asignamos el usuario a la configuración

Primer arranque de prometehus para ver que esta todo en orden, donde le decimos que configuración tiene que cargar, donde va a guardar los datos (podríamos montarlo en un glusterfs para tener una replica fuera) y la configuración de la versión web.

Para tenerlo en el arranque de manera automática lo vamos a configurar en systemd, para ello creamos el siguiente fichero.

Recargamos el demonio de systemd y ya lo tendremos disponible.

Lo agregamos al arranque y lo arrancamos

Nginx + SSL + Autenticación

Una opción para ayudar a proteger nuestro servidor Prometheus es colocarlo detrás de un proxy inverso para que luego podamos agregar SSL y una capa de autenticación sobre la interfaz web predeterminada sin restricciones de Prometheus.

Instalamos nginx

Vamos a crear un sitio nuevo

Agregamos el siguiente contenido

comprobamos que las configuraciones sean correcta

Reiniciamos nginx y comprobamos su estado

Ahora ya podemos acceder a http://tu-dominio.com

Si accedemos por la ip veremos la web por defecto de nginx si no queremos que esto suceda podemos eliminar el siguiente fichero

Ahora vamos a ponerle certificado gracias a Let’s Encrypt para ello instalamos el certbot, agregamos el repositorio.

ahora solo tenemos que ejecutar e ir respondiendo las preguntas que nos hace

Podemos ver los cambios que realizo certbot en el fichero de nuestro dominio

Como no queremos que todo el mundo tenga acceso a nuestros datos vamos a poner una autentificación y a cerrar el puerto 9090 y 9100 para que no puedan acceder a la información de manera externa y sin autorización

Instalamos apache2-utils

Creamos un fichero de contraseñas con el usuario admin y ponemos la contraseña que queramos

editamos el fichero de configuración de nuestro prometheus

Y agregamos lo siguiente para que use el fichero de contraseñas

comprobamos que las configuraciones sean correcta

Reiniciamos nginx y comprobamos su estado

Los puertos 9000 y 9100 siguen abiertos por lo que vamos a cerrarlos con iptables

Como las iptables si se reinicia el equipo se pierden y no queremos estar agregándolas manualmente vamos a instalar el paquete iptables-persistent

Las configuraciones se guardan en estos dos ficheros

Si hacemos algún cambio a las iptables nos tenemos que acordar de guardarlas

Node exporter

Este exporter nos servira para recopilar la información de uso general de los sistemas como su CPU, memoria, procesos...

Para ello descargamos

descomprimimos

Creamos usuarios

Entramos a la carpeta de node_exporter y copiamos el binario

Asignamos permisos

Igual que con prometheus vamos a añadirlo en el systemd para poderlo arrancar en el arranque del sistema de manera fácil.

recargamos systemd

Arrancamos el node_exporter

Comprobamos que funciona

Lo activamos para arranque de maquina

Vamos a comunicar el node_exporter con Prometheus para ello vamos a editar la configuración de Prometheus

Y añadimos lo siguiente en la zona de scrape_configs

Reiniciamos prometheus

Ahora repetimos el proceso con el resto de los nodos y servidores de nuestro HA y ya podemos consultar la información de los diferentes nodos

Prometheus basico

HAProxy Exporter

Este exporter nos servira para recopilar la información de nuestros HAProxys y saber sus conexiónes, que va a cada nodo...

Para ello descargamos

descomprimimos

Creamos usuarios

Entramos a la carpeta de haproxy_exporter y copiamos el binario

Igual que con prometheus vamos a añadirlo en el systemd para poderlo arrancar en el arranque del sistema de manera facil.

recargamos systemd

Arrancamos el haproxy_exporter

Comprobamos que funciona

Lo activamos para arranque de maquina

Configuramos el HAProxy para poder recopilar la Información con nuestro haproxy_exporter para ello añadimos el siguiente bloque

Vamos a comunicar el haproxy_exporter con Prometheus para ello vamos a editar la configuración de Prometheus

Y añadimos lo siguiente en la zona de scrape_configs

Reiniciamos prometheus

Apache exporter

Para monitorizar apache tenemos que tener el modulo de mod_status activado y la locacilizacion /server-status activada en este caso ubuntu lo trate configurado por defecto, por lo que no tendriamos que tocar nada.

Para poder usar el exporter lo primero que tenemos que hacer es instalar Go, lo podemos hacer desde los binarios o desde el repositorio como no vamos a programar en este caso lo instalaremos desde los repositorios.

Vamos a crear un usuario para el exporter como en los otros casos

Ahora vamos a bajar el codigo de la ultima version y vamos a compilarlo, nos clonamos el repositorio

Instalamos las dependencias de Go y compilamos

Copiamos el fichero generado

Le damos permisos

Lo agregamos a systemd

Generamos la configuración, donde escuchamos y donde publicamos la Información para prometheus

Recargarmos systemd

Agregamos a prometheus el exporter

Mysql Exporter

Vamos a monitorizar nuestro cluster de galera, para ello lo primera que hacemos en uno de los nodos crear un usuario

Descargamos el mysql exporter en todos los nodos

descomprimimos

Creamos usuarios

Entramos a la carpeta de mysql_exporter y copiamos el binario

recargamos systemd

Arrancamos el mysql_exporter

Comprobamos que funciona

Lo activamos para arranque de maquina

Vamos a comunicar el mysql_exporter con Prometheus para ello vamos a editar la configuración de Prometheus

Y añadimos lo siguiente en la zona de scrape_configs

Reiniciamos prometheus

Ahora repetimos el proceso con el resto de los nodos de galera pero sin tener que crear el usuario porque ya se replico automáticamente.

Agrupando exporters

Hasta ahora hemos ido agregando los exporter de manera independiente por tipo y servidor lo que lo hace poco mantenible a lo largo del tiempo

Lo que vamos a hacer ahora es agruparlos por tipos de exporters para que nos sea mas facil de mantener.

Alertmanager

Ahora que tenemos la monitorizacion montada tendremos que configurar las alertas para que nos sea util, para ello vamos a usar alertmanager

Descomprimimos

Entramos en la carpeta y copiamos los binarios

Creamos la carpeta para la configuracion

Creamos el usuario

Asignamos permisos

Creamos la configuracion para recibir las alertas por email

Lo agregamos a systemd

Recargamos el demonio de systemd y ya lo tendremos disponible.

Lo agregamos al arranque y lo arrancamos

Para crear las alertas vamos a creamos el siguiente fichero, con reglas para saber si los nodos estan levantados, se saturan de memoria o los discos estan llenos.

Ahora vamos a agregar las reglas creadas a prometheus

Reiniciamos prometheus

Grafana

Vamos a instalar ahora Grafana para poder ver de manera sencilla los datos que tiene prometheus, para ello vamos a agregar los repositorios oficiales para tener siempre la ultima version

Acutalizamos los repositorios e instalamos

Arrancamos el servico y cargamos en el arranque

Ahora vamos aprovechar el certificado que hemos solicitado para el dominio de prometheus, dado que vamos a usar el mismo nombre de dominio pero por el puerto 3000 que es el por defecto de grafana.

Vamos a crear un pequeño script para el deploy de los certificados para grafana.

creamos ahora en el crontab la renovacion diciendole que deploy-hook tiene que usar

Ahora solo nos queda configurar grafana para que lo use.

ahora ingresamos en nuestro grafana y ponemos el usuario y contraseña por defecto que es admin:admin nada mas introducirlo nos pedira cambiarlo por la que nosotros queramos.

Grafana login

Una vez dentro vamos a configurar algunos dashboard para ver los datos de prometheus, hay muchos creados que son los que vamos a usar o podriamos crear los nuestros propios.

Antes de empezar a graficar cosas necesitamos decirle a grafana de donde va a sacar los datos para ello vamos Configuration -> Data Sources y agregamos la fuente que queramos en este caso prometheus

Data Sources

Rellenamos nuestra configuracion hay que acordarse de poner la Basic auth para que podamos recoger los datos.

Configuracion grafana prometheus

Una vez que tenemos el DataSource configurado buscamos el dashboard que nos interesa y nos copiamos su identificador

Node exporter grafana

Ahora nos dirigimos a Dashbard -> import y pegamos el id del dashboard

Importar dashboard grafana

Lo cargamos y le decimos que Data Source usuara.

Configuracion dashboard
Dashboard

Ahora ya solo nos queda agregar los Dashboard que nosotros queramos.

Última actualización