Как настроить оповещения Nagios на выделенном сервере?

Nagios – это мощная система мониторинга, которая позволяет отслеживать состояние серверов, сервисов и сетевого оборудования. Однако, чтобы Nagios был действительно полезен, необходимо правильно настроить систему оповещений. Эта статья предоставит подробное руководство по настройке оповещений Nagios на выделенном сервере, чтобы вы могли оперативно реагировать на любые проблемы и минимизировать время простоя. Мы рассмотрим различные способы настройки оповещений, включая использование электронной почты и SMS, а также интеграцию с другими системами.

Содержание:

Настройка оповещений по электронной почте

Настройка оповещений по электронной почте – один из самых распространенных и простых способов получения уведомлений от Nagios. Этот метод позволяет получать подробные отчеты о состоянии ваших серверов и сервисов прямо на электронную почту. В этом разделе мы подробно рассмотрим, как настроить отправку email-оповещений из Nagios, какие параметры необходимо учитывать и какие распространенные проблемы могут возникнуть.

Настройка параметров электронной почты в Nagios

Первым шагом является настройка параметров электронной почты в конфигурационных файлах Nagios. Основные параметры, которые необходимо указать, включают SMTP-сервер, порт, учетные данные (если требуется) и адрес отправителя. Эти параметры обычно указываются в файле /etc/nagios/nagios.cfg. Откройте этот файл с помощью текстового редактора и найдите раздел, посвященный настройке электронной почты.

# grep email /etc/nagios/nagios.cfg
service_notification_options  w,u,c,r,f,s
host_notification_options   d,u,r,f,s
email_notification_options  w,u,c,r,f,s

Убедитесь, что указанные выше параметры включены. Они определяют, при каких событиях отправлять уведомления (например, при предупреждении (w), критической ошибке (c), восстановлении (r)).

Далее, необходимо настроить команду для отправки email. Обычно используется команда notify-service-by-email и notify-host-by-email, определенные в файле /etc/nagios/commands.cfg.

# grep notify-service-by-email /etc/nagios/commands.cfg
define command {
        command_name    notify-service-by-email
        command_line    /usr/bin/printf "%b" "*** Nagios *\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTNAME$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail -s " $NOTIFICATIONTYPE$ Service Alert: $HOSTNAME$/$SERVICEDESC$ is $SERVICESTATE$ " $CONTACTEMAIL$
        }

# grep notify-host-by-email /etc/nagios/commands.cfg
define command {
        command_name    notify-host-by-email
        command_line    /usr/bin/printf "%b" "* Nagios *\n\nNotification Type: $NOTIFICATIONTYPE$\n\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$HOSTOUTPUT$\n" | /usr/bin/mail -s " $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
        }

Важно: Убедитесь, что у вас установлен пакет mail или аналогичный, необходимый для отправки почты из командной строки. Например, в Debian/Ubuntu: sudo apt-get install mailutils. В CentOS/RHEL: sudo yum install mailx.

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

После настройки параметров электронной почты необходимо определить контакты, которые будут получать оповещения. Это делается в файле /etc/nagios/conf.d/contacts.cfg (или в отдельном файле, указанном в nagios.cfg). Необходимо создать определение контакта, указав его имя, адрес электронной почты и другие параметры.

define contact {
        contact_name                    nagiosadmin
        alias                           Nagios Admin
        email                           nagios@example.com
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r,f,s
        host_notification_options     d,u,r,f,s
        service_notification_commands   notify-service-by-email
        host_notification_commands      notify-host-by-email
        }

В этом примере мы создали контакт с именем nagiosadmin, указали адрес электронной почты nagios@example.com, определили период получения уведомлений (24×7) и указали команды, которые будут использоваться для отправки уведомлений по электронной почте.

Совет эксперта: Для предотвращения переполнения почтового ящика, рассмотрите возможность использования фильтров в вашей почтовой программе для автоматической сортировки уведомлений Nagios.

Привязка контактов к хостам и сервисам

