Устанавливаем и настраиваем систему мониторинга Munin

  • Автор:

munin-debian-ubuntu-000.pngЛюбой администратор рано или поздно приходит к необходимости мониторить основные показатели используемых серверов и своевременно получать предупреждения, если контролируемые показатели выходят за указанные рамки. Существует много решений для мониторинга, от простых, до сложных и сегодня мы рассмотрим одно из них - Munin. Это очень простой в использовании и нетребовательный мониторинг, который позволяет достаточно эффективно контролировать узлы под управлением Linux и неплохо подходит для небольших и средних сетей.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Название и логотип проекта отсылают нас к скандинавской мифологии: ворон Мунин один из спутников бога Одина, он летал по всему миру, запоминал увиденное и потом рассказывал ему обо всем. Его имя с древнеисландского проводится как "помнящий". Так и одноименная система мониторинга, тоже исследует все ваши узлы, запоминает увиденное и потом рассказывает вам обо всем, используя графики.

Разработка Munin началась в 2003 году и, хотя сейчас ее темпы замедлились, продукт является стабильным, развивается и поддерживается. Основным достоинством данной системы мониторинга является продуманная модульная архитектура и простота использования, буквально на уровне "Plug and Play" - включил и работай. И это не пустые слова, ниже мы убедимся, что дело обстоит именно так.

А пока рассмотрим структурную схему системы:

munin-debian-ubuntu-001.png

Мониторинг состоит из двух частей и построен по клиент-серверному принципу (master - nodes). Клиентская часть называется Munin node и ставится на те узлы, которые мы хотим контролировать. Это сетевая служба, которая после запуска начинает слушать порт TCP 4949, для получения данных о системе она использует плагины. Каждый плагин поставляет определенный набор метрик и благодаря такой модульной структуре мы можем легко изменять и наращивать набор передаваемых данных, лишь бы был подходящий плагин.

Серверная часть называется Munin master и с определенной периодичностью опрашивает подключенные к ней ноды, которые передают данные с используемых плагинов. Эти данные для каждого узла помещаются в свою RRD базу данных и на их основе формируются графики в виде png-изображений и html-страницы для доступа к ним.

Чтобы увидеть сформированную информацию нам еще потребуется веб-сервер, особых требований к нему нет, он должен уметь работать со статическим содержимым и поддерживать FastCGI.

Установка и настройка Munin node

Установка производится в одну команду:

apt install munin-node

После установки открываем конфигурационный файл /etc/munin/munin-node.conf и находим в нем следующий параметр, в котором следует указать желаемое имя хоста, которое вы хотите видеть в мониторинге:

host_name my_server.example.com

Если не использовать данную опцию, то вместо ее будет использовать имя хоста, которое можно узнать командой:

hostname -f

Для чего это нужно? Допустим вы используете для сервера с именем srv-mx-01 красивый псевдоним (CNAME) mail.example.com и хотите видеть в системе мониторинга именно его.

Теперь разрешим нашему master подключаться к данной ноде, это можно сделать двумя разными способами, через директиву allow, которая предполагает regex-формат записи:

allow ^192\.168\.233\.80$

В данном случае мы разрешаем принимать соединения от узла 192.168.233.80. Либо использовать более новую директиву:

cidr_allow 192.168.233.80/32

С ее помощью можно разрешать доступ не только отдельному узлу, но и целым подсетям, используя более широкую маску. И, обратите внимание, указание маски /32 для одиночного узла обязательно.

На этом настройки ноды закончены, сохраняем конфигурационный файл и перезапускаем службу.

systemctl restart munin-node

Как видим, все очень просто. Конечно, там есть что тонко настроить под свои нужды, но для простого запуска мониторинга достаточно указать только эти две опции, или даже одну.

Установка и настройка Munin master

Здесь тоже достаточно одной команды:

apt install munin

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

[my_server.example.com]
address 192.168.233.191
use_node_name yes

В квадратных скобках указываем именно то имя, которое содержится в опции host_name ноды, если вы не использовали эту опцию, то укажите реальное hostname узла, в противном случае мастер не будет принимать данные от этой ноды. Ниже указываем адрес узла, опция use_node_name yes предписывает на графиках использовать имя узла, а не его адрес.

Аналогичные настройки выполняем для каждой ноды. Сохраняем файл, перезапускать никакие службы не нужно, изменения автоматически будут прочитаны при очередном опросе.

Фактически мы только что запустили систему мониторинга, данные уже собираются и накапливаются. Осталось только организовать к ним доступ.

Настройка веб-сервера Nginx

Для доступа к сформированным Munin данным подходит любой веб-сервер, мы будем использовать Nginx. Установим его и необходимые для работы компоненты, и утилиты:

apt install nginx spawn-fcgi apache2-utils

Теперь создадим сокет для FastCGI приложения munin, которое понадобится нам чтобы масштабировать изображения:

