GithubHelp home page GithubHelp logo

ksu_monitoring's Introduction

ksu_monitoring

Система відстеження працездатності сервісів та інформування адміністраторів у разі їхнього виходу з ладу

Необхідні додаткові бібліотеки Python:

  • pyaml
  • dnspython
  • cgi
  • html
  • sys
  • codecs
  • platform
  • subprocess
  • socket
  • smtplib

Компоненти системи:

  1. Конфігурація - файл 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

  1. Система моніторингу сервісів

Система моніторингу складається з функцій контролю окремих сервісів і модулю 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) - запис повідомлень системи у файл

  1. Вебдодаток

Модулі, що використовуються для вебдодатку:

  • 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)

  1. Telegram-бот

Для роботи Telegram-боту потрібно зареєструвати бота в системі Telegram з допомогою @BotFather та отримати token_id. Цей token_id потрібно прописати в модулі telegrambot.py

Команди, які підтримує бот:

  • /greeting - просить бота привітатися

  • /check "domain" - через цю команду бот передає результати останньої перевірки вказаного домену

ksu_monitoring's People

Contributors

seraphimua avatar

Stargazers

Denis Senchishen avatar

Watchers

 avatar

Forkers

sen-den

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.