Последним шагом является привязка созданных контактов к хостам и сервисам, для которых вы хотите получать оповещения. Это делается в определениях хостов и сервисов в файлах /etc/nagios/conf.d/hosts.cfg и /etc/nagios/conf.d/services.cfg (или в соответствующих файлах, указанных в nagios.cfg).

define host {
        use                     linux-server
        host_name               webserver1
        alias                   Web Server 1
        address                 192.168.1.100
        contacts                nagiosadmin
        }

define service {
        use                     generic-service
        host_name               webserver1
        service_description     HTTP
        check_command           check_http
        contacts                nagiosadmin
        }

В этих примерах мы привязали контакт nagiosadmin к хосту webserver1 и сервису HTTP. Теперь, когда состояние webserver1 или HTTP изменится, nagiosadmin получит уведомление по электронной почте.

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

sudo systemctl restart nagios

Пример: Предположим, вы хотите настроить оповещения для дискового пространства на сервере fileserver. Вам необходимо добавить сервис в файл /etc/nagios/conf.d/services.cfg:

define service {
        use                     generic-service
        host_name               fileserver
        service_description     Disk Space
        check_command           check_disk!20%!10%
        contacts                nagiosadmin
        }

В этом примере мы используем команду check_disk для мониторинга дискового пространства. Параметры 20%!10% указывают на уровни предупреждения и критической ошибки (20% и 10% свободного места соответственно). После добавления этого сервиса и перезапуска Nagios, вы будете получать уведомления по электронной почте, когда дисковое пространство на fileserver будет приближаться к этим уровням.

Важно: Всегда проверяйте синтаксис конфигурационных файлов Nagios перед перезапуском службы. Это можно сделать с помощью команды nagios -v /etc/nagios/nagios.cfg. Эта команда проверит конфигурационные файлы на наличие ошибок и выдаст соответствующие сообщения.

Настройка оповещений по SMS

Оповещения по SMS – это эффективный способ получения уведомлений о критических проблемах, особенно когда нет доступа к электронной почте. Настройка SMS-оповещений требует интеграции с внешним сервисом SMS-шлюза. В этом разделе мы рассмотрим различные способы настройки SMS-оповещений, включая использование бесплатных и платных сервисов, а также настройку команд и контактов в Nagios.

Выбор SMS-шлюза

Первым шагом является выбор подходящего SMS-шлюза. Существует множество сервисов, предлагающих услуги SMS-шлюза, как платных, так и бесплатных. Платные сервисы обычно предлагают более высокую надежность и скорость доставки сообщений, а также более широкие возможности настройки. Бесплатные сервисы могут иметь ограничения по количеству отправляемых сообщений или задержки в доставке.

Некоторые популярные SMS-шлюзы:

  • Twilio
  • Nexmo (Vonage)
  • Clickatell
  • TextMagic

Для целей тестирования можно использовать бесплатные SMS-шлюзы, но для производственных систем рекомендуется использовать платные сервисы.

Настройка команды для отправки SMS

После выбора SMS-шлюза необходимо настроить команду в Nagios для отправки SMS-сообщений. Эта команда будет использовать API выбранного SMS-шлюза для отправки сообщений. Необходимо создать новую команду в файле /etc/nagios/commands.cfg.

Пример: Настройка команды для отправки SMS через Twilio:

define command {
        command_name    notify-service-by-sms
        command_line    /usr/bin/curl -X POST 'https://api.twilio.com/2010-04-01/Accounts/ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Messages.json' \
        --data-urlencode 'To=$CONTACTPAGER$' \
        --data-urlencode 'From=+1234567890' \
        --data-urlencode 'Body=Nagios: $NOTIFICATIONTYPE$ - $HOSTNAME$ - $SERVICEDESC$ is $SERVICESTATE$' \
        -u ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:your_auth_token
        }

define command {
        command_name    notify-host-by-sms
        command_line    /usr/bin/curl -X POST 'https://api.twilio.com/2010-04-01/Accounts/ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Messages.json' \
        --data-urlencode 'To=$CONTACTPAGER$' \
        --data-urlencode 'From=+1234567890' \
        --data-urlencode 'Body=Nagios: $NOTIFICATIONTYPE$ - $HOSTNAME$ is $HOSTSTATE$' \
        -u ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:your_auth_token
        }

