в debian, monitoring

Оптимизация Munin в Debian

munin
Чем больше хостов мониторится с помощью Munin, тем медленнее он работает и требует все больше и больше ресурсов.

Ситуация несколько улучшается с каждой новой версией системы мониторинга (особенно это заметно при переходе с версии 1.4.x на 2.0.x), но всегда найдется место для оптимизации. Давайте разберемся!

Для хранения данных Munin использует rrd (Round-robin Database, кольцевая база данных), поэтому первое, что нам поможет — это RRDCached. RRDCached — демон, кэширующий данные для записи в базу данных, и записывающий их после накопления определенного объема (по истечению лимита времени).

Примечание. Полная поддержка rrdcached присутствует в Munin начиная с версии 2.0.x.

Установим необходимый пакет:

aptitude install rrdcached

Запустим следующую команду для создания сокета:

sudo -u munin /usr/bin/rrdcached \
  -p /run/munin/rrdcached.pid \
  -B -b /var/lib/munin/ \
  -F -j /var/lib/munin/rrdcached-journal/ \
  -m 0660 -l unix:/run/munin/rrdcached.sock \
  -w 1800 -z 1800 -f 3600

Примечание. Эту команду также следует добавить в /etc/rc.local.

RRDCached по умолчанию записывает данные в базу каждые 5 минут (такой же интервал по умолчанию используется в Munin для сбора данных). Следовательно, нам нужно изменить интервалы кеширования, записи и очистки кеша — можно использовать данные из примера или ввести ваши значения. За эти интервалы отвечают следующие параметры:

  • -w 1800 — данные записываются с таймаутом 30 минут;
  • -z 1800 — используется отложенная запись со случайным интервалом времени от 0 до 30 минут (это значение должно быть меньше либо равно предыдущему);
  • -f 3600 — очистка устаревших данных происходит каждый час.

Добавим в конфигурационный файл /etc/munin/munin.conf следующую строку:

rrdcached_socket /run/munin/rrdcached.sock

и перезапустим Munin для применения изменений.

Скрипты /usr/share/munin/munin-update и /usr/share/munin/munin-graph по умолчанию запускаются по крону каждые 5 минут (одной задачей в кронтабе /etc/cron.d/munin). Эти скрипты лучше разделить, для этого создаем файл /usr/bin/munin-graph:

nano /usr/bin/munin-graph

Содержимое файла следующее:

#!/bin/bash
# We always launch munin-html.
# It is a noop if html_strategy is "cgi"
nice /usr/share/munin/munin-html $@ || exit 1

# The result of munin-html is needed for munin-graph.
# It is a noop if graph_strategy is "cgi"
nice /usr/share/munin/munin-graph --cron $@ || exit 1

Делаем файл исполняемым:

chmod +x /usr/bin/munin-graph

Правим существующий файл /usr/bin/munin-cron (закомментируем строки, которые добавили в файл /usr/bin/munin-graph):

...
# We always launch munin-html.
# It is a noop if html_strategy is "cgi"
# nice /usr/share/munin/munin-html $@ || exit 1

# The result of munin-html is needed for munin-graph.
# It is a noop if graph_strategy is "cgi"
# nice /usr/share/munin/munin-graph --cron $@ || exit 1

Добавим еще одно задание в кронтаб /etc/cron.d/munin — дописываем следующую строку:

10 * * * *      munin if [ -x /usr/bin/munin-graph ]; then /usr/bin/munin-graph; fi

После этих действий Munin будет собирать данные каждые 5 минут (как и раньше), но строить по ним графики и генерировать html-страницы раз в час.

Еще для оптимизации Munin можно использовать nice и ionice. Для этого достаточно привести кронтаб /etc/cron.d/munin к следующему виду:

*/5 * * * *     munin if [ -x /usr/bin/munin-cron ]; then /usr/bin/ionice -c 3 /usr/bin/nice -n 19 /usr/bin/munin-cron; fi

А если вы использовали предложенный выше вариант с разделением скриптов /usr/share/munin/munin-update и /usr/share/munin/munin-graph, то в кронтабе будет еще и такая строка:

10 * * * *      munin if [ -x /usr/bin/munin-graph ]; then /usr/bin/ionice -c 3 /usr/bin/nice -n 19 /usr/bin/munin-graph; fi

При большом количестве хостов (>200) можно снизить нагрузку на диск если Munin будет генеририровать html-страницы в памяти. Для этого, проверим параметр htmldir в конфигурационном файле /etc/munin/munin.conf:

cat /etc/munin/munin.conf | grep htmldir
htmldir /var/cache/munin/www

Добавим в /etc/fstab следующую строку:

...
tmpfs  /var/cache/munin/www   tmpfs   rw,mode=755,uid=munin,gid=munin,size=150M   0 0

и выполним:

mount -a

Примечание. Эффект от предложенных шагов будет тем ощутимее, чем больше хостов мониторится с помощью Munin.

Добавить комментарий