Простая настройка Nagios. Увеличение возможностей Nagios с помощью плагинов собственной разработки Установка nagios ubuntu
Преимущества и новые возможности для мониторинга систем
Отслеживание и анализ больших объемов информации о состоянии разных компьютеров (например, степень загруженности процессоров и сетевой карты) требует больших усилий, но Nagios с открытым исходным кодом (см. раздел ) успешно справляется с задачами мониторинга и оперативного оповещения.
Крайне важно понимать, что Nagios - это не инструмент для замеров параметров работы системы, например, степени загруженности процессоров, а утилита, выдающая результаты мониторинга в виде состояний "работающий", "ненадежный" и "неисправный". Эта особенность Nagios помогает оператору сфокусироваться на самых главных и критических проблемах, основываясь на заранее определенных и настраиваемых критериях.
ПО Nagios реализует функциональность для подготовки отчетов о количестве времени, потерянного из-за простоев, что может быть полезным для отслеживания качества предоставления услуг согласно соглашению об уровне сервиса (service level agreement - SLA). Как будет показано в последующих статьях, Nagios также предлагает возможности для учета времени простоя и создания зависимостей от служб и систем. Эта вводная статья показывает, как легко можно создавать небольшие персонализированные решения для конкретных требований по мониторингу.
Установка
Большинство дистрибутивов Linux® поставляются с встроенной версией Nagios. В этом случае продукт легко интегрируется с Web-сервером Apache. Для активизации или обновления такой конфигурации необходимо выполнить команду:
yum install nagiosили apt-get install nagios-text . Исполняемые файлы для платформы AIX® доступны для загрузки с Web-сайта NagiosExchange (см. раздел ).
Для других платформ исходный код Nagios можно загрузить с Web-сайта Nagios.org (см. раздел ). Для создания Nagios "с чистого листа" необходимы следующие инструменты разработчика.
- Инструменты:
- autoconf
- automake
- Исполняемые файлы:
- libgd
- openssl
- Пакеты (библиотек и заголовочных файлов)
Многие плагины, связанные с SNMP (Simple Network Management Protocol - простой протокол сетевого управления) также потребуют наличия Perl и пакета Net::SNMP.
После установки и настройки Nagios можно получить к нему доступ через стандартный URL http://your.host.name/nagios . На показано, какие системы и службы включены или отключены.
Настройка Nagios
По умолчанию все конфигурационные файлы Nagios находятся в каталоге /etc/nagios . Конфигурационные файлы, связанные с Apache, можно для удобства связать с конфигурационным каталогом Apache c помощью ссылок. Конфигурация разделена на несколько файлов, каждый из которых предназначен для отдельных фрагментов конфигурации.
Первые компоненты, которые необходимо настроить, - это контакты и группы контактов. Контакты - это персоны, получающие извещение, когда система или служба отключается. По умолчанию Nagios предлагает оповещение по электронной почте и пейджерам, но расширения позволяют отправлять извещения по протоколу Jabber и многими другими способами, которые могут быть удобны в различных обстоятельствах.
Контакты хранятся в файле contacts.cfg и определяются, как показано в листинге 1.
Листинг 1. Конфигурация 1: Базовая информация о контактах
define contact{ contact_name jdoe alias John Due service_notification_commands notify-by-email host_notification_commands host-notify-by-emailes email [email protected] }Контакты можно группировать, и вместо отдельных людей, которые должны быть извещены в случае изменения статуса системы или службы, Nagios будет оповещать соответствующую группу. Иногда имеет смысл задать пользователя несколько раз, чтобы определить различные адреса или команды для отправки извещений и затем добавить все способы связаться с пользователем к группе контактов, к которой он принадлежит ().
Листинг 2. Конфигурация 2: Группировка контактов
define contactgroup{ contactgroup_name server-admins alias Server Administrators members jdoe,albundy }Следующий шаг - это настроить системы, за которыми Nagios будет осуществлять мониторинг. Необходимо добавить каждый компьютер, на котором имеются службы, которые предстоит отслеживать или периодически проверять на активность. Конфигурационный файл для хранения система - это файл hosts.cfg . В листинге 3 приведен пример определения компьютера.
Листинг 3. Конфигурация 3: Добавление нового компьютера
define host{ host_name ubuntu_1_2 alias Ubuntu test server address 192.168.1.2 check_command check-host-alive max_check_attempts 20 notifications_enabled 1 event_handler_enabled 0 flap_detection_enabled 0 process_perf_data 1 retain_status_information 1 retain_nonstatus_information 1 notification_interval 60 notification_period 24x7 notification_options d,u,r }Последний этап конфигурации Nagios - это определение служб для сконфигурированных систем. Показанный в листинге 4 пример использует заранее определенный ping-плагин для Nagios, который отправляет эхо-запросы по протоколу ICMP (Internet Control Message Protocol), чтобы определить, отвечает компьютер или нет.
Листинг 4. Конфигурация 4: Добавление новой службы
define service{ use service-template host_name ubuntu_1_2 service_description PING check_period 24x7 contact_groups server-admins notification_options c,r check_command check_ping!300.0,20%!1000.0,60% }После подготовки этой конфигурации необходимо перезапустить демона Nagios, а затем, подождав несколько секунд, пока Nagios инициализируется, проверить, появились ли ping-службы в Web-интерфейсе администратора.
Написание плагинов для Nagios
Наиболее интересный аспект Nagios - это то, что к нему можно легко написать собственный плагин, для чего требуется изучить несколько простых правил. Для управления плагином Nagios просто порождает дочерний процесс каждый раз, когда запрашивает состояние службы и использует выходную информацию и код возврата этой команды для определения состояния. Коды возврата с состоянием службы интерпретируются следующим образом:
- OK - код возврата 0 - означает, что сервис работает нормально;
- WARNING - код возврата 1 - это предупредительный сигнал о том, что у сервиса могут быть проблемы;
- CRITICAL - код возврата 2 - критическое состояние сервиса;
- UNKNOWN - код возврата 3 - неизвестное состояние сервиса.
Последнее состояние просто означает, что плагин не смог определить состояние службы. Это может произойти, например, в результате внутренней ошибки.
В листинге 5 приведен пример сценария на языке Python, который проверяет среднюю загрузку ОС UNIX®. В нем предполагается, что уровень выше 2.0 соответствует предупредительному состоянию, а уровень выше 5.0 -критическому состоянию. Эти значения "вшиты" в код, и также всегда используется среднее значение загрузки за последнюю минуту.
Листинг 5. Python плагин - пример работающего плагина
#!/usr/bin/env python import os,sys (d1, d2, d3) = os.getloadavg() if d1 >= 5.0: print "GETLOADAVG CRITICAL: Load average is %.2f" % (d1) sys.exit(2) elif d1 >= 2.0: print "GETLOADAVG WARNING: Load average is %.2f" % (d1) sys.exit(1) else: print "GETLOADAVG OK: Load average is %.2f" % (d1) sys.exit(0)Подготовив небольшой исполняемый компонент, необходимо зарегистрировать этот плагин в Nagios и создать определение службы, которая будет проверять среднюю нагрузку.
Это довольно просто: сначала создается файл /etc/nagios-plugins/config/mygetloadavg.cfg с содержимым, приведенным ниже, и добавляется служба в файл services.cfg , как показано в примере ниже. Напомню, что localhost должен присутствовать в конфигурационном файле hosts.cfg .
Листинг 6. Пример плагина - регистрация в Nagios
define command{ command_name check_mygetloadavg command_line /path/to/check_getloadavg }Листинг 7. Создание службы, использующей пример плагина
define service{ use service-template host_name localhost service_description LoadAverage check_period 24x7 contact_groups server-admins notification_options c,r check_command check_mygetloadavg }Написание полноценного плагина
В предыдущем примере были показаны ограничения "жестко запрограммированного" плагина, который не позволяет менять конфигурации во время исполнения. На практике лучше создавать конфигурируемые плагины, тогда можно будет создать и поддерживать только один плагин, зарегистрировав его как отдельный плагин в Nagios, и передавать ему аргументы настройки предупредительного и критических уровней под различные обстоятельства. Следующий пример также включает сообщения с информацией об использовании, это особенно полезно для плагинов, используемых или поддерживаемых несколькими разработчиками или администраторами.
Другой полезный прием - это перехватывание всех исключительных ситуаций и возврат в отчет о состоянии службы значения UNKNOWN , чтобы Nagios мог соответствующим образом оповестить об этом событии. Плагины, которые допускают "выход" исключительных ситуаций за свои границы, чаще всего возвращают значение 1, которое трактуется Nagios как WARNING -состояние. Важно чтобы плагин правильно отличал состояние WARNING (предупредительное) от UNKNOWN (неизвестное). Стоит заметить, что обычно извещения об отдельных состояниях WARNING отключаются, но не стоит отключать извещения о состоянии UNKNOWN .
Написание Python-плагина
Допущения, указанные выше (параметризация во время исполнения, сообщение об использовании и улучшенная обработка исключительных ситуаций) приводят к плагину, исходный код которого в несколько раз больше, чем у предыдущего. Однако при этом добавляется безопасная обработка ошибок и способность повторно использовать плагин в различных ситуациях.
Листинг 8. Python-плагин - полноценный плагин для получения данных о средней загрузке
#!/usr/bin/env python import os import sys import getopt def usage(): print """Usage: check_getloadavg [-h|--help] [-m|--mode 1|2|3] \ [-w|--warning level] [-c|--critical level]" Mode: 1 - last minute ; 2 - last 5 minutes ; 3 - last 15 minutes" Warning level defaults to 2.0 Critical level defaults to 5.0""" sys.exit(3) try: options, args = getopt.getopt(sys.argv, "hm:w:c:", "--help --mode= --warning= --critical=",) except getopt.GetoptError: usage() sys.exit(3) argMode = "1" argWarning = 2.0 argCritical = 5.0 for name, value in options: if name in ("-h", "--help"): usage() if name in ("-m", "--mode"): if value not in ("1", "2", "3"): usage() argMode = value if name in ("-w", "--warning"): try: argWarning = 0.0 + value except Exception: print "Unable to convert to floating point value\n" usage() if name in ("-c", "--critical"): try: argCritical = 0.0 + value except Exception: print "Unable to convert to floating point value\n" usage() try: (d1, d2, d3) = os.getloadavg() except Exception: print "GETLOADAVG UNKNOWN: Error while getting load average" sys.exit(3) if argMode == "1": d = d1 elif argMode == "2": d = d2 elif argMode == "3": d = d3 if d >= argCritical: print "GETLOADAVG CRITICAL: Load average is %.2f" % (d) sys.exit(2) elif d >= argWarning: print "GETLOADAVG WARNING: Load average is %.2f" % (d) sys.exit(1) else: print "GETLOADAVG OK: Load average is %.2f" % (d) sys.exit(0)Для использования нового плагина необходимо зарегистрировать его в файле /etc/nagios-plugins/config/mygetloadavg2.cfg , как показано в листинге 9.
Листинг 9. Python-плагин - регистрация в Nagios
define command{ command_name check_mygetloadavg2 command_line /path/to/check_getloadavg2 -m $ARG1$ -w $ARG2$ -c $ARG3$ }Также необходимо добавить или изменить запись об этой службе в файле services.cfg , как показано в листинге 10. Стоит отметить, что восклицательный знак! разделяет параметры плагина. Как и прежде, необходимо, чтобы localhost был определен в конфигурационном файле hosts.cfg .
Листинг 10. Создание сервиса, использующего плагин Python
define service{ use service-template host_name localhost service_description LoadAverage2 check_period 24x7 contact_groups server-admins notification_options c,r check_command check_mygetloadavg2!1!3.0!6.0 }Написание плагина Tcl
Последний пример - это плагин, написанный на Tcl и проверяющий курсы валют с сайта xmethods.net с помощью протокола SOAP (Simple Object Access Protocol) и технологии WSDL (Web Services Description Language). SOAP предоставляет плагину текущие значения курсов валют, чтобы сравнить их с конфигурированными значениями. Если значение находится внутри предупредительного диапазона, то считается, что это состояние OK . Если значение выше или ниже предупредительного уровня, но не выходит за критический предел, то считается, что это состояние WARNING . В противном случае состояние считается как CRITICAL , если не происходит сетевого сбоя, в случае которого состояние устанавливается в UNKNOWN .
Плагин распознает конфигурируемые параметры, так что можно проверять различные курсы с различными диапазонами для проверки. Также его можно использовать для проверки курсов валют различных стран (листинг 11).
Листинг 11. Tcl-плагин - проверка текущих значений курсов обмена валют
#!/usr/bin/env tclsh # parse arguments package require cmdline set options { {country1.arg "" "Country 1"} {country2.arg "" "Country 2"} {lowerwarning.arg "" "Lower warning limit"} {upperwarning.arg "" "Upper warning limit"} {lowercritical.arg "" "Lower critical limit"} {uppercritical.arg "" "Upper critical limit"} } array set opt }] # если пользователь не предоставил все аргументы, # то показать справочное сообщение for each necessary { if {$opt($necessary) == ""} { set argv "-help" catch {cmdline::getoptions argv $options {: }} usage puts stderr $usage exit 3 } } # загрузить пакет TclWebServices package require WS::Client if { 1] } error]} { # если по какой-либо причине не удалось загрузить курс, то сообщить об этом puts "EXCHANGERATE UNKNOWN: $error" exit 3 } if {($result < $opt(lowercritical)) || ($result > $opt(uppercritical))} { puts "EXCHANGERATE CRITICAL: rate is $result" exit 2 } if {($result < $opt(lowerwarning)) || ($result > $opt(upperwarning))} { puts "EXCHANGERATE WARNING: rate is $result" exit 1 } puts "EXCHANGERATE OK: rate is $result" exit 0Теперь необходимо зарегистрировать эту команду, чтобы Nagios знал, как вызывать ее. Для того чтобы сделать это, надо создать файл /etc/nagios-plugins/config/exchangerate.cfg с содержимым, похожим на предыдущие конфигурации и следующим определением команды:
command_line /path/to/check_exchangerate -country1 $ARG1$ -country2 $ARG2$ -lowercritical \ $ARG3$ -lowerwarning $ARG4$ -upperwarning $ARG5$ -uppercritical $ARG6$Имя команды check_exchangerate используется в примере, приведенном ниже.
Затем необходимо создать службу, которая будет использовать созданный плагин для отслеживания курсов валют. Ниже приведен пример определения службы, ассоциирующий службу с сервером localhost . Хотя проверка на самом деле не связана с каким-либо реальным компьютером, ее все равно необходимо привязать к системе. Если проверка включает вызов SOAP-методов серверов внутри контролируемой сети, то необходимо добавить реальный сервер, для которого будет выполняться мониторинг, и привязать службу к этому серверу. Код в проверяет, что курс британского фунта по отношению к японской йене находится в диапазоне от 225 до 275.
Листинг 12. Добавление Tcl-плагина в качестве новой службы
define service{ use service-template host_name localhost service_description EXCHANGERATE check_period 24x7 contact_groups other-admins notification_options c,r check_command check_exchangerate!England!Japan!200!225!275!300 }Заключение
Nagios можно использовать для мониторинга всех типов ПО и компьютерного оборудования. Возможность создавать собственные плагины позволяет выполнять мониторинг всего, с чем может общаться сервер Nagios. Для этого можно использовать любой язык программирования, который принимает аргументы с командной строки и поддерживает коды возврата, так что возможности оказываются почти безграничными!
Опытный системный администратор может расширить SOAP-пример с помощью Tcl или любого другого языка для взаимодействия с Web-службами в Интранет-сети и написания плагинов для проверки правильности функционирования этих служб.
Также можно использовать С-плагины или возможности С-программирования, встроенные в используемый динамический язык (Pyinline в Python, Inline в Perl или Critcl в Tcl) для комбинирования сочетания системных API ОС на языке С с плагином, написанном на языке высокого уровня.
Другая возможность Nagios, на которую стоит обратить внимание, - это пассивная проверка. Процесс мониторинга с помощью Nagios, рассматриваемый в этой статье, основывается на исполняемых компонентах для определения статуса с коротким жизненным циклом, запуске этих компонентов и получении результатов от них. При пассивной проверке Nagios не запускает плагины для проверки статуса, а отдельные приложения посылают сообщения об изменении статуса периодически или когда состояние службы изменяется. Подобное приложение может получать оповещения из различных источников, накапливать их и передавать подготовленную сводную информацию в Nagios. Nagios также может предположить, что сервис отключился, если он не присылает оповещений в течение определенного периода времени. Реализация пассивной проверки с помощью Nagios будет описана в следующей статье.
Преимущество плагинов для Nagios - это простота, с которой их можно создавать и обмениваться ими. Плагины Nagios полезны в ситуациях, с которыми имеют дело сетевые и системные администраторы, и в большинстве случаев это повторное использование результатов работы, которую уже кто-то сделал раньше. Подобно популярным ресурсам Wiki и Web, не требуется много усилий, чтобы внести вклад в виде полезного примера, в то время как совокупные возможности всех доступных плагинов очень велики.
Перед конфигурированием nagios нужно установить необходимые зависимости
# apt install build-essential apache2 php libapache2-mod-php7.0 php-gd libgd-dev mailutils
И добавить пользователя и группу, от имени которых будет работать nagios
# useradd nagios # groupadd nagcmd # usermod -a -G nagcmd nagios # usermod -a -G nagcmd www-data
Перейдем в каталог для сборки и скачаем исходный код nagios и плагинов
# cd /usr/src/ # wget https://sourceforge.net/projects/nagios/files/nagios-4.x/nagios-4.2.3/nagios-4.2.3.tar.gz # wget https://nagios-plugins.org/download/nagios-plugins-2.1.4.tar.gz
Разархивируем скаченные архивы
# tar xzvf nagios-4.2.3.tar.gz # tar xzvf nagios-plugins-2.1.4.tar.gz
Перейдем в директорию с исходным кодом nagios и выполним конфигурирование
# cd nagios-4.2.3 # ./configure --prefix=/etc/nagios --with-command-group=nagcmd --with-httpd-conf=/etc/apache2/sites-available --with-mail=/usr/bin/mail
Выполним сборку
# make all
Установим nagios
# make install
Установим init скрипт в /etc/init.d и активируем авто запуск
# make install-init # update-rc.d nagios defaults
Установим права на директорию для хранения внешних командных файлов
# make install-commandmode
Установим конфигурационные файлы nagios
# make install-config
Установим конфигурацию nagios для apache
# make install-webconf
Скопируем в каталок с nagios скрипты обработки событий внешних командных файлов и выставим владельца на папку
# cp -R contrib/eventhandlers/ /etc/nagios/libexec/ # chown -R nagios:nagios /etc/nagios/libexec/eventhandlers
Выполним проверку установленной конфигурации
# /etc/nagios/bin/nagios -v /etc/nagios/etc/nagios.cfg
# make # make install
Включим конфигурацию nagios в apache и активируем необходимые дополнения
# a2ensite nagios # a2enmod rewrite cgi
Перезапустим службу apache
# service apache2 restart
Запустим nagios и проверим статус
# service nagios start # service nagios status ● nagios.service - Nagios Loaded: loaded (/etc/systemd/system/nagios.service; enabled; vendor preset: enabled) Active: active (running)
Добавим администратора nagios
# htpasswd -c /etc/nagios/etc/htpasswd.users nagiosadmin
Теперь разберемся с конфигурационными файлами nagios.
/etc/nagios/etc/cgi.cfg — определяет настройки веб интерфейса, а так же права доступа к web консоли nagios.
/etc/nagios/etc/htpasswd.users — база пользователей и их паролей для доступа к web интерфейсу nagios.
/etc/nagios/etc/nagios.cfg — содержит в себе основные настройки и пути к *.cfg файлам.
/etc/nagios/etc/resource.cfg — здесь определена переменная, до каталога с плагинами.
/etc/nagios/etc/objects/commands.cfg — содержит определения команд.
/etc/nagios/etc/objects/contacts.cfg — определяет почтовые контакты, на которые будет происходит отправка оповещений nagios.
/etc/nagios/etc/objects/templates.cfg — содержит шаблоны контактов, хостов и сервисов.
/etc/nagios/etc/objects/timeperiods.cfg — содержит определения временных периодов.
/etc/nagios/etc/objects/localhost.cfg — конфигурация для мониторинга самого сервера nagios. В ней определен сам хост, хостовая группа для linux серверов и сервисы мониторинга.
/etc/nagios/etc/objects/printer.cfg — конфигурация для мониторинга принтера. В ней определен произвольный принтер, хостовая группа для принтеров и сервисы мониторинга.
/etc/nagios/etc/objects/switch.cfg — конфигурация для мониторинга свитча. В ней определен произвольный свитч, хостовая группа для свитчей и сервисы мониторинга.
/etc/nagios/etc/objects/windows.cfg — конфигурация для мониторинга произвольного windows хоста. В ней определен произвольный windows хост, хостовая группа для windows серверов и сервисы мониторинга.
Из описания видно, что localhost.cfg, printer.cfg, switch.cfg и windows.cfg содержат в себе определения хост групп. Для удобства имеет смысл выделить их в отдельный файл /etc/nagios/etc/objects/hostgroups.cfg . Соответственно в изначальном файле их нужно закоментировать. Описание одного и того же объекта не должно повторятся в разных конфигурационных файлах. Так же мы добавим файл /etc/nagios/etc/objects/servicegroups.cfg , в котором будут определены сервисные группы. Так как в данной публикации производится настройка мониторинга для linux и windows хостов, мы определим группы для них. Для принтеров и свитчей группы определяются по аналогии. Так же мы создадим папку /etc/nagios/etc/servers/, в которой будут храниться файлы, определяющие хосты для мониторинга. Внесем соответствующие изменения в файл nagios.cfg
# nano /etc/nagios/etc/nagios.cfg . . . # You can specify individual object config files as shown below: cfg_file=/etc/nagios/etc/objects/commands.cfg cfg_file=/etc/nagios/etc/objects/contacts.cfg cfg_file=/etc/nagios/etc/objects/timeperiods.cfg cfg_file=/etc/nagios/etc/objects/templates.cfg # Definitions for hostgroups and servicegroups cfg_file=/etc/nagios/etc/objects/hostgroups.cfg cfg_file=/etc/nagios/etc/objects/servicegroups.cfg # Definitions for monitoring the local (Linux) host cfg_file=/etc/nagios/etc/objects/localhost.cfg # Definitions for monitoring a Windows machine #cfg_file=/etc/nagios/etc/objects/windows.cfg # Definitions for monitoring a router/switch #cfg_file=/etc/nagios/etc/objects/switch.cfg # Definitions for monitoring a network printer #cfg_file=/etc/nagios/etc/objects/printer.cfg # You can also tell Nagios to process all config files (with a .cfg # extension) in a particular directory by using the cfg_dir # directive as shown below: cfg_dir=/etc/nagios/etc/servers #cfg_dir=/etc/nagios/etc/printers #cfg_dir=/etc/nagios/etc/switches #cfg_dir=/etc/nagios/etc/routers . . .
Создадим файлы для хост и сервис групп и выставим на них права
# cd /etc/nagios/etc/objects/ # touch hostgroups.cfg servicegroups.cfg # chown nagios:nagios hostgroups.cfg servicegroups.cfg # chmod 664 hostgroups.cfg servicegroups.cfg
Создадим каталог /etc/nagios/etc/servers / и выставим на него права
# mkdir /etc/nagios/etc/servers/ # chown nagios:nagios /etc/nagios/etc/servers/ # chmod 775 /etc/nagios/etc/servers/
Добавим в hostgroups.cfg определения хост групп для linux и windows серверов из localhost.cfg и windows.cfg соответственно
# nano /etc/nagios/etc/objects/hostgroups.cfg # Define an optional hostgroup for Linux machines # All hosts that use the linux-server template will automatically be a member of this group define hostgroup{ hostgroup_name linux-servers ; The name of the hostgroup alias Linux Servers ; Long name of the group } # Define a hostgroup for Windows machines # All hosts that use the windows-server template will automatically be a member of this group define hostgroup{ hostgroup_name windows-servers ; The name of the hostgroup alias Windows Servers ; Long name of the group }
Так как в nagios.cfg путь к windows.cfg закоментирован, коментировать определение хост групп в windows.cfg не обязательно, а вот в localhost.cfg это обязательное действие
# nano /etc/nagios/etc/objects/localhost.cfg . . . # Define an optional hostgroup for Linux machines #define hostgroup{ # hostgroup_name linux-servers ; The name of the hostgroup # alias Linux Servers ; Long name of the group # members localhost ; Comma separated list of hosts that belong to this group # } . . .
При создании объекта windows сервер, он автоматически становится членом группы windows-servers. Это действие определено в файле шаблонов templates.cfg. Чтобы linux сервера попадали автоматически в группу linux-servers, нужно сделать следующее изменение
# nano /etc/nagios/etc/objects/templates.cfg . . . # Linux host definition template - This is NOT a real host, just a template! define host{ name linux-server ; The name of this host template use generic-host ; This template inherits other values from the generic-host template check_period 24x7 ; By default, Linux hosts are checked round the clock check_interval 5 ; Actively check the host every 5 minutes retry_interval 1 ; Schedule host check retries at 1 minute intervals max_check_attempts 10 ; Check each Linux host 10 times (max) check_command check-host-alive ; Default command to check Linux hosts notification_period workhours ; Linux admins hate to be woken up, so we only notify during the day ; Note that the notification_period variable is being overridden from ; the value that is inherited from the generic-host template! notification_interval 120 ; Resend notifications every 2 hours notification_options d,u,r ; Only send notifications for specific host states contact_groups admins ; Notifications get sent to the admins by default hostgroups linux-servers ; Host groups that linux servers should be a member of register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE! } . . .
Для настройки оповещения, нужно указать email администратора системы в contacts.cfg
# nano /etc/nagios/etc/objects/contacts.cfg . . . define contact{ contact_name nagiosadmin ; Short name of user use generic-contact ; Inherit default values from generic-contact template (defined above) alias Nagios Admin ; Full name of user email admin@сайт ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ****** } . . .
# service nagios restart
Проверить работоспособность оповещений, можно следующим способом, в web интерфейсе выбрать слева «Hosts», далее нажимаем на «localhost», в меню справа нажимаем «Send custom host notification», пишем что угодно в строку «Comment» и нажимаем «Commit».
На почту, указанную в contacts.cfg должно прийти оповещение.
Немного о плагинах
В папке /etc/nagios/libexec располагаются установленные плагины. В начале статьи было отмечено, что nagios получает всю информацию через плагины. Для примера посмотрим uptime системы
# /etc/nagios/libexec/check_uptime Uptime OK: 0 day(s) 3 hour(s) 52 minute(s) | uptime=232.000000;;;
Большинство плагинов работаю только с аргументами, к примеру посмотрим статус файла подкачки системы
# /etc/nagios/libexec/check_swap -w 20 -c 10 SWAP OK - 100% free (2044 MB out of 2044 MB) |swap=2044MB;0;0;0;2044
Здесь есть два аргумента -w 20 и -c 10.
w — warning, когда останется 20% свободного места, будет происходить событие warning.
c — critical, когда останется 10% свободного места, будет происходить событие critical.
Так же плагины бывают локальные и «общие». Приведенные выше примеры, относятся к локальным. К примеру плагином check_swap не удастся посмотреть статус файла подкачки на удаленном хосте, а вот плагином check_ping можно проверить доступность и локального и удаленного хоста
# /etc/nagios/libexec/check_ping -H localhost -w 100.0,20% -c 500.0,60% PING OK - Packet loss = 0%, RTA = 0.04 ms|rta=0.036000ms;100.000000;500.000000;0.000000 pl=0%;20;60;0 # /etc/nagios/libexec/check_ping -H 192.168.1.16 -w 100.0,20% -c 500.0,60% PING OK - Packet loss = 0%, RTA = 0.27 ms|rta=0.273000ms;100.000000;500.000000;0.000000 pl=0%;20;60;0
Немного о NRPE
NRPE — Nagios Remote Plugin Executor. Для того, чтобы nagios мог получать информацию от удаленных хостов, такую как загрузка диска, или процессора, используется nrpe плагин. Nagios обращается через nrpe плагин, к nrpe серверу, установленному на удаленном linux/Unix хосте. Nrpe сервер запускает локальные плагины, и передает nagios серверу полученную информацию. Важно! nrpe сервер и плагин должны быть одной версии, иначе могут возникать ошибки.
Установка NRPE плагина
Перед установкой nrpe плагина, нужно установить зависимость
# apt install libssl-dev
Скачать последнюю версию nrpe можно с сайта nagios . Перейдем в каталог для сборки, скачаем и разархивируем последнюю версию nrpe
# cd /usr/src/ # wget https://github.com/NagiosEnterprises/nrpe/archive/3.0.1.tar.gz # tar xzvf 3.0.1.tar.gz
Перейдем в папку с nrpe и выполним конфигурирование
Выполним сборку и установку nrpe плагина
# make check_nrpe # make install-plugin
Добавим в /etc/nagios/etc/objects/commands.cfg поддержку nrpe
# nano /etc/nagios/etc/objects/commands.cfg . . . # "check_nrpe" command definition define command{ command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ } . . .
После проделанных изменений нужно перезапустить службу nagios
# service nagios restart
Установка NRPE сервера
На linux хосте, который мы будем мониторить, нужно установить nrpe сервер, и плагины.
Установим необходимые зависимости
# apt install build-essential libssl-dev
Перейдем в каталог для сборки, скачаем nrpe, плагины и разархивируем их
# cd /usr/src/ # wget https://github.com/NagiosEnterprises/nrpe/archive/3.0.1.tar.gz # wget https://nagios-plugins.org/download/nagios-plugins-2.1.4.tar.gz # tar xzvf 3.0.1.tar.gz # tar xzvf nagios-plugins-2.1.4.tar.gz
Перейдем в каталог с nrpe и выполним конфигурирование
# cd nrpe-3.0.1 # ./configure --prefix=/etc/nagios
Выполним сборку
# make nrpe
Добавим пользователя и группу, от имени которых будет работать nrpe сервер
# make install-groups-users
Выполним установку сервера и конфигурационного файла
# make install-daemon # make install-config
Установим стартовый скрипт
# make install-init # systemctl enable /lib/systemd/system/nrpe.service
Перейдем в директорию с исходным кодом плагинов и выполним конфигурирование
# cd /usr/src/nagios-plugins-2.1.4/ # ./configure --prefix=/etc/nagios --with-nagios-user=nagios --with-nagios-group=nagios
Выполним сборку и установку плагинов
# make # make install
В /etc/nagios/etc/nrpe.cfg разрешим nagios серверу получать информацию о системе, а так же укажем истинное название раздела диска для мониторинга, в предопределенной команде
Nano /etc/nagios/etc/nrpe.cfg . . . allowed_hosts=127.0.0.1, 192.168.1.13 . . . command=/etc/nagios/libexec/check_users -w 5 -c 10 command=/etc/nagios/libexec/check_load -w 15,10,5 -c 30,25,20 command=/etc/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda1 command=/etc/nagios/libexec/check_procs -w 5 -c 10 -s Z command=/etc/nagios/libexec/check_procs -w 150 -c 200 . . .
192.168.1.13 нужно заменить на адрес своего nagios сервера.
Запустим nrpe сервер и проверим его статус
# service nrpe start # service nrpe status ● nrpe.service - Nagios Remote Program Executor Loaded: loaded (/lib/systemd/system/nrpe.service; enabled; vendor preset: enabled) Active: active (running)
Добавление linux хоста в систему мониторинга
Для этого мы создадим файл linux-server.cfg в папке servers
# nano /etc/nagios/etc/servers/linux-serv.cfg define host{ use linux-server host_name linux-serv alias linux-serv address 192.168.1.12 } define service{ use generic-service host_name linux-serv service_description CPU Load check_command check_nrpe!check_load } define service{ use generic-service host_name linux-serv service_description Current Users check_command check_nrpe!check_users } define service{ use generic-service host_name linux-serv service_description /dev/sda1 Free Space check_command check_nrpe!check_sda1 } define service{ use generic-service host_name linux-serv service_description Total Processes check_command check_nrpe!check_total_procs } define service{ use generic-service host_name linux-serv service_description Zombie Processes check_command check_nrpe!check_zombie_procs }
192.168.1.12 нужно заменить на адрес своего linux сервера.
Директива use указывает на имя шаблона в templates.cfg, в котором определены настройки по умолчанию. Для того, чтобы новый хост появился в web интерфейсе нужно перезагрузить службу nagios
# service nagios restart
Для проверки работоспособности nrpe можно выполнить команду
# /etc/nagios/libexec/check_nrpe -H 192.168.1.12 NRPE v3.0.1
Для проверки определенного сервиса, нужно добавить аргумент с названием проверки
# /etc/nagios/libexec/check_nrpe -H 192.168.1.12 -c check_sda1 DISK OK - free space: /var/tmp 14549 MB (85% inode=88%);| /var/tmp=2527MB;14411;16212;0;18014
Название проверки мы определяли в файле nrpe.cfg
Command[check_sda1 ]=/etc/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda1
и в файле linux-serv.cfg
Define service{ use generic-service host_name linux-serv service_description /dev/sda1 Free Space check_command check_nrpe!check_sda1 }
Мониторинг Windows хостов
Для мониторинга windows хостов используется nt плагин. По умолчанию он входит в состав базовых плагинов, и его не нужно отдельно устанавливать. Через nt плагин nagios обращается к NSClient++, установленному на windows хосте. NSClient++ обращается к определенным модулям, которые сообщают ему информацию о системе. Полученную информацию NSClient++ передает nogios серверу.
Установка NSClient++
На windows хосте нужно установить NSClient++. Скачиваем последнюю версию и запускаем от имени администратора.
Нажимаем «Next»
Снова нажимаем «Next»
Выбираем «Typical»
Указываем адрес nagios сервера, пароль и оставляем две первых галочки. Жмем «Next»
Жмем «Install»
Жмем «Finish»
Добавление windows хоста в систему мониторинга
Для этого мы создадим файл windows-serv.cfg в папке servers
# nano /etc/nagios/etc/servers/windows-serv.cfg define host{ use windows-server host_name windows-serv alias My Windows Server address 192.168.1.33 } define service{ use generic-service host_name windows-serv service_description NSClient++ Version check_command check_nt!CLIENTVERSION } define service{ use generic-service host_name windows-serv service_description Uptime check_command check_nt!UPTIME } define service{ use generic-service host_name windows-serv service_description CPU Load check_command check_nt!CPULOAD!-l 5,80,90 } define service{ use generic-service host_name windows-serv service_description Memory Usage check_command check_nt!MEMUSE!-w 80 -c 90 } define service{ use generic-service host_name windows-serv service_description C:\ Drive Space check_command check_nt!USEDDISKSPACE!-l c -w 80 -c 90 } define service{ use generic-service host_name windows-serv service_description VMTools check_command check_nt!SERVICESTATE!-d SHOWALL -l VMTools } define service{ use generic-service host_name windows-serv service_description Explorer check_command check_nt!PROCSTATE!-d SHOWALL -l explorer.exe }
192.168.1.33 нужно заменить на адрес своего windows сервера.
Если при установке NSClient++ клиента указывался пароль, нужно добавить его в commands.cfg
# nano /etc/nagios/etc/objects/commands.cfg . . . # "check_nt" command definition define command{ command_name check_nt command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s MegaPass -v $ARG1$ $ARG2$ } . . .
И перезапустить службу nagios
# service nagios restart
Определение сервисной группы
Сервисная группа объединяет хосты, по определенным сервисным проверкам. Создадим сервисную группу CPU Load, и объединим хосты по проверке загрузки процессора.
# nano /etc/nagios/etc/objects/servicegroups.cfg define servicegroup{ servicegroup_name cpuload alias CPU Load members linux-serv,CPU Load, localhost,Current Load, windows-serv,CPU Load }
Члены группы определяются в директиве members по принципу
members=
Чтобы группа стала доступна, нужно перезапустить службу nagios
# service nagios restart
Расположение связей хостов на карте
По умолчанию все хосты на карте соединены с Nagios Process. Бывают случаи, когда нужно переопределить такое поведение. К примеру связь должна идти не от Nagios Process, а от другой точки на карте (как пример соединение сервера через свитч). Делается это добавлением в секцию описания хоста директивы parents. Для наглядного примера изменим связь windows-serv от Nagios Process к linux-serv
# nano /etc/nagios/etc/servers/windows-serv.cfg define host{ use windows-server host_name windows-serv alias My Windows Server address 192.168.1.33 parents linux-serv } . . .
И перезапустить службу nagios
# service nagios restart
В первом случае все хосты имели связь с Nagios Process, во втором случае связь windows-serv начинается от linux-serv.
Включение иконок
В nagios есть возможность включения иконок рядом с названием хоста. Иконки находятся в папке /etc/nagios/share/images/logos. Можно воспользоваться готовым набором, можно загрузить из интернета. Для включения отображения иконок, нужно добавить следующие строки в templates.cfg
# nano /etc/nagios/etc/objects/templates.cfg . . . # Linux host definition template - This is NOT a real host, just a template! define host{ name linux-server ; The name of this host template use generic-host ; This template inherits other values from the generic-host template check_period 24x7 ; By default, Linux hosts are checked round the clock check_interval 1 ; Actively check the host every 5 minutes retry_interval 1 ; Schedule host check retries at 1 minute intervals max_check_attempts 10 ; Check each Linux host 10 times (max) check_command check-host-alive ; Default command to check Linux hosts notification_period workhours ; Linux admins hate to be woken up, so we only notify during the day ; Note that the notification_period variable is being overridden from ; the value that is inherited from the generic-host template! notification_interval 120 ; Resend notifications every 2 hours notification_options d,u,r ; Only send notifications for specific host states contact_groups admins ; Notifications get sent to the admins by default hostgroups linux-servers ; Host groups that linux servers should be a member of icon_image linux40.png statusmap_image linux40.gd2 register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE! } # Windows host definition template - This is NOT a real host, just a template! define host{ name windows-server ; The name of this host template use generic-host ; Inherit default values from the generic-host template check_period 24x7 ; By default, Windows servers are monitored round the clock check_interval 5 ; Actively check the server every 5 minutes retry_interval 1 ; Schedule host check retries at 1 minute intervals max_check_attempts 10 ; Check each server 10 times (max) check_command check-host-alive ; Default command to check if servers are "alive" notification_period 24x7 ; Send notification out at any time - day or night notification_interval 30 ; Resend notifications every 30 minutes notification_options d,r ; Only send notifications for specific host states contact_groups admins ; Notifications get sent to the admins by default hostgroups windows-servers ; Host groups that Windows servers should be a member of icon_image win40.png statusmap_image win40.gd2 register 0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE } . . .
Перезапускаем службу nagios
# service nagios restart
Nagios (Nagios Ain"t Gonna Insist On Sainthood) - программа с открытым кодом, предназначенная для мониторинга компьютерных систем и сетей. Она производит наблюдения, контроль состояния узлов и служб, оповещения администратора в том случае, если какие-то из служб прекращают (или возобновляют) свою работу.
В сегодняшней статье мы расскажем, как установить Nagios 4.1 на Ubuntu 15.04 .
Протестировать и посмотреть, что же из себя представляет Nagios и другие программы/сервисы/АТС вы можете перейдя в раздел .
Подготовка
Убедитесь, что на вашем сервере установлен полностью рабочий LAMP , если не установлен, то прежде чем продолжать, установите LAMP сервер. Установим следующие компоненты:
Sudo apt-get install build-essential libgd2-xpm-dev apache2-utils unzip
Создадим пользователя и группу Nagios
Создайте новую учетную запись пользователя nagios и группу nagcmd :
Sudo useradd -m nagios
sudo passwd nagios
sudo groupadd nagcmd
sudo usermod -a -G nagcmd nagios
sudo usermod -a -G nagcmd www-data
Скачиваем Nagios и плагины для него
На официальном сайте последняя версия значится как 4.1.0 release candidate 2 , ее и скачаем.
Cd /usr/src
sudo wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.1.0rc2.tar.gz
Скачиваем плагины
Sudo wget http://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz
Установка Nagios
Переходим в папку, куда мы скачали Nagios и плагины и разархивируем с помощью команды:
Sudo tar xzf nagios-4.1.0rc2.tar.gz
Cd nagios-4.1.0rc2/
Выполняем следующие команды для компиляции и установки Nagios :
Sudo ./configure --with-command-group=nagcmd
sudo make all
sudo make install
sudo make install-init
sudo make install-config
sudo make install-commandmode
Устанавливаем Web-интерфейс Nagios :
Sudo make install-webconf
Если в процессе установки вы получили следующую ошибку:
/usr/bin/install -c -m 644 sample-config/httpd.conf /etc/httpd/conf.d/nagios.conf
/usr/bin/install: cannot create regular file ‘/etc/httpd/conf.d/nagios.conf’: No such file or directory
Makefile:296: recipe for target "install-webconf" failed
make: *** Error 1
Nagios пытается создать файл nagios.conf внутри /etc/httpd.conf/directory , но в системах Ubuntu файлы nagios.conf должны быть помещены в /etc/apache2/sites-enabled/directory . Используем тогда другую команду вместо sudo make install-webconf
Sudo /usr/bin/install -c -m 644 sample-config/httpd.conf /etc/apache2/sites-enabled/nagios.conf
Создадим учетную запись Nagiosadmin для входа в Web-интерфейс Nagios . Обязательно запомните задаваемый вами пароль, он вам понадобится при входе в Web-интерфейс.
Sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
Перезапустим Apache, чтобы новые настройки вступили в силу:
Sudo systemctl restart apache2
Возвращаемся в папку, куда мы скачивали плагины и разархивируем плагины:
Cd /usr/src
tar xzf nagios-plugins-2.0.3.tar.gz
Переходим в разархивированный каталог:
Cd nagios-plugins-2.0.3/
Выполняем следующие команды для компиляции и установки плагинов:
Sudo ./configure --with-nagios-user=nagios --with-nagios-group=nagios
sudo make
sudo make install
Запускаем Nagios
Проверяем nagios.conf на наличие ошибок:
Sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
Если ошибок нет, запустим Nagios и добавим его в автозапуск:
Sudo service nagios start
sudo ln -s /etc/init.d/nagios /etc/rcS.d/S99nagios
Если при запуске Nagios вы увидели следующую ошибку:
Failed to start nagios.service: Unit nagios.service failed to load: No such file or directory.
[....] Starting nagios (via systemctl): nagios.serviceFailed to start nagios.service: Unit nagios.service failed to load: No such file or directory.failed!
Чтобы ее исправить нужно скопировать /etc/init.d/skeleton в /etc/init.d/nagios
Sudo cp /etc/init.d/skeleton /etc/init.d/nagios
Отредактируем /etc/init.d/nagios :
Sudo nano /etc/init.d/nagios
Добавив в самый конец следующее:
DESC="Nagios"
NAME=nagios
DAEMON=/usr/local/nagios/bin/$NAME
DAEMON_ARGS="-d /usr/local/nagios/etc/nagios.cfg"
PIDFILE=/usr/local/nagios/var/$NAME.lock
Сохраняем и выходим.
Финальный штрих - даем права на исполнение:
Sudo chmod +x /etc/init.d/nagios
и запускаем Nagios :
Sudo /etc/init.d/nagios start
Теперь в браузере вводим http://nagios-server-ip/nagios , в поле username вводим nagiosadmin и пароль, который мы задавали в процессе установки.
Нажмите на “Host” в левой панели консоли . Вы увидите, что на данный момент Nagios не мониторит ни одного хоста кроме самого себя.
На этом наша установка завершена. Пройдя по всей инструкции мы установили Nagios 4.1 на Ubuntu 15.04
Nagios - программа с открытым кодом, предназначенная для мониторинга компьютерных систем и сетей. Она следит за указанными узлами и службами, и оповещает администратора в том случае, если какие-то из служб прекращают (или возобновляют) свою работу. Так же при помощи nagios можно просматривать состояние хостов и сервисов через web-интерфейс. Сейчас самая свежая версия nagios3.
- Для работы nagios3 вам понадобится
- Apache
- GCC compiler and development libraries
- GD development libraries
Как ставит Apache я рассказывать не буду, библиотеки ставятся командами
sudo apt-get install build-essential sudo apt-get install libgd2-xpm-dev
Хотя у меня на работал Nagios3 и без этих библиотек. Я буду рассказывать про работу Nagios с Apache2
.
Установка Nagios3 производится одной командой.
sudo apt-get install nagios3
После установки nagios уже запущен и работает. Теперь создадим в Apache отдельный виртуальный хост для nagios . Создайте в каталоге /etc/apache2/sites-enabled конфигурационный файл для хоста nagios. В настройках хоста укажите в роли домашнего каталога /usr/share/nagios3/htdocs обычно все web-файлы nagios3 лежат там. Ещё надо подключить к настройкам apache настройки nagios. Добавьте в файл /etc/apache2/apache2.conf следующую строчку.
Include / etc/ nagios3/ apache2.conf
После этого зайдите на этот новый хост, если вы всё правильно сделали у вас браузер должен спросить пароль, который вы ещё не знаете, зато всё работает.
Теперь займёмся настройкой nagios
. Все конфигурационные файлы лежат в /etc/nagios3/
. Главный конфигурационный файл nagios.cfg
в нём подключаются все остальные конфигурационные файлы и задаются настройки самого nagios. Так что если Вы создали какой-то свой конфигурационный файл не забудьте подключить его в этом файле.
Дальше переходим к файлу cgi.cfg
, в нём выставляются все настройки cgi скриптов, так же в нём выставляются права на доступ
к сайту с графическим интерфейсом. По умолчанию полный доступ имеет пользователь nagiosadmin, если ходите разрешить что-то другим пользователям просто допишите их через запятую. Мой конфиг выглядит так.
default_user_name =myuser authorized_for_system_information =nagiosadmin,myuser authorized_for_configuration_information =nagiosadmin,myuser authorized_for_system_commands =nagiosadmin,myuser authorized_for_all_services =nagiosadmin,myuser authorized_for_all_hosts =nagiosadmin,myuser authorized_for_all_services =nagiosadmin,myuser authorized_for_all_hosts =nagiosadmin,myuser authorized_for_all_service_commands =nagiosadmin,myuser authorized_for_all_host_commands =nagiosadmin,myuser
Где myuser это мой логин. Теперь нужно создать файл с пользователями и паролем, для этого перейдите в каталог /etc/nagios3/ воспользуемся команду
cd / etc/ nagios3/ sudo htpasswd -c htpasswd.users myuser
и введите пароль для пользователя myuser
По умолчанию nagios ищет пользователей для аутентификации в файле /etc/nagios3/htpasswd.users
, но вы можете хранить из в другом месте, для этого поменяйте в файле /etc/nagios3/apache2.conf
параметр AuthUserFile
на свой.
Теперь чтобы изменения вступило в силу перезагрузите nagios
sudo / etc/ init.d/ nagios3 restart
Так же можно проверять весь конфиг nagios перед перезагрузкой
sudo nagios3 -v / etc/ nagios3/ nagios.cfg
Он проверит файл nagios.cfg и все файлы которые подключаются в нём и если найдёт ошибки напишет подробную информацию, я советую делать такую проверку после каждого изменения в конфигурационных файлах.
Всё теперь зайдите на свой виртуальных хост созданный для nagios и введите логин и пароль.
Вы увидите состояния своих сервисов, по умолчанию nagios проверяет работу localhost’а и gateway’а. Вы можете добавить свои хосты или сервисы для проверке, сейчас Мы рассмотрим как.
Допустим я хочу проверять когда мои коллеги включают и выключают компьютерны. Для этого сначала надо описать эти хосты. Создаём в каталоге /etc/nagios3/conf.d файл my-hosts.cfg и записываем в него мои хосты
# a host definition for my friends comps define host { host_name volodya #Имя хоста alias Volodya comp #описание address 192.168.140.3 #ip адрес use generic-host } define host { host_name lexa alias lexa comp address 192.168.140.4 use generic-host } define host { host_name xz1 alias xz1 comp address 192.168.140.5 use generic-host } define host { host_name xz2 alias xz2 comp address 192.168.140.8 use generic-host } define host { host_name diman alias diman comp address 192.168.140.10 use generic-host }
Так как этот файл находится в каталоге /etc/nagios3/conf.d
отдельно подключать его в файле
/etc/nagios3/nagios.cfg
не надо, поскольку в нём уже по умолчанию подключаются все файлы из Директории /etc/nagios3/conf.d
Объединим эти хосты в группу. Запишем в конфигурационный файл групп /etc/nagios3/conf.d/hostgroups_nagios2.cfg такой текст
#Defind my group define hostgroup { hostgroup_name my-friends #имя группы alias my-friends comps # описание members lexa, volodya, xz1,xz2, diman #члены группы }
Теперь надо настроить службу которая будет проверять эту группу хостов. Дописываем в файл /etc/nagios3/conf.d/services_nagios2.cfg или создаём свой файл с таким конфилом.
# check that my friends comps are up define service { hostgroup_name my-friends #имя группы для проверки service_description PING check_command check_ping! 100.0 ,20 %! 500.0 ,60 % #команда проверки use generic-service }
define contact{ contact_name pasha #имя alias pasha service_notification_period 24x7 #период уведомлений о сервисах host_notification_period 24x7 #период уведомлений о хостах service_notification_options w ,u,c,r #о чём уведомлять уведомлений host_notification_options d #уведомлять о том что хост down service_notification_commands notify-service-by-email #как уведомлять host_notification_commands notify-host-by-email #как уведомлять email f448dmg@ yandex.ru # mail }
Временные периоды задаются в файле /etc/nagios3/conf.d/contacts_nagios2.cfg там уже есть несколько уже заданных по умолчанию периода, по их аналогу Вы легко зададите свои.
Когда в системе что-то ломается или начинает вести себя необычным образом, пользователи дружно страдают. Следовательно, в этом случае нужно как можно скорее уведомить кого-нибудь о поломке. А еще лучше было бы предвидеть возникновение проблем заранее . В данной заметке будет описана установка и настройка Nagios, который позволяет вполне успешно решить такие задачи.
Инварианты
В большинстве систем есть ряд инвариантов, которые никогда не должны нарушаться. Вот некоторые примеры возможных нарушений:
- Load average на одной из машин стал больше X;
- Свободной памяти на одной из машин осталось меньше X;
- Свободного места на диске у одной из машин осталось меньше X;
- Слишком много открытых файловых дескрипторов на машине X;
- Сильно греется проц, скоро развалится диск , малый заряд UPS;
- Высокий сетевой трафик, disk io, кончается своп, ну и так далее;
- Один из хостов не пингуется или пингуется со слишком большим RTT;
- Что-то перестало резолвиться по DNS;
- Доступны более новые версии установленных пакетов;
- На одну из машин залогинилось подозрительно много юзеров;
- Есть критические ошибки в логах за последние X минут;
- Число некритичных ошибок за последние X минут превысило Y;
- Лежит или медленно отвечает PostgreSQL , Redis , RabbitMQ , …;
- SSL-сертификат скоро истекает;
- 99-ый процентиль времени ответа сервиса сильно больше обычного;
- Не ходит почта, SMS, пуши, …;
- Нужно пополнить баланс в стороннем сервисе (AWS , Logentries , …);
- Подозрительно большие расходы в стороннем сервисе;
- В тестовом окружении не удалось восстановиться из бэкапа с прода;
- Сервис стал недоступен из Зеленограда и ЮАР;
- По внутренним хелсчекам сервиса мы уперлись в один из трэдпулов;
Как видите, практически в любом сервисе можно без труда найти два десятка инвариантов, а то и больше, которые никогда не должны нарушаться, и которые довольно легко мониторить автоматически. Если что-то сломалось, начинаем рассылать письма админам, SMS начальству, звонить на телефоны кодерам.
Установка Nagios
Кстати, благодаря знакомству с Nagios, я стал намного лучше понимать людей, выступающих за ручное шардирование и ручной фейловер. Но это, пожалуй, тема для отдельной заметки.
А чем вы мониторите вашу систему?