婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 使用Python對Syslog信息進行分析并繪圖的實現

使用Python對Syslog信息進行分析并繪圖的實現

熱門標簽:蓋州市地圖標注 地圖標注的意義點 315電話機器人廣告 房產電銷外呼系統 南京銷售外呼系統軟件 地圖制圖標注位置改變是移位嗎 浙江電銷卡外呼系統好用嗎 地圖標注微信發送位置不顯示 上海機器人外呼系統哪家好

實驗目的:

  • 對設備Syslong信息進行分析記錄,并寫入sqlite數據庫中;后續讀取數據庫的信息,對Syslog的嚴重級別分布、來源進行分析進行分析。
  • 同時監控OSPF的狀態信息,狀態一旦改變,進行告警。

實驗結果:

監控Syslog的嚴重級別分布,和日志源分布,并繪圖:


監控OSPF狀態信息:

實驗環境:

兩臺CSR1000v,完成Syslog(其中一臺)和OSPF的配置:

logging hosy x.x.x.x /將Syslong日志信息發送給目的主機(運行python)進行處理。

logging trap debugging /監控所有級別的Syslog信息。

ospf配置略。

 python腳本:

腳本一:監控CSR1000v發送的Syslog Trap信息,并對信息進行分詞處理,寫入數據庫。同時監控OSPF鄰居狀態是否改變。

import socketserver
import re
from dateutil import parser
import os
import sqlite3

# facility與ID的對應關系的字典,方便后續分詞時提取對應的信息
facility_dict = {0: 'KERN',
                 1: 'USER',
                 2: 'MAIL',
                 3: 'DAEMON',
                 4: 'AUTH',
                 5: 'SYSLOG',
                 6: 'LPR',
                 7: 'NEWS',
                 8: 'UUCP',
                 9: 'CRON',
                 10: 'AUTHPRIV',
                 11: 'FTP',
                 16: 'LOCAL0',
                 17: 'LOCAL1',
                 18: 'LOCAL2',
                 19: 'LOCAL3',
                 20: 'LOCAL4',
                 21: 'LOCAL5',
                 22: 'LOCAL6',
                 23: 'LOCAL7'}

# severity_level與ID的對應關系的字典,方便后續分詞時提取對應的信息
severity_level_dict = {0: 'EMERG',
                       1: 'ALERT',
                       2: 'CRIT',
                       3: 'ERR',
                       4: 'WARNING',
                       5: 'NOTICE',
                       6: 'INFO',
                       7: 'DEBUG'}

