当前位置: 首页 > news >正文

logstash推送mysql慢查询日志

本文将将介绍通过logstash用来收集mysql的慢查询日志,然后推送给elasticsearch,并创建自定义的索引,最终通过kibana进行web展示。

环境介绍:

操作系统版本:centos6.6 64bit

Mysql版本: mysql5.6.17mysql5.1.36

Logstash版本: logstash-2.0.0.tar.gz

Elasticsearch版本:elasticsearch-2.1.0.tar.gz

Kibana版本:Kibana 4.2.1

Java版本:1.8.0_45

 

一:mysql5.1.36版本

1:配置mysql5.1.36版本慢查询日志,这里为了测试,将查询时间超过0.1s的均记录到慢查询日志中

mysql> show variables like '%slow%';
mysql> show variables like '%long%';

wKiom1Zf4h3hwRsSAABQzxZFlpM360.png

2:配置logstash

# cat /usr/local/logstash/etc/logstach.conf 
input {
  file {
    type => "mysql-slow"
    path => "/mydata/slow-query.log"
    codec => multiline {
      pattern => "^# User@Host:"
      negate => true
      what => "previous"
    }
  }
}
#input节的配置定义了输入的日志类型为mysql慢查询日志类型以及日志路径,采用合并多行数据。negate字段是一个选择开关,可以正向匹配和反向匹配
filter {
  # drop sleep events
  grok {
    match => { "message" => "SELECT SLEEP" }
    add_tag => [ "sleep_drop" ]
    tag_on_failure => [] # prevent default _grokparsefailure tag on real records
  }
  if "sleep_drop" in [tags] {
    drop {}
  }
#filter节的配置定义了过滤mysql查询为sleep状态SQL语句
grok {
match => [ "message", "(?m)^# User@Host: %{USER:user}\[[^\]]+\] @ (?:(?<clienthost>\S*) )?\[(?:%{IP:clientip})?\]\s*# Query_time: %{NUMBER:query_time:float}\s+Lock_time: %{NUMBER:lock_time:float}\s+Rows_sent: %{NUMBER:rows_sent:int}\s+Rows_examined: %{NUMBER:rows_examined:int}\s*(?:use %{DATA:database};\s*)?SET timestamp=%{NUMBER:timestamp};\s*(?<query>(?<action>\w+)\s+.*)\n# Time:.*$" ]
}
 
  date {
    match => [ "timestamp", "UNIX" ]
    remove_field => [ "timestamp" ]
  }
}
#grok节定义了慢查询日志输出的正则切割,这个容易头晕眼花!
output {
 stdout {
 codec => rubydebug {}
}
 elasticsearch { 
 hosts => "192.168.1.226:9200" 
 index => "mysql-server81-%{+YYYY.MM.dd}"
} 
}
#output节定义了输出,这里除了打印到屏幕上之外,还输入到elasticsearch,同时起一个自定义的索引名称

3:启动测试

# /usr/local/logstash/bin/logstash -f /usr/local/logstash/etc/logstach.conf 

wKioL1Zf4xqB8tebAAFfsjKAAVo381.png

# tail -f /mydata/slow-query.log 

wKiom1Zf4tXw7KpzAABc7oIura8872.png

wKiom1Zf4wHjCSXLAACu9og2lg8186.png

wKiom1Zf4wODVhEYAAHZCwYKraA264.png

wKioL1Zf423jbuOHAACbOVrvnsY108.png

二:mysql5.6.17版本

由于mysql5.6.17版本的的slowlog多了一个id字段,所以需要调整grok节的正则配置。

Mysql5.1.36的slowlog

# tail -f /mydata/slow-query.log 
# Time: 151202 17:29:24
# User@Host: root[root] @  [192.168.1.156]
# Query_time: 6.578696  Lock_time: 0.000039 Rows_sent: 999424  Rows_examined: 999424
SET timestamp=1449048564;
select * from users_test;

Mysql5.6.17的slowlog:对比mysql5.1.36版本的慢查询日志输出,多了Id: 84589

# tail -f /mydata/slow-query.log 
# Time: 151202 16:09:54
# User@Host: root[root] @  [192.168.1.156]  Id: 84589
# Query_time: 7.089324  Lock_time: 0.000112 Rows_sent: 1  Rows_examined: 33554432
SET timestamp=1449043794;
select count(*) from t1;