spawn-fcgi -s /var/run/munin/fcgi-graph.sock -U www-data -u www-data -g www-data /usr/lib/munin/cgi/munin-cgi-graph

Теперь создадим файл виртуального хоста для Munin и перейдем к его редактированию:

nano /etc/nginx/sites-available/munin.conf

Внесем в него следующий текст:

server {
listen 80;

index index.html;

access_log /var/log/nginx/munin_access.log;
error_log /var/log/nginx/munin_error.log;

Если это единственный виртуальный хост на веб-сервере, то можно сделать так, чтобы, набрав адрес сервера мы сразу попадали в панель Munin, для этого добавьте секцию:

location = / {
rewrite ^/$ munin/ redirect; break;
}

Теперь укажем путь к самим данным Munin и включим Basic-аутентификацию для панели мониторинга:

location /munin/static/ {
alias /etc/munin/static/;
expires modified +1w;
}

location /munin/ {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd;
alias /var/cache/munin/www/;
expires modified +310s;
}

И наконец блок для работы масштабирования изображений:

location ^~ /munin-cgi/munin-cgi-graph/ {
access_log off;
fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/var/run/munin/fcgi-graph.sock;
include fastcgi_params;
}
}

Обратите внимание на две фигурные скобки в конце, последняя закрывает открытую нами в самом начале секцию server, в которую вложены секции location.

Теперь создадим пароль, для этого используйте команду:

htpasswd -c /etc/nginx/htpasswd andrey

Ключ -с предписывает создать новый файл, аndrey - имя желаемого пользователя, для всех следующих пользователей команду следует запускать без ключа:

htpasswd /etc/nginx/htpasswd boss

Включим наш виртуальный хост:

ln -s /etc/nginx/sites-available/munin.conf  /etc/nginx/sites-enabled/

Если Munin является единственным виртуальным хостом, то отключим виртуальный хост по умолчанию:

rm /etc/nginx/sites-enabled/default

Проверим конфигурацию на ошибки и перезапустим веб-сервер:

nginx -t
nginx -s reload

Теперь наберем в браузере адрес мастера и после аутентификации попадем в панель мониторинга. Если кроме Munin у вас присутствуют другие виртуальные хосты, то следует набрать http://адрес_мастера/munin.

munin-debian-ubuntu-002.png

Затем выбираем интересующий нас узел и просматриваем графики, все устроено просто, логично, разобраться не составит никакого труда.

munin-debian-ubuntu-003.pngУправление плагинами

Если мы хотим изменить или расширить набор собираемых данных, то нам понадобятся плагины. При установке активируются только самые общие плагины, гораздо больше входит в поставку. Найти их можно в директории /usr/share/munin/plugins. Для их использования потребуется всего-лишь создать символическую ссылку. Плагины делятся на простые и использующие подстановку, последние отличаются наличием нижнего подчеркивания в конце имени.

Активировать простой плагин очень просто:

ln -s /usr/share/munin/plugins/cpuspeed /etc/munin/plugins/

Для плагинов, использующих подстановку, потребуется заглянуть в документацию, чтобы уточнить какой параметр нужно подставлять. Обычно она находится внутри плагина, просто откройте его и прочтите комментарии. Например, для плагина if_ требуется указать имя интерфейса, если интерфейсов несколько - делаем несколько символических ссылок:

ln -s /usr/share/munin/plugins/if_ /etc/munin/plugins/if_ens33
ln -s /usr/share/munin/plugins/if_ /etc/munin/plugins/if_wg0

Чтобы отключить плагин, просто удалите символическую ссылку из директории /etc/munin/plugins.

После чего перезапустите службу:

systemctl restart munin-node

Обычно плагины нормально работают с настройками по умолчанию, но для некоторых может потребоваться указать отдельные параметры, либо мы можете захотеть переопределить некоторые настройки, это можно сделать при помощи конфигурационных файлов в директории /etc/munin/plugin-conf.d, создайте в нем файл(ы) в которые поместите запись формата:

[<plugin-name>]

<option> <values>

Доступные параметры можно узнать в документации плагина.

Обратите внимание, что все файлы их этой директории читаются последовательно и применяется самая последняя настройка. Поэтому мы советуем для настройки каждого плагина использовать отдельный файл с его именем.

Как быть, если штатных плагинов недостаточно? Вы можете скачать подходящий с официального сайта или найти в интернете, затем просто поместите его в любое удобное расположение, сделайте исполняемым:

chmod +x имя_файла_плагина

И точно также сделайте символическую ссылку. Размещать собственные плагины в /usr/share/munin/plugins не рекомендуются, так как они могут быть удалены или перезаписаны при обновлении пакета.

Настройка почтового клиента для отсылки уведомлений

