Python을 이용해서 Switch 장비 모니터링을 위한 Syslog Analyzer로 만들어보겠습니다.

Python을 사용할 줄 몰라도 파일 그대로 가져가서 사용하시면 되니 문제는 없을 것입니다.

 

Syslog Analyzer 모니터링 서버 IP를 999.888.777.666 이라고 가정,

/var/www/html/loganalyzer 에 loganalyzer가 세팅되어있다고 가정하여 설명합니다.

 

 

로그 데이터를 수집 서버로 보내는 방법

즉, rsyslog conf 설정 파일에 입력되는 항목에 대한 정보는 아래에서 확인할 수 있습니다.

https://growingsaja.tistory.com/133

 

 

python을 통해 loganalyzer의 DB 데이터 내에서 127.0.0.1 IP 데이터를 삭제한다. 즉, 로컬 서버의 로그를 실시간으로 모두 삭제하는 소스를 만들어 실행시킬것이다.

 

 

 

0. 파이썬 파일 정상 작동을 위한 설치

python -V를 통해 python 설치는 되어있는지 확인, 버전은 상관없습니다. (Centos 최소 설치로도 python 2.7.5 이상 버전이 설치되므로 아마 추가 작업은 필요하지 않으실겁니다.)

pip install pymysql

pymysql 모듈을 사용할 것이므로 설치해줍니다.

완료되면 python쪽 세팅은 완료되었습니다.

 

 

 

1. 일단 스위치 장비 모두에게 서버에서 설정해주는 rsyslog.conf 내용과 동일한 내용을 넣어줍니다.

*.info;mail.none;authpriv.none;cron.none @999.888.777.666

info성 메시지는 받고 싶지 않다면 아래 내용을 넣어줍니다.

*.emerg;mail.none;*.alert;*.crit;*.err;*.warn;mail.none;authpriv.none;cron.none @999.888.777.666

 

 

 

2. loganalyzer에 필요 디렉터리

cd /var/www/html/loganalyzer

mkdir manager

cd manager

mkdir log

 

 

 

3. python 파일 작성

cd /var/www/html/loganalyzer/manager

vim auto_local_log_delete_ver1.0.0.py

import os
import time
import pymysql
import datetime

syslog_ip = 'localhost'
syslog_user = 'sysloguser'
syslog_passwd = 'passwd_syslog'
syslog_port = 3306
syslog_DB = 'Syslog'
syslog_table = 'SystemEvents'

def makelog(text):
        text = str(text)
        timelist = time.ctime().split()
        printf = '20' + datetime.date.today().strftime('%y-%m-%d') + ' ' + timelist[3] + '\t[INFO] ' + text
        print(' ' + printf)
        Month = {'Jan':'01', 'Feb':'02', 'Mar':'03', 'Apr':'04', 'May':'05', 'Jun':'06', 'Jul':'07', 'Aug':'08', 'Sep':'09', 'Oct':'10', 'Nov':'11', 'Dec':'12'}
        logfile_name = '/var/www/html/loganalyzer/manager/log/' + 'auto_delete_local_log_in_Syslog' + '_log.txt'
        with open(logfile_name, 'a') as f:
                f.write(printf + '\n')
count=0
os.system('cd /var/www/html/loganalyzer/manager/')
while 1:
        conn = pymysql.connect(host=syslog_ip, port=syslog_port, db=syslog_DB, user=syslog_user, passwd=syslog_passwd, charset='utf8')
        cur = conn.cursor()
        sql = "DELETE FROM " + syslog_table + " WHERE processid = '127.0.0.1'"
        cur.execute(sql)
        result = list(cur.fetchall())
        conn.commit()
        conn.close()
        if count == 6600:
                makelog('Working check every about 1 hour : Good Working now.')
                count = 1
        elif count == 0:
                makelog('Success to start.')
        count += 1
        time.sleep(0.5)

def makelog의 위에 syslog_??? 항목들은 syslog analyzer DB 설정하신 부분에 맞춰 변경해주시면 되겠습니다.

 

log 디렉토리 아래에는 약 1시간마다 정상적으로 해당 데몬이 작동중이라는 로그가 출력됩니다. DB에 얼마나 많은 양이 있는지, 서버의 하드웨어적 사양이 어떤지에 따라서 사용 서버마다 차이가 있을 듯 합니다. 저는 오차만큼 수치를 7200에서 감소시켜 6600으로 해두었습니다.

로그 미출력시 문제가 있을 가능성이 있으므로 해당 프로그램이 정상적으로 돌아가는지 확인해주시면 됩니다.

EX. ps -ef |grep python

 

 

 

제가 예전에 임시로 사용하기 위해 만든 소스라 아마 계속 사용하기는 힘들 듯 하고, 잠시 사용하는 정도로 쓸 수 있겠습니다. 불필요하거나 비효율적인 라인이 있을 수 있으니 참고바라며 피드백 주시면 수정해나가겠습니다.

 

 

+ Recent posts