В этом примере замените ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx на ваш Account SID от Twilio, +1234567890 на ваш номер телефона Twilio, а your_auth_token на ваш Auth Token от Twilio. Также убедитесь, что у вас установлен пакет curl.

Важно: Храните ваши учетные данные API в безопасном месте и не публикуйте их в открытом доступе.

Настройка контактов для получения SMS-оповещений

Теперь необходимо настроить контакты, которые будут получать SMS-оповещения. Это делается в файле /etc/nagios/conf.d/contacts.cfg. Необходимо указать номер телефона контакта в параметре pager.

define contact {
        contact_name                    admin_sms
        alias                           Admin SMS
        pager                           +79991234567
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r,f,s
        host_notification_options     d,u,r,f,s
        service_notification_commands   notify-service-by-sms
        host_notification_commands      notify-host-by-sms
        }

В этом примере мы создали контакт с именем admin_sms и указали номер телефона +79991234567. Обратите внимание, что номер телефона должен быть указан в международном формате.

Пример: Если вы используете Nexmo, команда для отправки SMS будет выглядеть следующим образом:

define command {
        command_name    notify-service-by-sms
        command_line    /usr/bin/curl -d "api_key=YOUR_API_KEY&api_secret=YOUR_API_SECRET&to=$CONTACTPAGER$&from=Nagios&text=Nagios: $NOTIFICATIONTYPE$ - $HOSTNAME$ - $SERVICEDESC$ is $SERVICESTATE$" 'https://rest.nexmo.com/sms/json'
        }

define command {
        command_name    notify-host-by-sms
        command_line    /usr/bin/curl -d "api_key=YOUR_API_KEY&api_secret=YOUR_API_SECRET&to=$CONTACTPAGER$&from=Nagios&text=Nagios: $NOTIFICATIONTYPE$ - $HOSTNAME$ is $HOSTSTATE$" 'https://rest.nexmo.com/sms/json'
        }

Замените YOUR_API_KEY и YOUR_API_SECRET на ваши учетные данные от Nexmo.

Совет эксперта: Используйте лимиты отправки SMS, предоставляемые вашим SMS-шлюзом, чтобы избежать неожиданных расходов.

Привязка контактов к хостам и сервисам

Как и в случае с оповещениями по электронной почте, необходимо привязать контакты к хостам и сервисам, для которых вы хотите получать SMS-оповещения. Это делается в определениях хостов и сервисов в файлах /etc/nagios/conf.d/hosts.cfg и /etc/nagios/conf.d/services.cfg.

define host {
        use                     linux-server
        host_name               dbserver
        alias                   Database Server
        address                 192.168.1.101
        contacts                admin_sms
        }

define service {
        use                     generic-service
        host_name               dbserver
        service_description     Database Connection
        check_command           check_tcp!3306
        contacts                admin_sms
        }

После внесения изменений в конфигурационные файлы Nagios необходимо перезапустить службу Nagios:

sudo systemctl restart nagios

Важно: Протестируйте отправку SMS-оповещений, чтобы убедиться, что они работают правильно. Вы можете вызвать ошибку вручную, чтобы сгенерировать оповещение.

Интеграция с Slack и Telegram

Интеграция Nagios с платформами обмена сообщениями, такими как Slack и Telegram, позволяет получать уведомления о проблемах в режиме реального времени непосредственно в ваши каналы связи. Это может значительно ускорить процесс реагирования на инциденты. В этом разделе мы рассмотрим, как настроить интеграцию Nagios с Slack и Telegram, чтобы получать уведомления о состоянии ваших серверов и сервисов.

Интеграция со Slack

Для интеграции Nagios со Slack необходимо создать Slack App и настроить входящий webhook. Webhook – это URL, на который Nagios будет отправлять уведомления в формате JSON.

Шаги по настройке интеграции со Slack:

  • Создайте Slack App в вашем Slack workspace.
  • Активируйте Incoming Webhooks в настройках вашего Slack App.
  • Получите URL webhook.
  • Настройте команду в Nagios для отправки уведомлений на webhook.

