суббота, 14 ноября 2020 г.

Простой ICMP мониторинг на Python c сохранением данных в БД для Grafana.


Появилась задача помониторить внешние ресурсы на доступность простым ICMP опросом. Но данное решение как вы понимаете подойдет и для решения мониторинга узлов внутренней сети, короче говоря всего, что вы можете попинговать :) 

У меня уже была поднята Grafana и influxdb - эта база данных идеально подходит для сбора и хранения подобных данных. Основным назначением является хранение больших объемов данных с метками времени.

И нам осталось только написать скрипт который будет опрашивать данные, и записывать их в БД. А настройки графаны для вывода графиков буду интуитивно понятны.


Для поддержания скрипта в постоянно рабочем состоянии я использую демон  supervisorctl, но если уверены в стабильности вашей системы можно просто в screen запускать, тут уж на ваш вкус.

Сам скрипт таков:

from ping3 import ping, verbose_ping
from influxdb import InfluxDBClient
import datetime                                                                                                                                                                                                                                 

host='localhost'
port=8086 
user='ping'                                                                                                            
password='ping'
dbname='pingdb'
client = InfluxDBClient(host, port, user, password, dbname)
  servers = ['yandex.ru''vk.com''yota.ru''instagram.com''ok.ru']

def pingserver(server):
    try:
        return ping(server)*1000
    except:
        return 0.0


while True:

    now = datetime.datetime.now()

    for server in servers:
        pingdata = [{
            "measurement""obit",
            "tags": {
                "host": server,
            },
            "time": now.strftime("%Y-%m-%d %H:%M:%S"),
            "fields": {
            "ping": pingserver(server)
            }
        }]
        print(pingdata)
        client.write_points(pingdata)


Комментариев нет:

Отправить комментарий