logstash收集MySQL慢查询日志

#此处以收集mysql慢查询日志为准,根据文件名不同添加不同的字段值input {
    file {
        path => "/data/order-slave-slow.log"
        type => "mysql-slow-log"
        start_position => "beginning"
        codec => multiline {
            pattern => "^# [email protected]:"
            negate => true
            what => previous
        }
    }
    file {
        path => "/data/other-slave-slow.log"
        type => "mysql-slow-log"
        start_position => "beginning"
        codec => multiline {
            pattern => "^# [email protected]:"
            negate => true
            what => previous
        }
    }
    file {
        path => "/data/order-master-slow.log"
        type => "mysql-slow-log"
        start_position => "beginning"
        codec => multiline {
            pattern => "^# [email protected]:"
            negate => true
            what => previous
        }
    }
    file {
        path => "/data/other-master-slow.log"
        type => "mysql-slow-log"
        start_position => "beginning"
        codec => multiline {
            pattern => "^# [email protected]:"
            negate => true
            what => previous
        }
    }
}
filter {
    if [path] =~ "order-slave-slow" { //根据文件内容不同,增加不同的字段
        grok {
            match => { "message" => "(?m)^#\[email protected]:\s+%{USER:user}\[[^\]]+\]\[email protected]\s+(?:(?<clientip>\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:Row_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)?.*$" }
            remove_field => [ "message" ]
        }
        mutate {
            replace => [ "host" , "%{host}" ]
            add_field => [ "nsCode", "%{nsCode}" ]
            add_field => [ "envCode", "%{envCode}" ]
            add_field => [ "mysqlType", "%{mysqlType}" ]
            gsub => [ "sql", "\n# Time: \d+\s+\d+:\d+:\d+", "" ]
        }
    }
    if [path] =~ "other-slave-slow" {
        grok {
            match => { "message" => "(?m)^#\[email protected]:\s+%{USER:user}\[[^\]]+\]\[email protected]\s+(?:(?<clientip>\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:Row_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)?.*$" }
            remove_field => [ "message" ]
        }
        mutate {
            replace => [ "host" , "%{host}" ]
            add_field => [ "nsCode", "%{nsCode}" ]
            add_field => [ "envCode", "%{envCode}" ]
            add_field => [ "mysqlType", "%{mysqlType}" ]
            gsub => [ "sql", "\n# Time: \d+\s+\d+:\d+:\d+", "" ]
        }
    }
    if [path] =~ "order-master-slow" {
        grok {
            match => { "message" => "(?m)^#\[email protected]:\s+%{USER:user}\[[^\]]+\]\[email protected]\s+(?:(?<clientip>\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:Row_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)?.*$" }
            remove_field => [ "message" ]
        }
        mutate {
            replace => [ "host" , "%{host}" ]
            add_field => [ "nsCode", "%{nsCode}" ]
            add_field => [ "envCode", "%{envCode}" ]
            add_field => [ "mysqlType", "%{mysqlType}" ]
            gsub => [ "sql", "\n# Time: \d+\s+\d+:\d+:\d+", "" ]
        }
    }
    if [path] =~ "other-master-slow" {
        grok {
            match => { "message" => "(?m)^#\[email protected]:\s+%{USER:user}\[[^\]]+\]\[email protected]\s+(?:(?<clientip>\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:Row_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)?.*$" }
            remove_field => [ "message" ]
        }
        mutate {       #替换原有host字段的值
            replace => [ "host" , "%{host}" ]        #新增三个字段
            add_field => [ "nsCode", "%{nsCode}" ]
            add_field => [ "envCode", "%{envCode}" ]
            add_field => [ "mysqlType", "%{mysqlType}" ]       //sql字段的值进行切分,"\n# Time: \d+\s+\d+:\d+:\d+"匹配到的内容替换为空。       gsub => [ "sql", "\n# Time: \d+\s+\d+:\d+:\d+", "" ]     }   } }
//此处输出至redis服务器中
output {
    if [type] == "mysql-slow-log" {
        redis {
            host => "%{ES_SEVER}" //此处指向redis服务器地址
            data_type => "list"
            key => "mysql-slow-log"
        }
    }
}
时间: 2024-10-23 09:58:34

logstash收集MySQL慢查询日志的相关文章

ELK logstash 处理MySQL慢查询日志(初步)

写在前面:在做ELK logstash 处理MySQL慢查询日志的时候出现的问题: 1.测试数据库没有慢日志,所以没有日志信息,导致 IP:9200/_plugin/head/界面异常(忽然出现日志数据,删除索引后就消失了) 2.处理日志脚本问题 3.目前单节点 配置脚本文件/usr/local/logstash-2.3.0/config/slowlog.conf[详细脚本文件见最后] output { elasticsearch { hosts => "115.28.3.150:9200

Logstash分析MySQL慢查询日志

最近在使用ELKStack对系统日志进行分析,在网上也有看到有使用logstash的案例,但是发现不能正常解析出来,于是重新花时间去进行正则计算,主要代码如下: input {   file {     type => "mysql-slow"     path => "/var/lib/mysql/slow.log"         start_position => beginning                 sincedb_write

logstash推送mysql慢查询日志

本文将将介绍通过logstash用来收集mysql的慢查询日志,然后推送给elasticsearch,并创建自定义的索引,最终通过kibana进行web展示. 环境介绍: 操作系统版本:centos6.6 64bit Mysql版本: mysql5.6.17与mysql5.1.36 Logstash版本: logstash-2.0.0.tar.gz Elasticsearch版本:elasticsearch-2.1.0.tar.gz Kibana版本:Kibana 4.2.1 Java版本:1.

Anemometer+Percona Toolki实现MySQL慢查询日志可视化功能

最近发现了一个挺好用的MySQL慢查询日志可视化的工具,网上也能找到很多资料,在这里结合自己的实际情况重新整理一下. 1. 实验环境 1.1 系统环境: 操作系统:CentOS 6.5 64位 主机地址:10.0.0.26 主机名:mysql01 mysql版本:mysql-5.6.36 1.2 可视化软件环境: http环境:LAMP 可视化软件:Anemometer-master.zip, percona-toolkit-3.0.11-1.el6.x86_64.rpm, perl-TermR

ELK分析MySQL慢查询日志并生成图像

一.背景 1.MySQL慢查询日志格式: # Time: 181109 15:04:08 # [email protected]: tvpayrcdev[tvpayrcdev] @ [172.16.14.51] Id: 8960747 # Query_time: 35.918265 Lock_time: 0.000141 Rows_sent: 1 Rows_examined: 11699162 SET timestamp=1541747048; select count(*) from trad

Mysql慢查询日志脚本

#!/bin/bash LOG=/diskb/mysql/slowlog/   #定义日志存储路径 DATE=`date +"%Y-%m-%d"`   #定义时间参数 user=root                                 #填写MySQL账户信息 passwd=123456 mysql -u$user -p$passwd -e "set global slow_query_log=0" #停止mysql慢查询日志 mysql -u$us

mysql慢查询日志分析工具mysqlsla

一.介绍    mysqlsla是一个分析mysql慢日志的工具,可以分析出慢查询的原因,包括执行某条sql出现的次数及在slow log数据的百分比.执行时间.等待销的时间等. 公司的数据库有很多慢查询日志,导致的系统的负载很高,而mysql慢查询日志文件内容格式不太好看,经推荐使用mysqlsla:使用方便,操作简单. 二.安装mysqlsla 系统环境 CentOS release 6.6 (Final) 2.6.32-504.el6.x86_64 官网已经不能下载,所需要的文件已在百度云

Mysql慢查询日志过程

原创地址 :http://itlab.idcquan.com/linux/MYSQL/922126.html mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出代码实现中耗费资源的sql语句,对我们程序的优化有很高的参考.本篇主要将慢查询日志的开启,日志分析,这也是优化SQL程序的一般步骤中至关重要的一步. 1.mysql慢查询日志 打开mysql的慢查询日志很简单,只需要在mysql的配置文件里(windows系统是my.ini,linux系统是my.cnf)的[mysqld]下面加

MySQL慢查询日志相关的配置和使用。

MySQL慢查询日志提供了超过指定时间阈值的查询信息,为性能优化提供了主要的参考依据,是一个非常实用的功能,MySQL慢查询日志的开启和配置非常简单,可以指定记录的文件(或者表),超过的时间阈值等就可以记录到慢sql了,实话讲,相比较sqlserver的trace或者扩展事件(虽然此二者的作用并非仅仅如此),MySQL的配置总是给人一种非常清爽的感觉. 1,慢查询日志的打开 正常情况下,只需要在配置文件中增加slow_query_log = 1配置,即打开慢查询日志,未指定slow_query_