nettips.ru

Простой скрипт syslog сервера на Python

На главную Cisco Systems Arduino VoIP Android Умный сетевой хаос дом маршрутизатор Беларусь Asterisk коммутатор Nateks Alcatel MTS Velcom Python Gigaset ZTE Grandstream Huawei админы шутят о сайте Zelax Allied Telesis D-Link Штрихкоды HP
Телефонные номера доступа sip операторов VitebskPets - инфопомощь животным в Витебске Телефонные коды городов и стран мира.

Рейтинг статьи: 4.500/5 Рейтинг 4.50 из 5Рейтинг 4.50 из 5Рейтинг 4.50 из 5Рейтинг 4.50 из 5Рейтинг 4.50 из 5 (2 голосов).

Скрипт на Python syslog сервера с разделением файлов протоколов по дате.

Спонсор этой страницы:

Описание скрипта

Скрипт прослушивает 514 UDP порт, принимает log сообщения от сетевого оборудования и сохраняет структурировано в папках год/месяц

Скрипт простого сервера


HOST, PORT = "0.0.0.0", 514
mpath = 'datelog'

import os
import socketserver
from datetime import datetime, date, time

def log_path_file(): 
    today = datetime.now()
    path=mpath+"\\"+today.strftime("%Y\\%m\\")
    if not os.path.exists(path):
        os.makedirs(path)
        print("create  "+path)
    path+=today.strftime("%d-%m-%Y.log")
    return path

class SyslogUDPHandler(socketserver.BaseRequestHandler):

    def handle(self):
        data = bytes.decode(self.request[0].strip())
        syslog_mass=str(data).split(':')
        err_level_0=syslog_mass[0]
        err_level=int(err_level_0[err_level_0.find("<")+1:err_level_0.find(">")]) & 7
        syslog_str=str(self.client_address[0])+"    "
        syslog_str1=str(data)[str(data).find(":"):]
        config_file_name = log_path_file()
        config_file = open(config_file_name, 'a')
        write_msg=syslog_str+": "+str(err_level)+syslog_str1
        config_file.write(write_msg+"\n")
        config_file.close()
        print(write_msg)
 
if __name__ == "__main__":
    try:
        server = socketserver.UDPServer((HOST,PORT), SyslogUDPHandler)
        server.serve_forever(poll_interval=0.5)
    except (IOError, SystemExit):
        raise
    except KeyboardInterrupt:
        print ("Crtl+C Pressed. Shutting down.")

Доработка скрипта, добавление фильтров

архив со скриптом syslog_python.zip

Содержание архива

syslog.py - скрипт syslog

filter.ini - Пример фильтров

Описание доработок

Кроме того, что все проходящие сообщения складываются в один файл, они дополнительно дублируются в другие файлы по фильтрам:

Фильры:

  • Адрес устройства принадлежит сети
  • Текст сообщения содержит слово (например имя администратора)
  • сообщение определенного уровня

В фильтре можно указывать (конструировать) имя папки и файла включая туда текущие дату, время, IP адрес и уровень сообщения

Пример filter.ini


# 1 type (ip/msg/level)
# 2 Network, substring msg or level msg
# 3 Folder %Y\%m 2023\08
# 4 FileName (optional) %d-%m-%Y.log - 30-08-2023.log , %IP.log - 10.206.244.2.log %L - LeveName %l - Level
! Branch1
ip 192.168.222.0/24 %Y\%m\Moscow
ip 192.168.249.0/24 %Y\%m\SPB
! Other
msg admin %Y\%m\Admin\admin %IP.log
level 0 %Y\%m\level\%l_%L %IP_%d-%m-%Y.log
level 1 %Y\%m\level\%l_%L %IP_%d-%m-%Y.log
level 2 %Y\%m\level\%l_%L %IP_%d-%m-%Y.log

Полезные ссылки

Скачать Python можно на сайте www.python.org

Полезной будет книга Python для сетевых инженеров


Буду рад полезным идеям.

Программирование Python Сетевые инструменты

Пожалуйста, оцените и ВЫ эту статью:

Комментариев нет. Станьте первым!


Ваши отзывы и предложения по работе сайта направляйте на форму обратной связи.

Яндекс.Метрика