# 分詞處理的類
class SyslogUDPHandler(socketserver.BaseRequestHandler):
    def handle(self):
        data = bytes.decode(self.request[0].strip())  # 讀取數據
        # print(data)
        syslog_info_dict = {'device_ip': self.client_address[0]}
        try:
            # syslog信息如下:187>83: *Apr  4 00:03:12.969: %LINK-3-UPDOWN: Interface GigabitEthernet2, 
            # changed state to up,我們需要對此進行提煉分詞,并將分詞結果記入到一個字典里面;具體的分詞過程簡單了解即可
            syslog_info = re.match(r'^(\d*)>(\d*): \*(.*): %(\w+)-(\d)-(\w+): (.*)', str(data)).groups()
            # print(syslog_info[0]) 提取為整數 例如 185
            # 185 二進制為 1011 1001
            # 前5位為facility  >> 3 獲取前5位
            # 后3位為severity_level   0b111 獲取后3位
            syslog_info_dict['facility'] = (int(syslog_info[0]) >> 3)
            syslog_info_dict['facility_name'] = facility_dict[int(syslog_info[0]) >> 3]
            syslog_info_dict['logid'] = int(syslog_info[1])
            syslog_info_dict['time'] = parser.parse(syslog_info[2])
            syslog_info_dict['log_source'] = syslog_info[3]
            syslog_info_dict['severity_level'] = int(syslog_info[4])
            syslog_info_dict['severity_level_name'] = severity_level_dict[int(syslog_info[4])]
            syslog_info_dict['description'] = syslog_info[5]
            syslog_info_dict['text'] = syslog_info[6]
        except AttributeError:
            # 有些日志會缺失%SYS-5-CONFIG_I, 造成第一個正則表達式無法匹配 , 也無法提取severity_level
            # 下面的icmp的debug就是示例
            # 191>91: *Apr  4 00:12:29.616: ICMP: echo reply rcvd, src 10.1.1.80, dst 10.1.1.253, topology BASE, dscp 0 topoid 0
            syslog_info = re.match(r'^(\d*)>(\d*): \*(.*): (\w+): (.*)', str(data)).groups()
            print(syslog_info[0])
            syslog_info_dict['facility'] = (int(syslog_info[0]) >> 3)
            syslog_info_dict['facility_name'] = facility_dict[int(syslog_info[0]) >> 3]
            syslog_info_dict['logid'] = int(syslog_info[1])
            syslog_info_dict['time'] = parser.parse(syslog_info[2])
            syslog_info_dict['log_source'] = syslog_info[3]
            # 如果在文本部分解析不了severity_level, 切換到syslog_info[0]去獲取
            # 185 二進制為 1011 1001
            # 前5位為facility  >> 3 獲取前5位
            # 后3位為severity_level   0b111 獲取后3位
            syslog_info_dict['severity_level'] = (int(syslog_info[0])  0b111)
            syslog_info_dict['severity_level_name'] = severity_level_dict[(int(syslog_info[0])  0b111)]
            syslog_info_dict['description'] = 'N/A'
            syslog_info_dict['text'] = syslog_info[4]
        # print(syslog_info_dict)
        # 根據分詞后的字典進行分析,如果用正則表達式匹配到了OSPF狀態有了改變,則打印告警信息
        if syslog_info_dict['log_source'] == 'OSPF':
            result_ospf = re.findall('(Process \d+), Nbr ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).+to (\w+)', syslog_info_dict['text'])[0]
            if result_ospf:
                print('OSPF '+result_ospf[0]+' Neighbor '+result_ospf[1]+' status '+result_ospf[2])
        # 將字典信息寫入sqlite數據庫中
        conn = sqlite3.connect(gl_dbname)
        cursor = conn.cursor()
        cursor.execute("insert into syslogdb (time, \

                                              device_ip, \

                                              facility, \

                                              facility_name, \

                                              severity_level, \

                                              severity_level_name, \

                                              logid, \

                                              log_source, \

                                              description, \

                                              text) values ('%s', '%s', %d, '%s', %d, '%s', %d, '%s', '%s', '%s')" % (
        syslog_info_dict['time'].strftime("%Y-%m-%d %H:%M:%S"),
        syslog_info_dict['device_ip'],
        syslog_info_dict['facility'],
        syslog_info_dict['facility_name'],
        syslog_info_dict['severity_level'],
        syslog_info_dict['severity_level_name'],
        syslog_info_dict['logid'],
        syslog_info_dict['log_source'],
        syslog_info_dict['description'],
        syslog_info_dict['text'],
        ))
        conn.commit()


if __name__ == "__main__":
    # 使用Linux解釋器  WIN解釋器
    global gl_dbname
    gl_dbname = 'syslog.sqlite'
    if os.path.exists(gl_dbname):
        os.remove(gl_dbname)
    # 連接數據庫
    conn = sqlite3.connect(gl_dbname)
    cursor = conn.cursor()
    # 創建數據庫

    cursor.execute("create table syslogdb(id INTEGER PRIMARY KEY AUTOINCREMENT,\

                                         time varchar(64), \

                                         device_ip varchar(32),\

                                         facility int,\

                                         facility_name varchar(32),\

                                         severity_level int,\

                                         severity_level_name varchar(32),\

                                         logid int,\

                                         log_source varchar(32), \

                                         description varchar(128), \

                                         text varchar(1024)\

                                         )")
    conn.commit()
    try:
        HOST, PORT = "0.0.0.0", 514  # 本地地址與端口
        server = socketserver.UDPServer((HOST, PORT), SyslogUDPHandler)  # 綁定本地地址,端口和syslog處理方法
        print("Syslog 服務已啟用, 寫入日志到數據庫!!!")
        server.serve_forever(poll_interval=0.5)  # 運行服務器,和輪詢間隔

    except (IOError, SystemExit):
        raise
    except KeyboardInterrupt:  # 捕獲Ctrl+C,打印信息并退出
        print("Crtl+C Pressed. Shutting down.")
    finally:
        conn.commit()

