Система відстеження працездатності сервісів та інформування адміністраторів у разі їхнього виходу з ладу
Необхідні додаткові бібліотеки Python:
- pyaml
- dnspython
- cgi
- html
- sys
- codecs
- platform
- subprocess
- socket
- smtplib
Компоненти системи:
- Конфігурація - файл config.yaml
Параметри:
dns:
resolvers: # ip-адреси DNS-резолверів
- 8.8.8.8
ipv6: false # якщо true, перевірка IPv6-адрес
send_alert: true # відсилати повідомлення при зміні статусів сервісів
debug: true # налагоджувальний друк
smtp:
smtp_server: <> # адреса SMTP-серверу
smtp_user: <> # адреса (логін) для SMTP-авторизації
smtp_password: <> # пароль
mail_from: <> # адреса, від якої відсилаються повідомлення
mail_to: # список email-адрес, на які відсилаються повідомлення
- <MAIL_TO1>
- <MAIL_TO2>
timeouts: # таймаути для DNS-резолвера та HTTP-запитів
dns: 2
http: 10
hosts: # список хостів для моніторингу
kspu.edu:
- check_dns # отримання DNS-записів
- check_ping # контроль доступності хосту через команду ping
- check_http # контроль доступності вебсервісу за протоколом HTTP
- check_https # контроль доступності вебсервісу за протоколом HTTPS
- chart_data_http # збирання даних для побудови графіку
Модуль для роботи з конфігурацією - monitoring/config_loader.py
- Система моніторингу сервісів
Система моніторингу складається з функцій контролю окремих сервісів і модулю test_hosts.py.
Модуль test_hosts.py проводить контроль усіх хостів, що вказані в конфігурації.
Модуль повинен запускатися за планом, наприклад, кожні 5-10 хвилин.
Результати перевірок записуються в каталог results у вигляді файлів .json у форматі JSON-структур.
Приклад:
{
"domain": "kspu.edu",
"timestamp": "[2021-05-05 19:10:08]",
"results": {
"dns": { "status": "ok",
"A": [ "193.109.129.2" ],
"NS": [ "mail.kspu.kherson.ua.", "proxy.kspu.kherson.ua." ],
"MX": [ "10 mail.ksu.ks.ua.", "20 proxy.kspu.kherson.ua." ]
},
"ping": { "status": "ok" },
"http": { "status": "ok", "url": "http://www.kspu.edu/",
"status_code": 200, "latency": 3847 }
}
}
Крім того, якщо для хосту вказано перевірку "chart_data_http", для такого хосту створюється файл у каталозі charts_data, що містить дані останніх перевірок (за останню добу) у JavaScript-форматі, які потім будуть використані при побудові графіків.
Функції перевірки:
-
модуль dns_utils.py:
-
функція get_resolver(config) - встановлення резолвера з файлу конфігурації
-
функція get_record(domain, rtype, my_resolver=None) - отримання DNS-запису домену вказаного типу
-
функція get_ip_addresses(domain, my_resolver=None, check_ipv6=True) - отримання масиву IP-адрес хосту
-
функція check_dns(domain, my_resolver=None) - перевірка резолвінгу домену та отримання DNS-записів типу A, AAAA, NS, MX
-
-
модуль net_utils.py:
-
функція check_ping(ip_addr) - контроль доступності хосту з допомогою команди ping
-
функція check_http(config, domain, port) - контроль доступності вебсервісів за протоколами HTTP (port=80) та HTTPS (port=443)
-
-
модуль check_utils.py:
-
функція check_domain(domain) - перевірка коректності доменного імені
-
функція check_ip(ip_addr) - перевірка коректності IP-адреси
-
функція check_result_status(domain, result) - контроль статусів перевірок сервісів, відправлення повідомлень у разі зміни статусу сервісу
-
-
модуль smtp_utils.py:
- функція send_alert(p_subject, p_msg) - відправлення повідомлення за протоколом SMTP-авторизації
-
модуль config_loader.py:
-
встановлення параметрів конфігурації за замовчуванням
-
функція load_config(filename) - завантаження файлу конфігурації
-
функція merge_dicts(source, destination) - додавання параметрів конфігурації за замовчуванням
-
функція write_log(strn, filename) - запис повідомлень системи у файл
-
- Вебдодаток
Модулі, що використовуються для вебдодатку:
-
cgi-bin/form_monitoring.py - отримує з HTML-форми index.html параметри:
- p_host - доменне ім'я,
- p_check_dns - ознака контролю DNS,
- p_check_ping - ознака контролю доступності хосту,
- p_check_http - ознака контролю доступності вебсервісів за протоколом HTTP,
- p_check_https - ознака контролю доступності вебсервісів за протоколом HTTPS.
Модуль проводить перевірку всіх указаних сервісів для будь-якого домену.
-
cgi-bin/result.py - виводить інформацію про загальний статус усіх сервісів для хостів, зібраних системою моніторингу, а також виводиться графік доступності вебсервісів.
-
cgi-bin/charts.py - виведення окремого графіку (ім'я хосту передається параметром p_host)
- Telegram-бот
Для роботи Telegram-боту потрібно зареєструвати бота в системі Telegram з допомогою @BotFather та отримати token_id. Цей token_id потрібно прописати в модулі telegrambot.py
Команди, які підтримує бот:
-
/greeting - просить бота привітатися
-
/check "domain" - через цю команду бот передає результати останньої перевірки вказаного домену