Рубрики
Без рубрики

Munin Autodiscovery. Где мои ноды?

Если Вы, как и я, часто разворачиваете новые сервера и каждый раз руками ставите их на мониторинг в 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`

Более подробно о том, как в конфигурационный файл добавить ноду, можно почитать в официальной документации. А результат работы плагина — тут.

Спасибо за внимание!

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *