利用 ELK 处理 Percona 审计日志
来源:互联网 发布:农村淘宝服务站有底薪 编辑:程序博客网 时间:2024/06/05 20:21
1、有强烈的审计需求。
2、能允许10%-15%左右的性能损失。
3、有强烈的对数据库操作实时查看需求(一般都是为了领导要求)。
input { file { path => ["/u02/backup/audit.log"] codec => json }}output { elasticsearch { hosts => ["192.168.1.233"] }}
上面的配置看上去是没有问题的,如果是一般的json数据哪就能解析成功了,
但是在 Percona audit plugin 中应用程序应用程序生成的SQL是五花八门,各种字符都有其中有。
如下审计的日志被 python 读取后的字符串展现(红色标记):
从上图可以看到有一些换行后tab的字符,这些字符使用 json.load 的时候会报错,不能解析成json
使用python json 模块解析相关日志文件报错:
>>> json.loads(json_line)Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib64/python2.7/site-packages/simplejson/__init__.py", line 516, in loads return _default_decoder.decode(s) File "/usr/lib64/python2.7/site-packages/simplejson/decoder.py", line 370, in decode obj, end = self.raw_decode(s) File "/usr/lib64/python2.7/site-packages/simplejson/decoder.py", line 400, in raw_decode return self.scan_once(s, idx=_w(s, idx).end())simplejson.scanner.JSONDecodeError: Invalid control character '\t' at: line 1 column 232 (char 231)
所以在使用logstash的时候也就解析不了这样的json数据了,
最终logstash只能报错并将整个message记录到 Elasticsearch 中
解决办法就是把这些字符替换掉。如下 Logstash 配置文件
input { file { path => ["/u02/backup/audit.log"] }} filter { mutate { gsub => ["message", "\\\\n", " "] gsub => ["message", "\t", " "] replace => [ "message", "%{message}" ] } json{ source => "message" } mutate { remove_field => [ "message" ] }} output { elasticsearch { hosts => ["192.168.1.233"] }}
该配置文件是投机取巧的办法, 把 (换行/tab) 字符替换成空格,要注意的一点最终显示的SQL和原来的有所差别。
这种方法有点不灵活如果sql语句中还有遇到一些json不能解析的字符又要进行处理。
>>朋友们如果有更好的方法也告知一声哈!<<<
刚开始以为这一切都万事大吉了。其实还有个一坑就是在使用 Kibana 查看的时候,这时候问题就来了。
有是有过 Percona audit 插件的估计都有这样的问题,就是他记录的是时间是国际形式的(如上图黄色标记),不像我们习惯了北京时间。因此在页面显示的时间会比我们平时的少 8 小时。
一般来说在ELK中使用国际的标准格式是合理的。因为在使用 Kibana 查看的时候会帮你自动转化成本地时间格式。也就是如果我们在中国他会自动把 timezone 转化为 Asia/Shanghai(东8区) 的。所以显示的时间应该是正确的才对。可是实际情况并没有。
是应为 Elasticsearch 将 "2016-08-30T01:45:30 UTC" 这串字符解析成了String类型。按道理应该解析成和@timestamp一样的date类型。
将 "2016-08-30T01:45:30 UTC" 格式转化成和 @timestamp 一样的格式("2016-08-30T01:45:30Z")
input { file { path => ["/u02/backup/audit.log"] }} filter { mutate { gsub => ["message", "\\\\n", " "] gsub => ["message", "\t", " "] replace => [ "message", "%{message}" ] } json{ source => "message" } mutate { remove_field => [ "message" ] gsub => ["[audit_record][timestamp]", " UTC", "Z"] replace => [ "[audit_record][timestamp]", "%{[audit_record][timestamp]}" ] }} output { elasticsearch { hosts => ["192.168.1.233"] }}
使用上面配置就能顺利的将 时间格式 转化成 Elasticsearch 想要的时间格式,并且能在 Kibana 中正确显示。
祝大家好运。
本文转载自:http://www.linuxprobe.com/elk-percona-audit.html
免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好,开源站点:http://www.linuxprobe.com/
- 利用 ELK 处理 Percona 审计日志
- 利用 ELK 处理 Percona 审计日志
- 利用 ELK 处理 Percona 审计日志
- 利用 ELK 处理 Percona 审计日志
- ELK 分布式日志处理
- ELK Stack 集中日志处理
- 利用Hibernate 3 Interceptor生成审计日志
- 利用rsyslog 配置用户行为日志审计
- MySQL之功能1 --- Percona-Server5.6首发提供日志审计功能
- elk 日志处理的一点思路
- ELK日志处理之Filebeat工作原理
- 用Docker+ELK集中处理日志
- Springboot+logback集成ELK处理日志实例
- 日志审计
- 日志审计
- ELK日志
- ELK日志处理之使用logstash收集log4J日志
- ELK日志处理之使用Grok解析日志
- 开发一个app要多少钱?
- 字符串分割
- 将字符串【"Hello world" 】 倒序结果为【"world Hello " 】
- 两种延时
- linux安装pecl、pear
- 利用 ELK 处理 Percona 审计日志
- 系统学习深度学习(六) --LSTM总结
- 【codeforces 757A】Gotta Catch Em' All!
- IKanalyzer、ansj_seg、jcseg三种中文分词器的实战较量
- Web服务器压力(负载)测试工具
- unity shader
- MYSQL多列数据合并成1行
- android如何实现开机自动启动Service或app
- 我的2016--旅行路线篇