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.
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! :)