Recolectores de prometheus-node-exporter en Ubuntu 20.04: systemd

per Victor Carceler darrera modificació 2021-03-24T12:26:23+01:00

https://commons.wikimedia.org/wiki/File:Prometheus_software_logo.svg

En el centro utilizamos Prometheus y Grafana para monitorizar el parque informático compuesto por ordenadores que ejecutan Ubuntu 20.04. Los equipos exportan las métricas gracias al paquete prometheus-node-exporter que está instalado a partir de los repositorios oficiales de la distribución.

Así en http://<dirección ip>:9100/metrics se puede acceder a las métricas del equipo.

Captura de pantalla de 2021-03-24 11-35-35.png

Con la configuración por defecto del paquete prometheus-node-exporter están activos los siguientes recolectores:

500]: time="2021-03-24T10:03:25+01:00" level=info msg="Enabled collectors:" source="node_exporter.go:97"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - arp" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - bcache" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - bonding" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - conntrack" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - conntrack" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - cpu" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - cpufreq" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - diskstats" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - edac" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - entropy" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - filefd" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - filesystem" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - hwmon" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - infiniband" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - ipvs" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - loadavg" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - mdadm" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - meminfo" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - netclass" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - netdev" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - netstat" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - nfs" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - nfsd" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - pressure" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - sockstat" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - stat" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - systemd" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - textfile" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - time" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - timex" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - uname" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - vmstat" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - xfs" source="node_exporter.go:104"
500]: time="2021-03-24T10:03:25+01:00" level=info msg=" - zfs" source="node_exporter.go:104"

Y entre estos recolectores destaca el de systemd que es el único que los desarrolladores de node exporter no consideran que deba estar activo por defecto. Ver: https://github.com/prometheus/node_exporter#collectors.

Tal y como advierte la página de node_exporter en GitHub, las razones para no activar por defecto otros recolectores son:

  • Alta cardinalidad.
  • Tiempo de ejecución elevado.
  • Consumo de recursos significativo.

En nuestro caso el problema con el recolector de systemd es la alta cardinalidad. Con la configuración por defecto un equipo del aula publica 2231 métricas de las que 1089 corresponden al recolector de systemd. Es decir, al desactivar el recolector de systemd un equipo pasa de publicar 2231 métricas a publicar 1142. Y esto para cada uno de los equipos del centro es lo que eleva —en nuestro caso innecesariamente— la cardinalidad y el trabajo que debe realizar prometheus.

Cambio de la configuración por defecto para prometheus-node-exporter

Una vez instalado en paquete prometheus-node-exporter se puede encontrar su configuración por defecto en el fichero /etc/default/prometheus-node-exporter. Allí se podrá comprobar que por defecto se lanza node exporter sin ningún argumento:

ARGS=""

Pero es posible modificar la línea para desactivar el recolector de systemd:

ARGS="--no-collector.systemd"