Пример: Настройка команды в /etc/nagios/commands.cfg для отправки уведомлений в Slack:

define command {
        command_name    notify-service-by-slack
        command_line    /usr/bin/curl -X POST --data-urlencode "payload={\"channel\": \"#nagios-alerts\", \"username\": \"Nagios\", \"text\": \"*$NOTIFICATIONTYPE* Service Alert: $HOSTNAME$/$SERVICEDESC$ is $SERVICESTATE$ - $SERVICEOUTPUT$\", \"icon_emoji\": \":warning:\"}" YOUR_SLACK_WEBHOOK_URL
        }

define command {
        command_name    notify-host-by-slack
        command_line    /usr/bin/curl -X POST --data-urlencode "payload={\"channel\": \"#nagios-alerts\", \"username\": \"Nagios\", \"text\": \"*$NOTIFICATIONTYPE* Host Alert: $HOSTNAME$ is $HOSTSTATE$ - $HOSTOUTPUT$\", \"icon_emoji\": \":warning:\"}" YOUR_SLACK_WEBHOOK_URL
        }

Замените YOUR_SLACK_WEBHOOK_URL на URL webhook, полученный при настройке Slack App. Параметр channel определяет канал, в который будут отправляться уведомления. Параметр icon_emoji определяет эмодзи, который будет отображаться рядом с уведомлением.

Далее, настройте контакты в /etc/nagios/conf.d/contacts.cfg, указав команды для отправки уведомлений в Slack:

define contact {
        contact_name                    admin_slack
        alias                           Admin Slack
        email                           ignore@example.com
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r,f,s
        host_notification_options     d,u,r,f,s
        service_notification_commands   notify-service-by-slack
        host_notification_commands      notify-host-by-slack
        }

Наконец, привяжите контакт admin_slack к хостам и сервисам, для которых вы хотите получать уведомления в Slack.

Важно: Slack требует, чтобы URL webhook был защищен протоколом HTTPS. Убедитесь, что ваш сервер настроен для использования HTTPS.

Интеграция с Telegram

Для интеграции Nagios с Telegram необходимо создать Telegram Bot и получить его API Token и Chat ID. API Token – это уникальный идентификатор вашего бота, а Chat ID – это идентификатор чата, в который будут отправляться уведомления.

Шаги по настройке интеграции с Telegram:

  • Создайте Telegram Bot, используя BotFather в Telegram.
  • Получите API Token вашего бота.
  • Получите Chat ID чата, в который вы хотите отправлять уведомления.
  • Настройте команду в Nagios для отправки уведомлений через API Telegram.

Пример: Настройка команды в /etc/nagios/commands.cfg для отправки уведомлений в Telegram:

define command {
        command_name    notify-service-by-telegram
        command_line    /usr/bin/curl -s -X POST "https://api.telegram.org/botYOUR_TELEGRAM_BOT_TOKEN/sendMessage" -d "chat_id=YOUR_TELEGRAM_CHAT_ID&text=*$NOTIFICATIONTYPE*%20Service%20Alert:%20$HOSTNAME$/$SERVICEDESC$%20is%20$SERVICESTATE$%20-%20$SERVICEOUTPUT$"
        }

define command {
        command_name    notify-host-by-telegram
        command_line    /usr/bin/curl -s -X POST "https://api.telegram.org/botYOUR_TELEGRAM_BOT_TOKEN/sendMessage" -d "chat_id=YOUR_TELEGRAM_CHAT_ID&text=*$NOTIFICATIONTYPE*%20Host%20Alert:%20$HOSTNAME$%20is%20$HOSTSTATE$%20-%20$HOSTOUTPUT$"
        }

Замените YOUR_TELEGRAM_BOT_TOKEN на API Token вашего бота, а YOUR_TELEGRAM_CHAT_ID на Chat ID чата. Символы %20 используются для кодирования пробелов в URL.

Далее, настройте контакты в /etc/nagios/conf.d/contacts.cfg, указав команды для отправки уведомлений в Telegram:

define contact {
        contact_name                    admin_telegram
        alias                           Admin Telegram
        email                           ignore@example.com
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r,f,s
        host_notification_options     d,u,r,f,s
        service_notification_commands   notify-service-by-telegram
        host_notification_commands      notify-host-by-telegram
        }

Наконец, привяжите контакт admin_telegram к хостам и сервисам, для которых вы хотите получать уведомления в Telegram.

Пример: Если вы хотите отправлять уведомления в Telegram в формате Markdown, используйте параметр parse_mode=Markdown в запросе:

define command {
        command_name    notify-service-by-telegram
        command_line    /usr/bin/curl -s -X POST "https://api.telegram.org/botYOUR_TELEGRAM_BOT_TOKEN/sendMessage" -d "chat_id=YOUR_TELEGRAM_CHAT_ID&text=*$NOTIFICATIONTYPE*%20Service%20Alert:%20$HOSTNAME$/$SERVICEDESC$%20is%20$SERVICESTATE$%20-%20$SERVICEOUTPUT$&parse_mode=Markdown"
        }

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

Сравнение способов оповещения:

Способ оповещенияПреимуществаНедостатки
EmailДетальная информация, простота настройкиЗадержка в доставке, может быть пропущено
SMSБыстрая доставка, надежностьОграниченный размер сообщения, стоимость
Slack/TelegramМгновенные уведомления, совместная работаТребуется подключение к интернету, может быть отвлечением

Настройка эскалации оповещений

Эскалация оповещений – это механизм, позволяющий отправлять уведомления разным группам людей в зависимости от серьезности проблемы и времени, прошедшего с момента ее обнаружения. Это обеспечивает, что критические проблемы не будут проигнорированы и будут решены в кратчайшие сроки. В этом разделе мы рассмотрим, как настроить эскалацию оповещений в Nagios, чтобы уведомления отправлялись разным контактам или группам контактов в зависимости от различных условий.

Определение периодов оповещений

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

Периоды оповещений определяются в файле /etc/nagios/conf.d/timeperiods.cfg (или в отдельном файле, указанном в nagios.cfg).

define timeperiod {
        timeperiod_name     24x7
        alias               24 Hours A Day, 7 Days A Week
        use                 generic-timeperiod
        start_time          00:00
        end_time            24:00
        }

define timeperiod {
        timeperiod_name     workhours
        alias               Work Hours
        use                 generic-timeperiod
        monday              09:00-18:00
        tuesday             09:00-18:00
        wednesday           09:00-18:00
        thursday            09:00-18:00
        friday              09:00-18:00
        }

В этом примере мы определили два периода оповещений: 24x7 (круглосуточно) и workhours (рабочее время с понедельника по пятницу).

Определение групп контактов

Следующим шагом является определение групп контактов. Группы контактов позволяют объединять несколько контактов в одну группу, чтобы упростить управление оповещениями. Это полезно, когда необходимо отправить уведомления нескольким людям одновременно.

Группы контактов определяются в файле /etc/nagios/conf.d/contacts.cfg.

define contactgroup {
        contactgroup_name   admins
        alias               Nagios Administrators
        members             nagiosadmin, admin_sms, admin_telegram
        }

define contactgroup {
        contactgroup_name   developers
        alias               Developers Team
        members             developer1, developer2
        }

В этом примере мы определили две группы контактов: admins (администраторы) и developers (разработчики). Группа admins включает контакты nagiosadmin, admin_sms и admin_telegram, а группа developers включает контакты developer1 и developer2.

Настройка эскалации для хостов и сервисов

Теперь необходимо настроить эскалацию для хостов и сервисов. Это делается в определениях хостов и сервисов в файлах /etc/nagios/conf.d/hosts.cfg и /etc/nagios/conf.d/services.cfg. Для настройки эскалации используются параметры notification_interval, first_notification_delay, notification_period и contacts/contact_groups.

Пример: Настройка эскалации для хоста:

define host {
        use                     linux-server
        host_name               important_server
        alias                   Important