Ya hace tiempo que lo tengo montado y tenía pendiente escribir el artículo a modo de wiki. Ya habíamos visto anteriormente cómo utilizar Grafana como capa de presentación con Glances e InfluxDB. Donde antes utilizaba Glances para recolectar métricas ahora tengo Collectd, utilidad más madura y con más opciones de configuración.
Los distintos componentes por tanto son:
- Collectd como recolector de métricas de sistema.
- InfluxDB será la Base de Datos para almacenar dichas métricas.
- Grafana como capa de presentación (dashboard) de las métricas que se vayan almacenando en InfluxDB.
Instalación de los componentes
Collectd e InfluxDB están en repositorios por lo que utilizaremos apt-get:
apt-get install collectd collectd-utils influxdb influxdb-client
Por su parte Grafana en estos momentos no lo tenemos en los repos Debian Stretch. Para instalarlo o bien instalamos el paquete .deb directamente o añadimos el repositorio correspondiente. En mi caso añadí el repositorio en /etc/apt/sources.list
:
deb https://packagecloud.io/grafana/stable/debian/ stretch main
Después incluí la clave GPG:
curl https://packagecloud.io/gpg.key | sudo apt-key add -
Y finalmente instalé el paquete:
sudo apt-get update sudo apt-get install grafana
Tenéis todas las opciones de instalación para distintas distros y métodos en la web oficial.
La gestión de todos los servicios se hace con systemctl:
systemctl [ status | stop | start | restart ] collectd.service systemctl [ status | stop | start | restart ] influxdb.service systemctl [ status | stop | start | restart ] grafana.service
Configuración de la recolección de métricas con Collectd
En primer lugar tendremos que activar los plugins de Collectd que se encargarán de recolectar las distintas métricas. En el fichero /etc/collectd/collectd.conf tengo en mi caso activados (descomentados) los siguientes plugins:
LoadPlugin syslog LoadPlugin apache LoadPlugin battery LoadPlugin conntrack LoadPlugin contextswitch LoadPlugin cpu LoadPlugin df LoadPlugin disk LoadPlugin entropy LoadPlugin ethstat LoadPlugin fhcount LoadPlugin interface LoadPlugin irq LoadPlugin load LoadPlugin memory LoadPlugin network LoadPlugin processes LoadPlugin protocols LoadPlugin rrdtool LoadPlugin sensors LoadPlugin swap LoadPlugin tcpconns LoadPlugin uptime LoadPlugin users
A su vez en el mismo fichero algunos plugins los tengo personalizados. El resto están comentados por lo que se aplica la configuración por defecto:
- Plugin cpu:
<Plugin cpu> ReportByCpu true ReportByState true ValuesPercentage true </Plugin>
- Plugin df:
<Plugin df> # Device "/dev/sda2" # Device "192.168.0.2:/mnt/nfs" # MountPoint "/" # FSType "ext4" # ignore rootfs; else, the root file-system would appear twice, causing # one of the updates to fail and spam the log # FSType rootfs # ignore the usual virtual / temporary file-systems # FSType sysfs # FSType proc # FSType devtmpfs # FSType devpts # FSType tmpfs # FSType fusectl # FSType cgroup # IgnoreSelected true # ReportByDevice false ReportInodes true # ValuesAbsolute true # ValuesPercentage false </Plugin>
- Plugin memory:
<Plugin memory> ValuesAbsolute true ValuesPercentage false </Plugin>
- Plugin network. Muy importante este plugin ya que configura Collectd en modo servidor con puerto de escucha
25826
enlocalhost
. Posteriormente InfluxDB actuará como cliente y conectará con Collectd en dicho socket para recolectar y almacenar las métricas en BBDD. En este caso127.0.0.1:25826
:<Plugin network> # client setup: Server "127.0.0.1" "25826" #<Server "127.0.0.1" "25826"> # SecurityLevel Encrypt # Username "user" # Password "secret" # Interface "br0" # ResolveInterval 14400 #</Server> #TimeToLive 128 # # # server setup: #Listen "127.0.0.1" "25826" #<Listen "127.0.0.1" "25826"> # SecurityLevel Sign # AuthFile "/etc/collectd/passwd" # Interface "br0" #</Listen> #MaxPacketSize 1452 # # # proxy setup (client and server as above): # Forward true # # # statistics about the network plugin itself ReportStats false # # # "garbage collection" #CacheFlush 1800 </Plugin>
- Plugin protocols:
<Plugin protocols> Value "/^Tcp:/" # IgnoreSelected false </Plugin>
- Plugin tcpconns:
<Plugin tcpconns> ListeningPorts true AllPortsSummary true # LocalPort "25" # RemotePort "25" </Plugin>
Creación de BBDD en InfluxDB
En primer lugar tendremos que crear una BBDD donde almacenar las métricas de Collectd. Para ello conectamos con la CLI de InfluxDB con el comando influx:
influx
Una vez dentro creamos un usuario administrativo y la BBDD:
CREATE USER jota WITH PASSWORD '<password>' WITH ALL PRIVILEGES CREATE DATABASE collectd_db exit
En el fichero de configuración /etc/influx/influxdb.conf tendremos que configurar dónde escucha Collectd (localhost:25826) y la BBDD donde almacenaremos las métricas (collectd_db):
### ### [collectd] ### ### Controls one or many listeners for collectd data. ### [[collectd]] enabled = true bind-address = "localhost:25826" database = "collectd_db" typesdb = "/usr/share/collectd/types.db"
Grafana: capa de presentación
En Grafana configuraremos un dashboard donde poder ver las distintas métricas. Antes de esto hay que configurar un datasource que apuntará a la Base de Datos de InfluxDB, donde se están almacenando los datos.
En mi caso lo tengo configurado de la siguiente manera. Rellenamos los datos en función de nuestras especificaciones:
Una vez configurado el datasource tendremos que crear un dashboard donde se representarán las distintas métricas. Por suerte en la Comunidad de Grafana ya tenemos unos cuantos dashboards para empezar a trabajar sin demasiadas complicaciones. En mi caso para las métricas de sistema utilicé este. Descargamos el fichero JSON y lo importamos en Grafana:
Una vez cargado ya podremos ver nuestras métricas de carga, CPU, memoria, nº de procesos…:
También métricas de red:
Estos dashboards podremos modificarlos a nuestro gusto posteriormente y hay más en la web de Grafana. A la hora de descargar más dashboards, fijaos si cumplís las dependencias de componentes (algunos son para Prometheus en vez de Collectd, etc…)