Blackhold

Prometheus + Grafana

Posted on maig 28th, 2016 by admin

Siempre cuando tienes que montar un sistema de monitorización te preguntas ¿cuál? hay varios, nagios/centreon, zabbix, cacti, etc. pero hoy he terminado en una conferencia de debian y un tal tincho ha hecho una charla sobre un nuevo sistema de monitorización llamado Prometheus.
Como en La Mar de Bits tenemos pendiente montar uno y aún no nos hemos decidido por ninguno, pues antes de tirarnos a cualquiera de los otros, vamos a probar éste :)

Prometheus es el sistema de monitorización y tiene varias partes, grafana es un entorno externo que permite conectar con prometheus y mediante querys de prometheus, puedes crear un dashboard para ver los servicios que monitoriza prometheus a simple vista.
Así que vamos a ver la instalación de ambos y su integración.

Primero de todo, las distintas partes de prometheus son:
node_exporter -> equivalente al nrpe de nagios (cliente)
pushgateway -> procesos cortos que procesan datos (server)
alertmanager -> para enviar alertas (server)
blackbox_exporter -> monitor para hacer check de servicios, por ejemplo, para verificar que páginas http funcionen (server)
prometheus -> core (server)

Tincho es el empaquetador de prometheus para debian, pero de momento sólo está en testing, así que en nuestra debian estable vamos a añadir los sources de testing y bajar la prioridad del repositorio testing

Prometheus en el Server

# vi /etc/apt/sources.list
deb http://ftp.debian.org/debian jessie main contrib
deb http://ftp.debian.org/debian jessie-updates main contrib
deb http://security.debian.org jessie/updates main contrib
deb http://ftp.debian.org/debian stretch main contrib

# vi /etc/apt/preferences
Package: *
Pin: release a=testing
Pin-Priority: 10

Actualizamos el repositorio e instalamos prometheus

# apt-get update
# apt-get install prometheus prometheus-node-exporter prometheus-pushgateway

Ahora verificamos que esté el servicio levantado

# netstat -lanp |grep 'LISTEN '
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      11372/rpcbind   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      11752/sshd      
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1221/master     
tcp6       0      0 :::9090                 :::*                    LISTEN      18642/prometheus
tcp6       0      0 :::9091                 :::*                    LISTEN      15346/prometheus-pu
tcp6       0      0 :::9100                 :::*                    LISTEN      15281/prometheus-no
tcp6       0      0 :::111                  :::*                    LISTEN      11372/rpcbind   
tcp6       0      0 :::22                   :::*                    LISTEN      11752/sshd        
tcp6       0      0 ::1:25                  :::*                    LISTEN      1221/master 

Ahora podemos acceder por http al puerto 9090 al prometheus.
La primera cosa que me ha llamado la atención es que no se ha instalado el servicio a través de apache, prometheus lleva su propio cliente http. La otra es que no pide autenticación, así que es recomendable configurar prometheus para sólo escucha local si luego ponemos grafana.

De momento pero vamos a cambiar la url de prometheus que por defecto es prometheus y no puedo acceder a todo. Para ello editamos el fichero /etc/default/prometheus y añadimos un parámetro en ARGS. ARGS son los parámetros que se pasan al ejecutar prometheus. En el mismo fichero de configuración tenemos más información de los parámetros que le podemos pasar.

# vi /etc/default/prometheus
ARGS="-web.external-url=http://10.139.39.91:9090"

Y reiniciamos prometheus

# /etc/init.d/prometheus restart

Ahora ya tenemos prometheus UP’N’RUNNING! :) vamos a instalar grafana y lo vincularemos a prometheus.

# apt-get install grafana

Se levanta el puerto 3000

# netstat -lanp |grep 'LISTEN ' |grep grafana
tcp6       0      0 :::3000                 :::*                    LISTEN      17816/grafana

Accedemos por http y ponemos el usuario y password que por defecto es usuario admin y password admin

http://10.139.39.91:3000

Y vamos a datasources y añadimos el nuevo source.

Captura-124

Vamos a indicarle 127.0.0.1 y acces proxy, que quiere decir que la puerta va a ser el propio grafana.

Luego para mostrar las graficas, creamos un nuevo dashboard, iconito verde de la izquierda, add row, graph.
En query, por ejemplo: node_network_receive_bytes
Y luego arriba le damos a guardar :P

Para indicarle a prometheus que escuche sólo en local la línea de ARGS sería similar a esto:

# vi /etc/default/prometheus
ARGS="-web.external-url=http://10.139.39.91:9090 -web.listen-address=127.0.0.1:9090"
# vi /etc/default/prometheus-node-exporter
ARGS='-collector.diskstats.ignored-devices="^(ram|loop|fd)\\d+$ -web.listen-address=127.0.0.1:9100'
# vi /etc/default/prometheus-pushgateway
ARGS='-web.listen-address=127.0.0.1:9091'

Prometheus en el Cliente
Ahora vamos a añadir un nuevo cliente, vamos a hacer lo mismo de añadir los repositorios de testing

# vi /etc/apt/sources.list
deb http://ftp.debian.org/debian jessie main contrib
deb http://ftp.debian.org/debian jessie-updates main contrib
deb http://security.debian.org jessie/updates main contrib
deb http://ftp.debian.org/debian stretch main contrib

# vi /etc/apt/preferences
Package: *
Pin: release a=testing
Pin-Priority: 10

E instalamod el node-exporter

# apt-get install prometheus-node-exporter

Y ahora volvemos al server y modificamos el fichero de configuración de prometheus (pero no el de default, si no el que está en /etc/prometheus)

root@prometheus:/etc/prometheus# vi prometheus.yml
    target_groups:
      - targets:
        - 'localhost:9100'
        - '10.139.39.81:9100'

Es formato yaml, así que no uses el tabulador, sólo espacios hehe

Reiniciamos prometheus y en unos segundos prometheus empezará a recolectar datos del nuevo server cliente añadido.

Y ésto es todo :P ahora a toquetear y añadir mas cosillas… una de las cosas que me interesa es lo del percentil del tráfico de red, se puede hacer, pero tengo que mirar como!

Muchas gracias tincho! :)

« »

guy fawkes