Оптимизация Munin в Debian
Feb 18, 2016 21:30 · 580 words · 3 minute read
Чем больше хостов мониторится с помощью 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.