腳本二:讀取數據庫中的信息,并根據信息進行餅圖繪制。

import sqlite3
from matplotlib import pyplot as plt
from syslog_server_to_db import severity_level_dict

# 繪制嚴重等級的餅圖
def syslog_show_error_level_pie(dbname):
    # 連接數據庫
    conn = sqlite3.connect(dbname)
    cursor = conn.cursor()
    # 提取安全級別和數量信息
    cursor.execute("select severity_level as level,COUNT(*) as count from syslogdb group by severity_level")
    yourresults = cursor.fetchall()

    level_list = []
    count_list = []

    # 把結果寫入leve_list和count_list的列表
    for level_info in yourresults:
        level_list.append(severity_level_dict[level_info[0]])
        count_list.append(level_info[1])

    print(level_list)
    print([float(count) for count in count_list])

    plt.rcParams['font.sans-serif'] = ['SimHei']  # 設置中文
    # 調節圖形大小,寬,高
    plt.figure(figsize=(6, 6))

    # 使用count_list的比例來繪制餅圖
    # 使用level_list作為注釋
    patches, l_text, p_text = plt.pie(count_list,
                                      labels=level_list,
                                      labeldistance=1.1,
                                      autopct='%3.1f%%',
                                      shadow=False,
                                      startangle=90,
                                      pctdistance=0.6)

    # 改變文本的大小
    # 方法是把每一個text遍歷。調用set_size方法設置它的屬性
    for t in l_text:
        t.set_size = 30
    for t in p_text:
        t.set_size = 20
    # 設置x,y軸刻度一致,這樣餅圖才能是圓的
    plt.axis('equal')
    plt.title('SYSLOG嚴重級別分布圖')  # 主題
    plt.legend()
    plt.show()

# 繪制Syslog來源的餅圖
def syslog_show_source_pie(dbname):
    # 連接數據庫
    conn = sqlite3.connect(dbname)
    cursor = conn.cursor()
    # 提取log源與其對應的數量
    cursor.execute("select log_source,COUNT(*) as count from syslogdb group by log_source")
    yourresults = cursor.fetchall()

    source_list = []
    count_list = []

    # 將數據庫的信息,依次寫入兩個列表
    for source_info in yourresults:
        source_list.append(source_info[0])
        count_list.append(source_info[1])

    print(source_list)
    print([float(count) for count in count_list])

    plt.rcParams['font.sans-serif'] = ['SimHei']  # 設置中文
    # 調節圖形大小,寬,高
    plt.figure(figsize=(6, 6))

    # 使用count_list的比例來繪制餅圖
    # 使用level_list作為注釋
    patches, l_text, p_text = plt.pie(count_list,
                                      labels=source_list,
                                      labeldistance=1.1,
                                      autopct='%3.1f%%',
                                      shadow=False,
                                      startangle=90,
                                      pctdistance=0.6)

    # 改變文本的大小
    # 方法是把每一個text遍歷。調用set_size方法設置它的屬性
    for t in l_text:
        t.set_size = 30
    for t in p_text:
        t.set_size = 20
    # 設置x,y軸刻度一致,這樣餅圖才能是圓的
    plt.axis('equal')
    plt.title('日志源分布圖')  # 主題
    plt.legend()
    plt.show()


if __name__ == '__main__':
    syslog_show_error_level_pie("syslog.sqlite")
    syslog_show_source_pie("syslog.sqlite")

參考資料來源:現任明教教主

