Як налаштувати сповіщення Nagios на виділеному сервері?
Nagios – це потужна система моніторингу, яка дозволяє відстежувати стан серверів, сервісів та мережевого обладнання. Однак, щоб Nagios був дійсно корисним, необхідно правильно налаштувати систему сповіщень. Ця стаття надасть докладний посібник з налаштування сповіщень Nagios на виділеному сервері, щоб ви могли оперативно реагувати на будь-які проблеми та мінімізувати час простою. Ми розглянемо різні способи налаштування сповіщень, включаючи використання електронної пошти та SMS, а також інтеграцію з іншими системами.
Зміст:
- Налаштування сповіщень електронною поштою
- Налаштування сповіщень за допомогою SMS
- Інтеграція зі Slack та Telegram
- Налаштування ескалації сповіщень
Налаштування сповіщень електронною поштою
Налаштування сповіщень електронною поштою – один із найпоширеніших і найпростіших способів отримання повідомлень від 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 [email protected]
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, вказали адресу електронної пошти [email protected], визначили період отримання повідомлень (24x7) і вказали команди, які будуть використовуватися для надсилання повідомлень електронною поштою.
Порада експерта: Для запобігання переповненню поштової скриньки, розгляньте можливість використання фільтрів у вашій поштовій програмі для автоматичного сортування сповіщень 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-сповіщень, щоб переконатися, що вони працюють правильно. Ви можете викликати помилку вручну, щоб згенерувати сповіщення.
Потрібен надійний хостинг для Nagios?
Налаштуйте Nagios без проблем на наших VPS. Ідеально для моніторингу вашого сервера. — from €4.49/mo.
Вибрати VPS →Шукаєте сервер, який просто працює?
Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.
Інтеграція з 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 [email protected]
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 [email protected]
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"
}
Порада експерта: Використовуйте різні канали або чати для різних типів повідомлень, щоб полегшити фільтрацію і пріоритизацію.
Порівняння способів оповіщення:
| Спосіб оповіщення | Переваги | Недоліки |
|---|---|---|
| Детальна інформація, простота налаштування | Затримка в доставці, може бути пропущено | |
| 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
Готові до повного контролю над Nagios?
Отримайте максимальну продуктивність та безпеку для Nagios з нашими виділеними серверами. Повне налаштування під ваші потреби.
Вибрати сервер →