Whatisthere14台机器(意思是我们有14条日志)一台可以连接到这14台机器的机器(用Python2.6)怎么办获取14台机器上某段时间包含某个特征的日志,如何取出具体内容在哪?使用pssh工具在14台机器上执行grep命令,获取包含某特征的日志。将14条日志作为标准输入发送到Python脚本。Python解析stdin(标准输入)并将日期转换为Python中的日期。日期格式,经过判断,取出符合条件的具体内容,输出到stdout(标准输出)开始1.使用pssh工具在14台机器上执行grep命令,获取包含某些特征的日志#installpsshtoolpipinstallpssh#使用pssh工具pssh-lroot-hRS_bj_14.txt-oresult"grepsome_tag/data/logs/api.log"-l表示使用哪个用户执行-h是指定的主机列表文件(换行分隔)-o是保存指定执行结果的文件夹***是需要执行的命令的结果:红色的两台执行失败的机器不包含符合我们过滤条件的日志2.将14条日志作为标准输入传递给Python脚本14日志作为标准输入传递给Python脚本:catresult/*|./ab-result-format.py15150010>result_we_want.logPythonscript#!/usr/bin/pythonimportsysimporttimeformat='%Y-%m-%dT%H:%M:%S+08:00'h_start=int(sys.argv[1])h_end=int(sys.argv[2])m_start=int(sys.argv[3])m_end=int(sys.argv[4])stdin=sys.stdin.read().strip()line_list=stdin.split('\n')foriteminline_list:infos=item.split()time_object=time.strptime(infos[0],format)ifh_start<=time_object.tm_hour<=h_end\andm_start<=time_object.tm_min<=m_end:printinfos[8],infos[3],infos[4]首先解释一下我们分析的日志格式:Nginx日志格式(log_format)方便查看,日志格式和日志中的空格被换行符替换。$time_iso8601$remote_addr$host$request_time$upstream_response_time$request$status$upstream_addr$session_id;(实际日志)2017-12-19T00:03:57+08:002003:da8:2004:1000:a0a:ffd2:f0:9b1c[2003:da8:2004:1000:0a13:ffaa:00f0:9b1c]0.4540。448POST/?Action=SubmitSyncTaskWithDataHTTP/1.1200[2003:da8:2004:1000:****:dd8b:00b7:38ae]:8080f228d3941798f0d92c877a92a265f679Python脚本做了以下事情:接受4个参数,分别是起始小时和分钟,读取标准输入sys.stdin.read(),并去掉开头和结尾的无用字符strip(),循环处理每一行logsplit每一行logsplit()将时间字符串特化为时间对象,并判断小时和分钟根据4个参数(这里处理的比较粗糙,没有办法跨小时处理现在,有兴趣的读者可以把它做的更精确一些)当满足时间条件时,打印需要的部分(这里我需要session_id,request_time,upstream_response_time,所以我们打印infos,infos,infos注意:Python的print是标准输出***我们用>来重定向tPython脚本的标准输出到result_we_want.log文件