这里顺便说一下,之前还测试了Percona Server 5.5.34版本,发现慢查询日志多了Thread_idSchemaLast_errnoKilled 4个字段。

# tail -f /mydata5.5/slow-query.log 
# User@Host: root[root] @  [192.168.1.228]
# Thread_id: 1164217  Schema: mgr  Last_errno: 0  Killed: 0
# Query_time: 0.371185  Lock_time: 0.000056  Rows_sent: 0  Rows_examined: 0  Rows_affected: 2  Rows_read: 0
# Bytes_sent: 11
SET timestamp=1449105655;
REPLACE INTO  edgemgr_dbcache(id, type, data, expire_time)  VALUES(UNHEX('ec124ee5766c4a31819719c645dab895'), 'sermap', '{\"storages\":{\"sg1-s1\":[{\"download_port\":9083,\"p2p_port\":9035,\"rtmp_port\":9035,\"addr\":\"{\\\"l\\\":{\\\"https://192.168.1.227:9184/storage\\\":\\\"\\\"},\\\"m\\\":{},\\\"i\\\":{\\\"https://192.168.1.227:9184/storage\\\":\\\"\\\"}}\",\"cpu\":6,\"mem\":100,\"bandwidth\":0,\"disk\":0,\"dead\":0}]},\"lives\":{}}', '2016-01-02 09:20:55');

因而5.6.17版本只需要修改logstash.conf配置文件中的grok节内容如下后重启logstash进程即可。

grok {
match => [ "message", "(?m)^# User@Host: %{USER:user}\[[^\]]+\] @ (?:(?<clienthost>\S*) )?\[(?:%{IP:clientip})?\]\s*Id: %{NUMBER:id:int}\s+# Query_time: %{NUMBER:query_time:float}\s+Lock_time: %{NUMBER:lock_time:float}\s+Rows_sent: %{NUMBER:rows_sent:int}\s+Rows_examined: %{NUMBER:rows_examined:int}\s*(?:use %{DATA:database};\s*)?SET timestamp=%{NUMBER:timestamp};\s*(?<query>(?<action>\w+)\s+.*)\n# Time:.*$" ]
}

wKiom1Zf45Cyh9OFAACafD6n1Qk068.png

Kibana日志输出

wKioL1Zf5BagM636AACeCxz_-AA033.png

相关文章:

  • 51cto博客第一篇
  • c语言:将三个数按从大到小输出。
  • 正则与JS中的正则
  • JAVA实现发送电子邮件
  • JS组件系列——表格组件神器:bootstrap table
  • JavaScript数组使用sort排序
  • junit测试时,出现java.lang.IllegalStateException: Failed to load ApplicationContext
  • 我的Android进阶之旅------Android【设置】-【语言和输入法】-【语言】列表中找到相应语言所对应的列表项...
  • BZOJ1075 : [SCOI2007]最优驾车drive
  • SharePoint自动化系列——Create a local user and add to SharePoint
  • iOS 轻量级的数据库leveldb
  • 混合的方式开启服务
  • JSDOM对象控制HTML元素
  • NSObject
  • android 环境搭建
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Less 日常用法
  • Redis字符串类型内部编码剖析
  • 工程优化暨babel升级小记
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 如何在GitHub上创建个人博客
  • 译米田引理
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​如何在iOS手机上查看应用日志
  • ![CDATA[ ]] 是什么东东
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (4)Elastix图像配准:3D图像
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (算法)前K大的和
  • (算法二)滑动窗口
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (一)RocketMQ初步认识
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • **PHP二维数组遍历时同时赋值
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net framework4与其client profile版本的区别
  • .NET 反射 Reflect
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .so文件(linux系统)
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [ 转载 ] SharePoint 资料
  • []串口通信 零星笔记
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用
  • [C/C++]数据结构 栈和队列()
  • [CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解
  • [cogs2652]秘术「天文密葬法」
  • [CTF]php is_numeric绕过
  • [ESP32] 编码旋钮驱动
  • [Java、Android面试]_10_Java中==与equal()方法的区别?重写equal()方法?