Когда сервер один, а графики нужны раз в пять минут, облачный мониторинг с агентом и подпиской выглядит избыточно. Munin решает эту задачу по-старинке: главный узел опрашивает агентов, складывает числа в RRD-базы и рисует статические графики. Никакой телеметрии наружу, минимум зависимостей и понятная диагностика. Разберём установку, подключение узлов, плагины, пороги и типичные поломки.

Как устроен Munin

Есть master и node. Master раз в пять минут открывает соединение с агентом на порту 4949, запрашивает список плагинов и их значения, после чего обновляет RRD-файлы и перерисовывает графики. Node — небольшой демон на Perl, который запускает плагины локально и отдаёт результат в текстовом протоколе.

RRD хранит данные с фиксированным шагом и заранее известным размером файла: старые точки усредняются, а не удаляются бесконечно. Это даёт предсказуемое место на диске и быстрые графики за день, неделю, месяц и год. Обратная сторона — пятиминутное разрешение и отсутствие трассировки: для разовых всплесков лучше подходит Prometheus, а Munin хорошо показывает тренды.

Установка master и node

В Debian, Ubuntu и Linux Mint пакеты называются munin и munin-node. Для одного сервера оба ставятся на одну машину; для парка машин master живёт отдельно, а на каждом узле достаточно munin-node. После установки проверьте, что демон слушает порт и запускается автоматически.

sudo apt install munin munin-node
sudo systemctl enable --now munin-node
sudo systemctl status munin-node --no-pager
ss -tlnp | grep 4949

Пакет master приносит rrdtool, cron-задание и каталог для готовых графиков. Веб-сервер в зависимостях не обязателен: Munin генерирует статические HTML и PNG, которые отдаёт любой nginx или Apache.

Доступ к агенту

По умолчанию агент слушает все интерфейсы, но разрешает подключения только с localhost. Для удалённого master добавьте его адрес в allow. Правила — регулярные выражения, поэтому точку в IP нужно экранировать.

host 127.0.0.1
allow ^127\.0\.0\.1$
allow ^10\.0\.0\.
allow ^192\.168\.

Если master на другой машине, замените host на 0.0.0.0 или адрес интерфейса и добавьте его IP в allow. Не открывайте 4949 в интернет: протокол не шифруется и не требует пароля.

sudo systemctl restart munin-node
printf 'list\nquit\n' | nc 127.0.0.1 4949
printf 'fetch df\nquit\n' | nc 127.0.0.1 4949

Включение плагинов

Плагины лежат в /usr/share/munin/plugins, а активные — символические ссылки в /etc/munin/plugins. Утилита munin-node-configure определяет, что доступно, и создаёт ссылки. Сначала посмотрите предложения, затем применяйте.

sudo munin-node-configure --suggest
sudo munin-node-configure --shell | sudo sh
ls -l /etc/munin/plugins
sudo -u munin munin-run df

Запуск от пользователя munin важен: плагин, работающий от root, может скрыть проблему с правами, а агент работает именно от munin.

Master и веб-графики

В /etc/munin/munin.conf описаны узлы и глобальные параметры. Для локального сервера достаточно одной секции с адресом и флагом use_node_name. Имя в квадратных скобках становится именем узла в интерфейсе и в путях RRD.

[example.com]
    address 127.0.0.1
    use_node_name yes
    contacts admin

Запуск munin-cron вручную помогает проверить всю цепочку, не дожидаясь расписания. Готовые файлы появляются в /var/cache/munin/www: индекс, страницы узлов и каталоги с графиками. Этот каталог и отдаёт веб-сервер.

sudo -u munin munin-cron
ls -l /var/cache/munin/www
sudo tail -n 50 /var/log/munin/munin-update.log

Если графики пустые, проверьте, что master видит агент, а имена плагинов совпадают. RRD-файлы привязаны к имени узла: после переименования старые данные не появятся.

Пороги и оповещения

Пороги задаются в /etc/munin/plugin-conf.d/munin-node для конкретного плагина. Значения warning и critical плагин отдаёт в ответе, а master сравнивает их и формирует события.

[df]
env.warning 85
env.critical 95

Оповещения настраиваются в munin.conf. Команда должна уметь отправлять почту: без локального MTA или настроенного релея письма просто осядут в очереди. always_send заставляет уведомлять и о восстановлении, что удобно, но при неверных порогах даёт шум.

contacts admin
contact.admin.command mail -s "Munin ${var:group}::${var:host}" root
contact.admin.always_send warning critical

Проверьте доставку вручную через munin-limits и только потом полагайтесь на неё в аварии. Для нескольких администраторов задайте разные contact-блоки.

Свой плагин

Плагин — исполняемый файл, который при вызове без аргументов печатает значения, а с аргументом config — описание графика. Формат простой: имя_поля.value и имя_поля.label. Такой скрипт удобно использовать для очереди задач или числа активных сессий.

#!/bin/sh
case "$1" in
  config)
    echo "graph_title Queue length"
    echo "graph_vlabel files"
    echo "queue.label pending"
    exit 0
    ;;
esac
echo "queue.value $(wc -l < /var/spool/app/queue)"

Положите файл в /etc/munin/plugins, дайте права на исполнение и проверьте через munin-run. Плагин должен отвечать быстро: тяжёлый запрос к базе каждые пять минут создаёт нагрузку.

Диагностика

Сначала проверяется агент, потом master. Отладочный запуск плагина показывает, что именно он возвращает; отладочный запуск update — что master получает и какие RRD обновляет. Рассинхронизация часов ломает RRD, поэтому время на обоих узлах должно идти одинаково.

sudo -u munin munin-run --debug df
sudo -u munin /usr/sbin/munin-update --debug --nofork
sudo -u munin /usr/sbin/munin-limits --debug
chronyc tracking

Частые причины: нет прав у пользователя munin, не установлен Perl-модуль для плагина, агент слушает только localhost, а master ходит по внешнему адресу, закончилось место под RRD. После исправления подождите два цикла — первый создаёт базу, второй рисует нормальный график. Старые данные при смене имени узла не переносятся автоматически.

Чек-лист

  • Агент слушает только нужный интерфейс, порт 4949 закрыт файрволом снаружи.
  • Пользователь munin имеет доступ ко всем включённым плагинам.
  • В munin.conf указан реальный адрес узла и совпадающее имя.
  • munin-cron выполняется по расписанию, каталог графиков доступен веб-серверу.
  • Пороги заданы для диска, памяти и нагрузки, письма проверены вручную.
  • Время синхронизировано, резервная копия RRD и конфигов снимается отдельно.

Итог

Munin остаётся удобным инструментом для небольших серверов и домашних лабораторий: он нетребователен, предсказуем и не отправляет данные в облако. Его слабое место — пятиминутный шаг и ограниченная работа с высокой кардинальностью, поэтому для микросервисов и трассировки его дополняют другими системами. Для контроля диска, памяти, нагрузки и сетевых интерфейсов старой доброй связки master плюс node по-прежнему достаточно.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте