Если Вы, как и я, часто разворачиваете новые сервера и каждый раз руками ставите их на мониторинг в Munin, то возможно Вас заинтересует такая вещь как autodiscovery. В этой статье под «autodiscovery», я подразумеваю автоматическое нахождение и добавление новых компьютеров на мониторинг, а не метрик на определенной системе.
Допустим, у нас есть работающий сервер Munin и некоторое количество машин с установленным агентом (munin-node). Мы хотим чтобы все компьютеры, с установленным агентом, добавились на сервер мониторинга автоматически. Конечно есть несколько способов автоматизировать такое поведение, но я предлагаю воспользоваться, так сказать, возможностями самого Munin и написать для этой цели небольшой плагин.
И тут, Вы наверно можете сказать: «Эй, плагины же запускаются на нодах и созданы для мониторинга каких-либо параметров системы! Разве можно сделать autodiscovery при помощи плагина?».
Конечно можно! Во-первых, ничего не мешает установить агент на сам сервер мониторинга. И во-вторых, как нам известно, плагин это не более чем скрипт, который конечно может делать все что угодно! И без сомнения такой скрипт, при наличии достаточных прав, может внести изменения в конфигурационный файл munin.
Итак, приступим:
#!/bin/bash # Да да, снова bash # Давайте укажем где у нас лежит конфиг Munin MUNIN_CONF=/etc/munin/munin.conf # Мы же хотим "хороший" плагин. А значит он должен возвращать какую-то метрику и поддерживать запуск с ключом "config" # Можно к примеру возвращать количество наших нод # Если это запуск с ключом "config", то печатаем параметры нашего графика if [ "$1" == "config" ]; then echo "graph_title Nodes count" echo "graph_vlabel #" echo "graph_category munin" echo "nodes.label Nodes" exit fi # Если это обычный запуск, то сделаем autodiscovery! Т.е. найдем все компьютеры с запущенными нодами в подсети 192.168.0.0/24, сканируя стандартный порт munin-node nodes=`nmap -oG - -pmunin --version-intensity 0 --open 192.168.0.1-254 | grep "Ports: 4949/open/tcp" | sed -e 's/.*(\(.*\)).*/\1/'` # Теперь пройдем по всем найденным компьютерам for node in $nodes; do # и если в конфигурационном файле нет такой ноды if ! [[ `grep -E "\[$node\]" $MUNIN_CONF` ]]; then # то добавим ее echo "" >> $MUNIN_CONF echo "[$node]" >> $MUNIN_CONF echo " address $node" >> $MUNIN_CONF echo " use_node_name yes" >> $MUNIN_CONF fi done # И конечно не забудем вывести значение нашей метрики echo "nodes.value" `grep 'address ' $MUNIN_CONF | wc -l`
Более подробно о том, как в конфигурационный файл добавить ноду, можно почитать в официальной документации. А результат работы плагина — тут.
Спасибо за внимание!