zoukankan      html  css  js  c++  java
  • ELK 处理 Percona 审计日志(填坑)

    前提

    1、有强烈的审计需求。

    2、能允许10%-15%左右的性能损失。

    3、有强烈的对数据库操作实时查看需求(一般都是为了领导要求)。

    Logstash 比较坑的配置

    上面的配置看上去是没有问题的,如果是一般的json数据哪就能解析成功了,

    但是在 Percona audit plugin 中应用程序应用程序生成的SQL是五花八门,各种字符都有其中有。

    如下审计的日志被 python 读取后的字符串展现(红色标记):

    ELK

    从上图可以看到有一些换行后tab的字符,这些字符使用 json.load 的时候会报错,不能解析成json

    使用python json 模块解析相关日志文件报错:

    所以在使用logstash的时候也就解析不了这样的json数据了,

    最终logstash只能报错并将整个message记录到 Elasticsearch 中

    解决办法

    解决办法就是把这些字符替换掉。如下 Logstash 配置文件

    该配置文件是投机取巧的办法, 把 (换行/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")

    最终配置文件如下

    使用上面配置就能顺利的将 时间格式 转化成 Elasticsearch 想要的时间格式,并且能在 Kibana 中正确显示。

  • 相关阅读:
    SharePoint 2013 配置基于表单的身份认证
    SharePoint 2013 场解决方案包含第三方程序集
    SharePoint 2010 站点附加数据升级到SP2013
    SharePoint 2013 在母版页中插入WebPart
    SharePoint 2013 搭建负载均衡(NLB)
    SharePoint 部署解决方案Feature ID冲突
    SharePoint 2013 配置基于AD的Form认证
    SharePoint Server 2016 Update
    SharePoint 2013 为用户组自定义EventReceiver
    SharePoint 2013 JavaScript API 记录
  • 原文地址:https://www.cnblogs.com/DataArt/p/10338043.html
Copyright © 2011-2022 走看看