ELK logstash 处理MySQL慢查询日志(26th)

2025-05-25 0 60

在生产环境下,logstash 经常会遇到处理多种格式的日志,不同的日志格式,解析方法不同。下面来说说logstash处理多行日志的例子,对MySQL慢查询日志进行分析,这个经常遇到过,网络上疑问也很多。

MySQL慢查询日志格式如下:

# User@Host: ttlsa[ttlsa] @  [10.4.10.12]  Id: 69641319
# Query_time: 0.000148  Lock_time: 0.000023 Rows_sent: 0  Rows_examined: 202
SET timestamp=1456717595;
select  `Id`, `Url` from `File` where `Id` in (\'201319\', \'201300\');
# Time: 160229 11:46:37

filebeat配置

我这里是使用filebeat 1.1.1版本的,之前版本没有multiline配置项,具体方法看后面那种。

filebeat:
  prospectors:
    -
      paths:
        - /www.ttlsa.com/logs/mysql/slow.log
      document_type: mysqlslowlog
      input_type: log
      multiline:
        negate: true
        match: after
  registry_file: /var/lib/filebeat/registry
output:
  logstash:
    hosts: [\"10.6.66.14:5046\"]
shipper:
logging:
  files:

logstash配置

1. input段配置

# vi /etc/logstash/conf.d/01-beats-input.conf 
input {
  beats {
    port => 5046
    host => \"10.6.66.14\"
 }
}

2. filter 段配置

# vi /etc/logstash/conf.d/16-mysqlslowlog.log 
filter {
  if [type] == \"mysqlslowlog\" {
  grok {
    match => { \"message\" => \"(?m)^#\\s+User@Host:\\s+%{USER:user}\\[[^\\]]+\\]\\s+@\\s+(?:(?<clienthost>\\S*) )?\\[(?:%{IPV4:clientip})?\\]\\s+Id:\\s+%{NUMBER:row_id:int}\\n#\\s+Query_time:\\s+%{NUMBER:query_time:float}\\s+Lock_time:\\s+%{NUMBER:lock_time:float}\\s+Rows_sent:\\s+%{NUMBER:rows_sent:int}\\s+Rows_examined:\\s+%{NUMBER:rows_examined:int}\\n\\s*(?:use %{DATA:database};\\s*\\n)?SET\\s+timestamp=%{NUMBER:timestamp};\\n\\s*(?<sql>(?<action>\\w+)\\b.*;)\\s*(?:\\n#\\s+Time)?.*$\" }
  }
    date {
      match => [ \"timestamp\", \"UNIX\", \"YYYY-MM-dd HH:mm:ss\"]
      remove_field => [ \"timestamp\" ]
    }
  }
}

关键之重是grok正则的配置。

3. output段配置

# vi /etc/logstash/conf.d/30-beats-output.conf 
output {
    if \"_grokparsefailure\" in [tags] {
      file { path => \"/var/log/logstash/grokparsefailure-%{[type]}-%{+YYYY.MM.dd}.log\" }
    }

  if [@metadata][type] in [ \"mysqlslowlog\" ] {
    elasticsearch {
      hosts => [\"10.6.66.14:9200\"]
      sniffing => true
      manage_template => false
      template_overwrite => true
      index => \"%{[@metadata][beat]}-%{[type]}-%{+YYYY.MM.dd}\"
      document_type => \"%{[@metadata][type]}\"
    }
  }
}

标准输出结果截图

elasticsearch结果截图

如果是使用filebeat1.1.1之前的版本,配置如下:

1. filebeat配置

filebeat:
  prospectors:
    -
      paths:
        - /www.ttlsa.com/logs/mysql/slow.log
      document_type: mysqlslowlog
      input_type: log
  registry_file: /var/lib/filebeat/registry
output:
  logstash:
    hosts: [\"10.6.66.14:5046\"]
shipper:
logging:
  files:

2. logstash input段配置

input {
  beats {
    port => 5046
    host => \"10.6.66.14\"
    codec => multiline {
      pattern => \"^# User@Host:\"
      negate => true
      what => previous
    }
 }
}

其它配置不变。

如有疑问跟帖,或者加群沟通。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 ELK logstash 处理MySQL慢查询日志(26th) https://www.kuaiidc.com/50947.html

相关文章

发表评论
暂无评论