Начинаем серию про LGTM-стек (Loki, Grafana, Tempo, Mimir + Prometheus/Alloy) — с самого низа, откуда берутся метрики хоста. node_exporter — демон, который читает /proc и /sys и отдаёт их в формате Prometheus на :9100/metrics. Сам по себе не хранит историю и ничего не агрегирует — просто снимок текущего состояния по HTTP.
Запуск бинарником — минимум:
node_exporter --web.listen-address=":9100"
По умолчанию включена только часть коллекторов (cpu, diskstats, filesystem, loadavg, meminfo, netdev и т.п.) — тяжёлые или специфичные включаются явно. Два самых полезных для практики:
Юниты systemd — не включён по умолчанию:
node_exporter --collector.systemd
Даёт node_systemd_unit_state{name="postgresql.service", state="active"} — можно алертить на state != "active" для конкретных юнитов, не городя отдельный чек в Zabbix/Nagios.
Кастомные метрики без своего экспортера — textfile collector:
node_exporter --collector.textfile.directory=/var/lib/node_exporter/textfile_collector
В указанную директорию кладутся файлы *.prom — обычный текст в формате Prometheus exposition, ничего специального:
# HELP backup_age_seconds Время с последнего успешного бэкапа, секунды
# TYPE backup_age_seconds gauge
backup_age_seconds 3600
HELP/TYPE — опциональные строки-комментарии, обязательна только последняя: имя метрики и число через пробел. Файл с таким содержимым можно положить откуда угодно — cron, systemd timer, любой скрипт — node_exporter просто читает директорию при каждом скрейпе. Важно только писать не напрямую в *.prom, а во временный файл и переименовывать (mv) поверх — иначе Prometheus может прочитать файл в момент записи, наполовину пустым.
Отключить ненужное — так же явно, --no-collector.<имя>:
node_exporter --no-collector.wifi --no-collector.hwmon
Запуск как unit systemd:
[Unit]
Description=Prometheus node_exporter
After=network-online.target
Wants=network-online.target
[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter \
--collector.systemd \
--collector.textfile.directory=/var/lib/node_exporter/textfile_collector
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
[Install]
WantedBy=multi-user.target
ProtectSystem=strict/ProtectHome=true — экспортер только читает /proc, /sys и свою textfile-директорию, писать ему больше некуда не нужно.
#prometheus #monitoring #lgtm
