Collectd — демон сбора метрик, написанный на C. Он занимает единицы мегабайт памяти, не тянет за собой JVM или Python-рантайм и работает на железе, где современный стек мониторинга уже не помещается. Для старого сервера, домашнего хоста или VPS с 512 МБ RAM это по-прежнему разумный выбор в 2026 году. Разберём установку, минимальный конфиг, отдачу метрик в Prometheus и Graphite, а также диагностику.
Когда collectd уместен
Collectd собирает значения по расписанию, агрегирует их и отправляет в хранилище. Длинную историю он сам не хранит: для этого подключают RRD, Graphite, Prometheus или VictoriaMetrics.
- Плюсы: малый RSS, модульность, готовые плагины cpu, memory, disk, interface, df, sensors, thermal.
- Минусы: собственный формат конфига, меньше готовых дашбордов, чем у node_exporter, ветка 5.12 развивается неспешно.
- Ограничение: для Kubernetes и облачной динамики удобнее экспортёры Prometheus, а для одного старого хоста collectd проще.
Установка
Пакет есть в Debian, Ubuntu и Linux Mint. Вместе с демоном ставится collectdctl для запросов к сокету.
sudo apt update
sudo apt install collectd collectd-utils
collectd -h | head
systemctl status collectd --no-pager
Проверка конфигурации выполняется ключом -t: она не запускает сбор, а только разбирает файлы и завершает работу.
sudo collectd -t -C /etc/collectd/collectd.conf
sudo systemctl restart collectd
Если вывод пустой и код возврата 0, синтаксис верный. Юнит в Debian называется collectd.service, основной конфиг лежит в /etc/collectd/collectd.conf, а дополнительные файлы удобно держать в /etc/collectd/collectd.conf.d/ и подключать через Include.
Минимальный конфиг для слабой машины
Не включайте всё подряд: каждый плагин — это поток чтения и набор метрик. Для старого сервера достаточно десяти источников.
Hostname "srv-old"
FQDNLookup false
Interval 30
Timeout 4
ReadThreads 2
WriteThreads 2
LoadPlugin syslog
LoadPlugin cpu
LoadPlugin load
LoadPlugin memory
LoadPlugin swap
LoadPlugin df
LoadPlugin disk
LoadPlugin interface
LoadPlugin processes
LoadPlugin uptime
<Plugin cpu>
ReportByCpu true
ValuesPercentage true
</Plugin>
<Plugin df>
MountPoint "/"
ValuesPercentage true
</Plugin>
<Plugin interface>
Interface "eth0"
IgnoreSelected true
</Plugin>
<Plugin processes>
Process "sshd"
Process "nginx"
</Plugin>
Interval 30 вместо стандартных 10 снижает нагрузку и объём данных втрое; для домашнего сервера такой точности хватает. FQDNLookup false избавляет от обратных DNS-запросов при старте, которые на старом железе заметно тормозят запуск. Обратите внимание: Timeout 4 — это число интервалов, а не секунд, поэтому реальный порог устаревания здесь около двух минут.
Не все плагины одинаково полезны на слабой машине. cpu и load показывают, упирается ли хост в процессор; memory и swap — хватает ли RAM; df ловит заполнение корня; interface — ошибки и скорость сети. Плагины sensors и thermal включайте только при наличии датчиков: на виртуальной машине они не дадут данных и добавят ошибки в лог.
Отдача в Prometheus
Плагин write_prometheus поднимает HTTP-эндпоинт /metrics. Это самый простой способ подружить collectd с современным мониторингом.
LoadPlugin write_prometheus
<Plugin write_prometheus>
Host "127.0.0.1"
Port "9103"
</Plugin>
Метрики доступны по адресу http://127.0.0.1:9103/metrics. Плагин не умеет аутентификацию, поэтому не выставляйте его в интернет. Если scrape идёт с другого хоста, укажите в Host адрес локальной сети и разрешите порт только сети мониторинга.
curl -s http://127.0.0.1:9103/metrics | head -20
# если Prometheus на другом хосте, в конфиге укажите Host "10.0.0.5"
sudo ufw allow from 10.0.0.0/24 to any port 9103 proto tcp
sudo ufw deny 9103/tcp
В prometheus.yml достаточно job с target 10.0.0.5:9103. Имена метрик приходят с префиксом collectd_, а тип и экземпляр вынесены в лейблы. StalenessDelta по умолчанию 300 секунд, и это значение должно совпадать с настройкой Prometheus, иначе графики будут рваться.
Graphite и RRD
Если Prometheus не нужен, collectd отлично пишет в Graphite или локальный RRD. Для старого сервера с HDD RRD удобен: данные лежат рядом и не требуют отдельного демона.
<Plugin write_graphite>
<Node "local">
Host "127.0.0.1"
Port "2003"
Protocol "tcp"
Prefix "collectd."
StoreRates true
</Node>
</Plugin>
<Plugin rrdtool>
DataDir "/var/lib/collectd/rrd"
CacheTimeout 120
CacheFlush 1800
</Plugin>
RRD создаёт по файлу на метрику и быстро разрастается на тысячах графиков; на SD-карте это ещё и износ. Если графиков много, поставьте rrdcached и используйте одноимённый плагин вместо rrdtool, чтобы запись шла пакетами.
Проверка и диагностика
Смотрите не только статус службы, но и то, что метрики реально обновляются. Для этого включите unixsock и опросите список значений.
LoadPlugin unixsock
<Plugin unixsock>
SocketFile "/run/collectd.sock"
</Plugin>
После перезапуска проверьте сокет и журнал. Если список значений пуст, ищите проблему в правах или в конфиге плагинов.
collectdctl -s /run/collectd.sock listval | head
journalctl -u collectd -n 50 --no-pager
ss -ltnp | grep 9103
sudo collectd -t -C /etc/collectd/collectd.conf
Если метрики есть, но графики пустые, смотрите ошибки записи: чаще всего это права на DataDir или переполненный диск. Для быстрой проверки на время включите плагин csv с отдельным каталогом и сравните значения.
Для алертов не обязательно поднимать Prometheus: у collectd есть плагин threshold, который сравнивает значение с порогом и вызывает NotificationExec. На старом сервере хватает одного скрипта, который отправляет письмо или сообщение в чат. Правила стоит держать простыми — предупреждение при 80 процентах заполнения диска и ошибка при 95, иначе уведомления быстро перестанут читать.
Безопасность
- Плагин network по умолчанию не загружен — не включайте его без шифрования и фильтрации.
- write_prometheus и unixsock не имеют аутентификации: только localhost и файрвол.
- Ограничьте права на каталоги данных и конфигурации.
- Проверяйте обновления пакета и не запускайте демон с лишними привилегиями.
Чек-лист
- collectd -t проходит без ошибок.
- Interval и список плагинов соответствуют задаче.
- Метрики видны в /metrics или в collectdctl listval.
- Порт 9103 доступен только сети мониторинга.
- Каталог данных на отдельном разделе или с ротацией.
- Алерты настроены на стороне Prometheus или Grafana.
Итог
Collectd остаётся практичным инструментом для одного-двух старых серверов: один пакет, один конфиг, минимальный расход памяти. Связка с write_prometheus даёт современный сбор без замены демона, а rrdtool или Graphite — локальную историю. Начните с десяти плагинов и Interval 30, проверьте метрики через curl и только потом расширяйте набор.