到此這篇關于使用Python對Syslog信息進行分析并繪圖的實現的文章就介紹到這了,更多相關Python Syslog分析 內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 用Python的繪圖庫(matplotlib)繪制小波能量譜
  • python matplotlib繪圖實現刪除重復冗余圖例的操作
  • python 繪圖模塊matplotlib的使用簡介
  • python之 matplotlib和pandas繪圖教程
  • python繪圖模塊之利用turtle畫圖
  • python繪圖pyecharts+pandas的使用詳解
  • Python下使用Trackbar實現繪圖板
  • Python數據可視化常用4大繪圖庫原理詳解
  • Python三維繪圖之Matplotlib庫的使用方法
  • Python Matplotlib繪圖基礎知識代碼解析
  • Python繪圖之二維圖與三維圖詳解
  • Python繪圖之柱形圖繪制詳解
  • Python實現手繪圖效果實例分享
  • Python實戰之畫哆啦A夢(超詳細步驟)

標簽:克拉瑪依 赤峰 陽泉 日照 雙鴨山 貴州 金華 臨汾

巨人網絡通訊聲明:本文標題《使用Python對Syslog信息進行分析并繪圖的實現》,本文關鍵詞  使用,Python,對,Syslog,信息,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《使用Python對Syslog信息進行分析并繪圖的實現》相關的同類信息!
  • 本頁收集關于使用Python對Syslog信息進行分析并繪圖的實現的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲mv大片欧洲mv大片精品| 欧美电影影音先锋| 国产精品18久久久久| 在线一区二区三区做爰视频网站| 久久久亚洲综合| 九九精品视频在线看| 精品剧情在线观看| 亚洲精品伦理在线| 国产精品自拍毛片| 18成人在线观看| 99国产精品久久久久久久久久久 | www国产精品av| 国产伦精品一区二区三区免费| 久久久无码精品亚洲日韩按摩| 国模娜娜一区二区三区| 国产精品伦一区二区三级视频| 国产精品中文字幕日韩精品| 中文字幕第一区二区| 色吊一区二区三区| 三级久久三级久久| 日韩精品一区二区在线观看| 国产综合久久久久影院| 中文字幕在线观看一区二区| 97精品久久久午夜一区二区三区| 亚洲午夜久久久久久久久久久| 欧美猛男gaygay网站| 免费成人美女在线观看.| 国产精品色哟哟网站| 色老头久久综合| 狠狠久久亚洲欧美| 亚洲一区二区中文在线| 在线播放一区二区三区| 成人性色生活片免费看爆迷你毛片| 国产精品久久综合| 欧美一卡二卡在线| 国产成人午夜视频| 日本午夜一区二区| 一区二区三区在线观看欧美| 欧美狂野另类xxxxoooo| 91视频免费播放| 久草在线在线精品观看| 亚洲bdsm女犯bdsm网站| 国产午夜精品久久久久久久 | 国产精品综合av一区二区国产馆| 中文字幕中文字幕中文字幕亚洲无线 | 偷拍日韩校园综合在线| 亚洲男同性视频| 国产免费观看久久| 欧美变态tickle挠乳网站| 波波电影院一区二区三区| 免费高清成人在线| 免费人成在线不卡| 视频一区视频二区中文| 亚洲永久精品大片| 中文字幕日本乱码精品影院| 精品国产乱码久久久久久牛牛 | 成人污视频在线观看| 免费的国产精品| 午夜伊人狠狠久久| 天天射综合影视| 亚洲第一成年网| 日韩二区在线观看| 午夜伦欧美伦电影理论片| 一区二区欧美国产| 一区二区三区 在线观看视频| 一色屋精品亚洲香蕉网站| 久久久精品黄色| 精品少妇一区二区三区免费观看 | 狠狠狠色丁香婷婷综合激情 | 一区二区在线观看免费| 精品国产在天天线2019| 日韩三级免费观看| 日韩精品自拍偷拍| 日韩欧美国产高清| 3d动漫精品啪啪一区二区竹菊| 欧美性猛片xxxx免费看久爱| 成人午夜私人影院| 国产盗摄一区二区| 99久久精品一区| 777久久久精品| 欧美日韩一级视频| 欧美电影一区二区三区| 91精品国产色综合久久| 日韩午夜中文字幕| 久久午夜国产精品| 久久综合色天天久久综合图片| 久久亚洲二区三区| 国产精品美女一区二区| 国产精品视频免费| 国产精品乱子久久久久| 日韩一区在线播放| 一区二区三区资源| 亚洲一区二区不卡免费| 另类成人小视频在线| 丁香婷婷综合激情五月色| 成人精品免费视频| 97久久精品人人做人人爽50路| 色综合天天综合色综合av| 欧美日韩精品一区二区三区四区| 欧美午夜精品免费| 欧美大片在线观看| 成人免费在线播放视频| 亚洲人午夜精品天堂一二香蕉| 亚洲一本大道在线| 国产成人综合自拍| 欧美在线播放高清精品| 日韩欧美国产一区二区三区| 1区2区3区国产精品| 日韩制服丝袜先锋影音| 成人一道本在线| 91成人免费电影| 精品国产一区二区三区四区四 | 精品播放一区二区| 亚洲日本中文字幕区| 久久99最新地址| 色婷婷亚洲婷婷| 国产网红主播福利一区二区| 亚洲成人av一区二区三区| 成人毛片老司机大片| 欧美一级电影网站| 亚洲精品国产视频| 国产乱淫av一区二区三区| 欧美日韩精品欧美日韩精品一综合| 国产日产欧美一区二区三区| 同产精品九九九| 91久久免费观看| 国产精品国产三级国产aⅴ无密码| 蜜桃视频一区二区| 777奇米成人网| 丝袜亚洲另类丝袜在线| 在线亚洲高清视频| 亚洲靠逼com| 一本到三区不卡视频| 中文字幕免费一区| 国产精品一区二区三区99| 日韩精品一区二区三区视频| 亚洲成av人影院| 欧美色综合网站| 一区二区三区成人| 色综合久久中文字幕综合网| 国产精品女同互慰在线看| 国产精品白丝jk黑袜喷水| 精品久久久网站| 精品综合久久久久久8888| 欧美mv日韩mv国产网站| 日韩中文字幕区一区有砖一区 | 久久久久久一二三区| 日产精品久久久久久久性色| 欧美视频在线观看一区二区| 亚洲激情综合网| 欧美性色aⅴ视频一区日韩精品| 国产精品视频免费| 91国偷自产一区二区三区成为亚洲经典 | 一区二区三区在线观看网站| 色婷婷久久久亚洲一区二区三区 | 一区二区三区国产| 欧美性猛片aaaaaaa做受| 亚洲国产精品久久一线不卡| 欧美少妇bbb| 麻豆精品久久精品色综合| 久久久久久久久一| 成人午夜精品在线| 亚洲精品伦理在线| 91精品国产一区二区| 极品少妇一区二区三区精品视频 | 久久久久9999亚洲精品| 成人av在线播放网站| 亚洲免费视频中文字幕| 欧美三级日韩在线| 蜜桃精品在线观看| 中文字幕av一区二区三区| 91麻豆视频网站| 美日韩黄色大片| 国产日本欧洲亚洲| 色综合久久久久综合99| 天天操天天色综合| 精品国精品国产| 国产真实乱对白精彩久久| 中文字幕一区二区在线观看| 在线播放视频一区| 不卡一区二区三区四区| 亚洲国产精品久久人人爱蜜臀| 精品国产电影一区二区| 91网站在线观看视频| 亚洲免费伊人电影| 国产欧美一二三区| 欧美精品高清视频| 99精品视频在线播放观看| 免费观看久久久4p| 亚洲精品成人精品456| 久久久噜噜噜久久中文字幕色伊伊| 9久草视频在线视频精品| 免费成人深夜小野草| 一区二区三区丝袜| 中文字幕av一区二区三区免费看| 欧美日韩精品一区二区天天拍小说| 成人一级视频在线观看| 久久66热re国产| 日韩电影在线一区二区三区| 国产精品黄色在线观看|