Ну какой современный мониторинг без уведомлений? Правильно - никакой. Поэтому подготовим наш сервер к тому, чтобы он мог отсылать нам сообщения на электронную почту. Данная настройка выполняется на мастере, вместо того чтобы поднимать здесь почтовый сервер, мы установим почтовый клиент, который прозрачно заменит sendmail и позволит работать с внешней почтовой службой, публичной или собственной.

apt install ssmtp mailutils

Затем откроем /etc/ssmtp/ssmtp.conf и добавим учетную запись почты:

mailhub=mail.it-31.ru:587

AuthUser=munin@it-31.ru
AuthPass=Pa$$word_1
UseTLS=YES
UseSTARTTLS=YES
TLS_CA_File=/etc/pki/tls/certs/ca-bundle.crt

Каждая учетная запись начинается с опции mailhub, где указывается почтовый сервер и порт подключения клиента. Ниже указываем учетные данные и параметры шифрования, а также путь к собственному сертификату.

Ниже находим и приводим к следующему виду опцию:

FromLineOverride=YES

Сохраняем файл и открываем следующий /etc/ssmtp/revaliases, в него добавляем строку:

munin:munin@it-31.ru:mail.it-31.ru:587

Которая обозначает, что пользователь munin должен использовать учетную запись munin@it-31.ru на сервере mail.it-31.ru:587.

Проверяем отправку почты:

echo "Test" | su - munin --shell=/bin/bash -c "mail  -s "Test" andrey@it-31.ru"  

В данном случае мы отправляем письмо с темой Test и сообщением Тest на ящик andrey@it-31.ru.

Если письмо доставлено нормально, то все хорошо, иначе выполняем отладку командой:

echo "Test" | su - munin --shell=/bin/bash -c "ssmtp -v -s "Test" andrey@it-31.ru"

В этом случае на экран будет выведен лог почтовой сессии, что в большинстве случаев достаточно для выявления и устранения проблемы.

Настройка уведомлений на электронную почту

Как мы уже видели, Munin прост, поэтому настроить уведомления в нем также просто. Прежде всего создадим список контактов, для этого внесем в /etc/munin/munin.conf следующую строку:

contact.andrey.command mail -s "Munin ${var:worst}: ${var:group}::${var:host}::${var:plugin}" andrey@it-31.ru

Где мы задали для контакта с именем andrey команду для отправки почты по некоторому шаблону, кстати, аналогичным образом можно не только отправлять на почту, но и выполнять любое действие.

Теперь опустимся ниже и в описании ноды укажем, о каких событиях мы хотим получать оповещения. В Munin есть два типа событий warning и critical, по умолчанию о наступлении любого из них уведомляются все созданные контакты. Для примера мы хотим отслеживать нагрузку на процессор со стороны пользовательских процессов.

Для установки правильных значений всегда следует обратиться к документации на плагин, так, например, для нагрузки CPU значение 100 соответствует загрузке одного ядра, для 4-ядерного процессора полная загрузка будет 400.

В тестовых целях мы указали следующие данные (приводим блок целиком):

[u1804-1c.it-31.lab]
address 192.168.233.191
use_node_name yes
cpu.user.warning 75
cpu.user.critical 95

Это сразу отразилось в графическом интерфейсе: на графиках появилась линия с пороговым значением, а ниже табличка.

munin-debian-ubuntu-004.pngДавайте теперь нагрузим этот узел и подождем следующего опроса. Если вы не допустили ошибок, то как только Munin узнает о превышении пороговых значений - он вышлет вам уведомление.

munin-debian-ubuntu-005.pngПосле того, как показатели придут в норму вы получите еще одно уведомление.

Все это хорошо, но можно как-то более гибко организовать рассылку? Можно. Допустим, мы хотим, чтобы уведомления получал еще один пользователь, но только critical.

Хорошо, добавляем в файл конфигурации следующие строки:

contact.boss.command mail -s "Munin ${var:worst}: ${var:group}::${var:host}::${var:plugin}" boss@it-31.ru
contact.boss.always_send critical

Они создают еще один контакт boss с отправкой сообщения на почту, но ограничивают отправку только событиями со статусом critical.

Также можно явно указать каким контактам рассылать сообщения в настройках ноды, это может быть удобно, когда за разные узлы отвечают разные сотрудники:

[u1804-1c.it-31.lab]
address 192.168.233.191
use_node_name yes
cpu.user.warning 75
cpu.user.critical 95
contacts andrey boss

При явном указании опции contacts все рассылки для этой ноды будут производиться только для указанных контактов.

Мониторинг Windows

На официальном сайте клиента для Windows у Munin нет, но его можно найти в репозиториях на GitHub, нельзя сказать, что проект активно развивается, скорее наоборот, но он есть и работает. После установки вам потребуется перейти в директорию с установленной нодой и выполнить с правами администратора пакетный файл Install-Service.bat, никакой настройки не требуется, служба начинает работать сразу. Дополнительную информацию можно найти в файле README.txt.

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал



Loading Comments