使用kettle进行日志分析

文章介绍了如何在Unix环境中使用Syslog日志,以及对这些日志进行分析的步骤。首先,通过文本文件输入和正则表达式控件提取日志内容,然后利用过滤记录控件筛选特定命令(如vim)的日志,并将结果保存到Excel。最后,使用拆分字段控件将时间字段细分为月份、日期和时间。
摘要由CSDN通过智能技术生成

分析日志是一个大数据分析中较为常见的场景。在Unix类操作系统里,Syslog广泛被应用于系统或者应用的日志记录中。Syslog通常被记录在本地文件内,比如Ubuntu内为/var/log/syslog文件名,也可以被发送给远程Syslog服务器。Syslog日志内一般包括产生日志的时间、主机名、程序模块、进程名、进程ID、严重性和日志内容。具体的日志内容如下所示:

Jun 01 17:29:28 localhost bash[39095]: 10.212.143.73 : root : /root : ls --color=auto /var/log/messages

Jun 01 17:29:30 localhost bash[39132]: 10.212.143.73 : root : /root : vim /var/log/messages

Jun 01 17:29:45 localhost bash[39217]: 10.212.143.73 : root : /root : tail -2 /var/log/messages

Jun 01 17:29:50 localhost bash[39242]: 10.212.143.73 : root : /root : tail -5 /var/log/messages

数据最前面为时间,主机名、进程名,可选的进程ID,用户名,最后是日志内容。

请同学们将上面的数据保存到本地,进行如下操作:

1.将日志从文件中提取,并使用正则表达式控件获取日志的内容,分别放于时间、主机名等字段中;

使用文本文件输入控件和正则表达式控件。文本文件从文档中按行获取日志信息,并将其指定为“日志”字段输出到正则表达式控件,再使用正则表达式控件进行正则表达式的字符串匹配及

文本文件输入控件的配置如下图所示

首先使用浏览选择日志文件,再用使用增加按钮添加文件到选中的文件栏中,最后再配置字段页面,如图所示。

正则表达式控件的配置如图21所示,首先选定匹配的字段为日志,再选中为每个捕获组创建一个字段,接着可以使用Test regEx创建并测试正则表达式,如图22所示,最后在捕获组字段中按测试中顺序填入捕获组的字段名称和数据类型即可。

使用的正则表达式如下:

(\w{3} \d{2} [\d:]+) ([\w]+) [\w]+\[(\d+)\]: ([\d.]+) : (\w+) : /\w+ : (.+)

 

 配置完成后,就可以点击左上角转换按钮进行转换。并可以在spoon界面下的执行结果栏中的Preview data中看到结果,如下图所示。

2.根据上面已经获得的数据,筛选出命令为vim的日志,将上一步捕获而来的字段保存到Excel表格中:

在上一题的基础上,使用过滤记录控件、字段选择控件和Excel输出控件。布局如下图所示。

 过滤记录控件配置如图所示:

字段选择控件配置如图所示,先获取全部字段,再在移除页面选择多余字段进行删除,Excel输出控件配置可参考上面的图

 配置完成后,可以运行转换,结果如图所示。

 

 3.在第1问结果的基础上,将获取到的时间使用拆分字段控件分成月份、日期、时间三个字段。

在第一问的基础上使用拆分字段控件,具体布局如下图所示:

 拆分字段控件配置如下图所示,其中分隔符中需要填入空格,并在字段栏中填入新字段的名称和数据类型。

最后运行转换,得到的结果如图所示。

1. 以下是Python代码示例,用于提取日志并将数据放入相应字段中: ```python import re # 打开日志文件 with open('log.txt', 'r') as f: log_data = f.read() # 使用正则表达式获取时间、主机名、日志内容 time_pattern = re.compile(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}') hostname_pattern = re.compile(r'Host: (\w+)') content_pattern = re.compile(r'Content: (.+)') time_list = re.findall(time_pattern, log_data) hostname_list = re.findall(hostname_pattern, log_data) content_list = re.findall(content_pattern, log_data) # 将数据放入相应字段中 result = [] for i in range(len(time_list)): result.append({'time': time_list[i], 'hostname': hostname_list[i], 'content': content_list[i]}) ``` 2. 以下是Python代码示例,用于筛选出命令为vim的日志并将数据保存到Excel表格中: ```python import pandas as pd # 将数据放入DataFrame中 df = pd.DataFrame(result) # 筛选出命令为vim的日志 vim_df = df[df['content'].str.contains('vim')] # 将结果保存到Excel表格中 vim_df.to_excel('vim_logs.xlsx', index=False) ``` 3. 以下是Python代码示例,用于将时间拆分成月份、日期、时间三个字段: ```python # 将时间字段拆分成月份、日期、时间三个字段 vim_df['month'] = pd.to_datetime(vim_df['time']).dt.month vim_df['day'] = pd.to_datetime(vim_df['time']).dt.day vim_df['time'] = pd.to_datetime(vim_df['time']).dt.time ``` 注意:以上示例代码中,使用了Pandas库和Python自带的datetime模块,需要先安装或导入相应库。另外,正则表达式的模式需要根据实际日志格式进行调整。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值