Python 如何解析nagios日志文件以在给定日志文件中对主机进行倒计时?

Python 如何解析nagios日志文件以在给定日志文件中对主机进行倒计时?,python,Python,我有一个日志文件如下: [Sun May 31 19:07:41 2015] HOST ALERT: US0837;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br> [Sun May 31 20:08:09 2015] HOST ALERT: PK273;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br> [Sun May 31 2

我有一个日志文件如下:

[Sun May 31 19:07:41 2015] HOST ALERT: US0837;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Sun May 31 20:08:09 2015] HOST ALERT: PK273;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Sun May 31 21:18:28 2015] HOST ALERT: US1549;DOWN;HARD;10;Connection refused <br>
[Sun May 31 21:55:25 2015] HOST ALERT: USDM1120;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Sun May 31 21:57:03 2015] HOST ALERT: US1563;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Sun May 31 22:21:56 2015] HOST ALERT: US1420;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Sun May 31 22:50:38 2015] HOST ALERT: US1420;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Sun May 31 22:54:38 2015] HOST ALERT: US1420;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Sun May 31 23:52:43 2015] HOST ALERT: US1354;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds<br>
[Mon Jun  1 00:57:08 2015] HOST ALERT: US3033;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Mon Jun  1 04:57:28 2015] HOST ALERT: FR0744;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Mon Jun  1 05:22:39 2015] HOST ALERT: ID1135;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Mon Jun  1 05:35:57 2015] HOST ALERT: IL1308;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Mon Jun  1 06:15:55 2015] HOST ALERT: ID1135;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Mon Jun  1 07:44:24 2015] HOST ALERT: US1354;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Mon Jun  1 11:18:55 2015] HOST ALERT: VN1320;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Mon Jun  1 11:33:07 2015] HOST ALERT: US1118;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Mon Jun  1 13:50:12 2015] HOST ALERT: VN373;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Mon Jun  1 14:02:58 2015] HOST ALERT: US1565;DOWN;HARD;10;Connection refused <br>
[Mon Jun  1 14:04:27 2015] HOST ALERT: VN1320;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Mon Jun  1 14:52:40 2015] HOST ALERT: US1311;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Mon Jun  1 16:39:38 2015] HOST ALERT: US1311;DOWN;HARD;10;CRITICAL - Socket timeout after 10 seconds <br>
[Sun May 31 19:07:41 2015]主机警报:US0837;向下坚固的10;严重-10秒后套接字超时
[Sun May 31 20:08:09 2015]主机警报:PK273;向下坚固的10;严重-10秒后套接字超时
[Sun May 31 21:18:28 2015]主机警报:US1549;向下坚固的10;连接被拒绝
[Sun May 31 21:55:25 2015]主机警报:USDM1120;向下坚固的10;严重-10秒后套接字超时
[Sun May 31 21:57:03 2015]主机警报:US1563;向下坚固的10;严重-10秒后套接字超时
[Sun May 31 22:21:56 2015]主机警报:US1420;向下坚固的10;严重-10秒后套接字超时
[Sun May 31 22:50:38 2015]主机警报:US1420;向下坚固的10;严重-10秒后套接字超时
[Sun May 31 22:54:38 2015]主机警报:US1420;向下坚固的10;严重-10秒后套接字超时
[Sun May 31 23:52:43 2015]主机警报:US1354;向下坚固的10;严重-10秒后套接字超时
[2015年6月1日星期一00:57:08]主机警报:US3033;向下坚固的10;严重-10秒后套接字超时
[2015年6月1日星期一04:57:28]主机警报:FR0744;向下坚固的10;严重-10秒后套接字超时
[2015年6月1日星期一05:22:39]主机警报:ID1135;向下坚固的10;严重-10秒后套接字超时
[2015年6月1日星期一05:35:57]主机警报:IL1308;向下坚固的10;严重-10秒后套接字超时
[Mon Jun 1 06:15:55 2015]主机警报:ID1135;向下坚固的10;严重-10秒后套接字超时
[2015年6月1日星期一07:44:24]主机警报:US1354;向下坚固的10;严重-10秒后套接字超时
[Mon Jun 1 11:18:55 2015]主机警报:VN1320;向下坚固的10;严重-10秒后套接字超时
[2015年6月1日星期一11:33:07]主机警报:US1118;向下坚固的10;严重-10秒后套接字超时
[2015年6月1日星期一13:50:12]主机警报:VN373;向下坚固的10;严重-10秒后套接字超时
[2015年6月1日星期一14:02:58]主机警报:US1565;向下坚固的10;连接被拒绝
[2015年6月1日星期一14:04:27]主机警报:VN1320;向下坚固的10;严重-10秒后套接字超时
[2015年6月1日星期一14:52:40]主机警报:US1311;向下坚固的10;严重-10秒后套接字超时
[2015年6月1日星期一16:39:38]主机警报:US1311;向下坚固的10;严重-10秒后套接字超时
[1433021896]主机警报:US1420;向下软的1.严重-10秒后套接字超时 [1433021944]主机警报:US1420;向下软的2.严重-10秒后套接字超时 [1433022043]主机警报:US1420;向下软的1.严重-10秒后套接字超时 [1433022047]主机警报:US1354;向下软的1.严重-10秒后套接字超时 [1433022079]主机警报:US1354;向下软的2.严重-10秒后套接字超时 [1433022243]主机警报:US1354;向下软的3.严重-10秒后套接字超时 [1433022244]主机警报:VN1320;向下软的1.严重-10秒后套接字超时 [1433022816]主机警报:VN1320;向下软的1.严重-10秒后套接字超时 [1433022874]主机警报:VN1320;向下软的2.严重-10秒后套接字超时 [14330225]主机警报:US1311;向下软的1.严重-10秒后套接字超时 [1433023184]主机警报:US1311;向下软的3.严重-10秒后套接字超时

输出:

No. HostName    State   Count (HARD DOWN) Count(SOFT DOWN)
1.  US1311       DOWN    2                  4<br>
2.  VN1320       DOWN    2                  2 <br>
3.  US1420       DOWN    4                  3 <br>
否主机名状态计数(硬向下)计数(软向下)
1.US1311下降2 4
2.VN1320下降2
3.US1420下跌43
代码:

!/usr/bin/python
从prettytable导入prettytable
导入字符串
导入子流程
将numpy作为np导入
日志文件=打开(“nagioslog”,“w”) log=subprocess.call(“cat nagios-06-02-2015-00.log | perl-pe's/(\d+)/localtime($1)/e'| grep'主机警报'| grep'关闭;硬;10',shell=True,stdout=logfile)
f=打开(“nagioslog”,“r”)
对于f中的行:
字段=line.strip().split()
主机=字段[8]
状态=字段[9]
statetype=字段[10]
f=打开(“output.txt”,“a”)
f、 写入(主机+''+状态+''+状态类型+'\n')
a=文件。写入(“hostdown\u count.txt”,“a”)
z=PrettyTable([“主机”、“状态”、“状态类型”、“计数])
z、 对齐[“主机”]=“l”
z、 对齐[“状态”]=“l”
z、 对齐[“StateType”]=“l”
z、 对齐[“计数”]=“l”
z、 填充宽度=1
将open(“hostdown_count.txt”、“r”)作为g:
对于g中的行:
行=行。拆分()
t=z.添加_行(行)
打印(z)

提前谢谢。

我会使用re和dict:

from collections import OrderedDict

od = OrderedDict() 

import re

with open('in.log') as f:
    r = re.compile("(?<=ALERT:\s)\S+")
    for line in f:
        name, st, con, _, _ = r.search(line).group().split(";")
        od.setdefault(name, {"State": st, "StateType": con,"Count":0})
        od[name]["State"] = st
        od[name]["StateType"] = con
        od[name]["Count"] += 1


for k,v in od.items():
    print("{}, {}".format(k,v))

嗨,帕德雷克,谢谢。但我得到了错误:Traceback(最近一次调用last):文件“nagioslog.py”,第18行,打印(“{},{}”。format(k,v))ValueError:format@Ramesh,那么您需要使用格式编号,因为您正在使用python2.6,
print(“{0},{1}”。format(k,v))
from collections import OrderedDict

od = OrderedDict() 

import re

with open('in.log') as f:
    r = re.compile("(?<=ALERT:\s)\S+")
    for line in f:
        name, st, con, _, _ = r.search(line).group().split(";")
        od.setdefault(name, {"State": st, "StateType": con,"Count":0})
        od[name]["State"] = st
        od[name]["StateType"] = con
        od[name]["Count"] += 1


for k,v in od.items():
    print("{}, {}".format(k,v))
US0837, {'Count': 1, 'State': 'DOWN', 'StateType': 'HARD'}
PK273, {'Count': 1, 'State': 'DOWN', 'StateType': 'HARD'}
US1549, {'Count': 1, 'State': 'DOWN', 'StateType': 'HARD'}
USDM1120, {'Count': 1, 'State': 'DOWN', 'StateType': 'HARD'}
US1563, {'Count': 1, 'State': 'DOWN', 'StateType': 'HARD'}
US1420, {'Count': 3, 'State': 'DOWN', 'StateType': 'HARD'}
US1354, {'Count': 2, 'State': 'DOWN', 'StateType': 'HARD'}
US3033, {'Count': 1, 'State': 'DOWN', 'StateType': 'HARD'}
FR0744, {'Count': 1, 'State': 'DOWN', 'StateType': 'HARD'}
ID1135, {'Count': 2, 'State': 'DOWN', 'StateType': 'HARD'}
IL1308, {'Count': 1, 'State': 'DOWN', 'StateType': 'HARD'}
VN1320, {'Count': 2, 'State': 'DOWN', 'StateType': 'HARD'}
US1118, {'Count': 1, 'State': 'DOWN', 'StateType': 'HARD'}
VN373, {'Count': 1, 'State': 'DOWN', 'StateType': 'HARD'}
US1565, {'Count': 1, 'State': 'DOWN', 'StateType': 'HARD'}
US1311, {'Count': 2, 'State': 'DOWN', 'StateType': 'HARD'}