微服务轮子项目(14) - 慢查询SQL
2023-09-11 14:15:40 时间
1. 前言
在前面一篇博客《微服务轮子项目(13) - 统一日志中心详解(docker安装部署)》,主要讲解了在Docker下部署ELK,以及各个组件的作用(包括filebeat
)。
本文基于上一篇博客的环境下,讲解慢查询SQL如何配置。
2. 慢查询配置
2.1 MySQL数据库配置
step1: 修改数据库配置,增加慢sql日志
vim /etc/my.cnf
#是否开启慢查询日志
slow_query_log=ON
#日志存放地址
slow_query_log_file=/var/lib/mysql/mysql-slow.log
#慢查询时间(s),这里为了测试所以设置比较小
long_query_time=0.1
step2: 重启数据库
service mysqld restart
step3:登录数据库查询配置信息是否生效
show VARIABLES like '%slow%';
show VARIABLES like 'long_query_time';
2.2 Logstash配置
step1:修改10-syslog.conf
配置,在filter
里增加以下内容
if [fields][docType] == "mysqlslowlogs" {
grok {
match => [
"message", "^#\s+User@Host:\s+%{USER:user}\[[^\]]+\]\s+@\s+(?:(?<clienthost>\S*) )?\[(?:%{IP:clientip})?\]\s+Id:\s+%{NUMBER:id}\n# Query_time: %{NUMBER:query_time}\s+Lock_time: %{NUMBER:lock_time}\s+Rows_sent: %{NUMBER:rows_sent}\s+Rows_examined: %{NUMBER:rows_examined}\nuse\s(?<dbname>\w+);\nSET\s+timestamp=%{NUMBER:timestamp_mysql};\n(?<query_str>[\s\S]*)",
"message", "^#\s+User@Host:\s+%{USER:user}\[[^\]]+\]\s+@\s+(?:(?<clienthost>\S*) )?\[(?:%{IP:clientip})?\]\s+Id:\s+%{NUMBER:id}\n# Query_time: %{NUMBER:query_time}\s+Lock_time: %{NUMBER:lock_time}\s+Rows_sent: %{NUMBER:rows_sent}\s+Rows_examined: %{NUMBER:rows_examined}\nSET\s+timestamp=%{NUMBER:timestamp_mysql};\n(?<query_str>[\s\S]*)",
"message", "^#\s+User@Host:\s+%{USER:user}\[[^\]]+\]\s+@\s+(?:(?<clienthost>\S*) )?\[(?:%{IP:clientip})?\]\n# Query_time: %{NUMBER:query_time}\s+Lock_time: %{NUMBER:lock_time}\s+Rows_sent: %{NUMBER:rows_sent}\s+Rows_examined: %{NUMBER:rows_examined}\nuse\s(?<dbname>\w+);\nSET\s+timestamp=%{NUMBER:timestamp_mysql};\n(?<query_str>[\s\S]*)",
"message", "^#\s+User@Host:\s+%{USER:user}\[[^\]]+\]\s+@\s+(?:(?<clienthost>\S*) )?\[(?:%{IP:clientip})?\]\n# Query_time: %{NUMBER:query_time}\s+Lock_time: %{NUMBER:lock_time}\s+Rows_sent: %{NUMBER:rows_sent}\s+Rows_examined: %{NUMBER:rows_examined}\nSET\s+timestamp=%{NUMBER:timestamp_mysql};\n(?<query_str>[\s\S]*)"
]
}
date {
match => ["timestamp_mysql","yyyy-MM-dd HH:mm:ss.SSS","UNIX"]
}
date {
match => ["timestamp_mysql","yyyy-MM-dd HH:mm:ss.SSS","UNIX"]
target => "timestamp"
}
mutate {
convert => ["query_time", "float"]
convert => ["lock_time", "float"]
convert => ["rows_sent", "integer"]
convert => ["rows_examined", "integer"]
remove_field => "message"
remove_field => "timestamp_mysql"
remove_field => "@version"
}
}
step2: 修改30-output.conf
配置,增加以下内容
if [fields][docType] == "mysqlslowlogs" {
elasticsearch {
hosts => ["localhost"]
manage_template => false
index => "mysql-slowlog-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
2.3 Filebeat配置
修改配置文件filebeat.yml
,在filebeat.inputs
里改为以下内容:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/lib/mysql/mysql-slow.log
fields:
docType: mysqlslowlogs
exclude_lines: ['^\# Time']
multiline:
pattern: '^\# Time|^\# User'
negate: true
match: after
相关文章
- 淘东电商项目(18) -全局异常捕获
- 微服务轮子项目(42) -容器管理平台
- 为你的 项目安装Sql跟踪工具-P6Spy
- 《CUDA高性能并行计算》----1.4 推荐项目
- 《R语言数据挖掘:实用项目解析》——第2章,第2.4节解读分布和变换
- 解决bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符
- sql server 小技巧(4) Sql server 排序时让空值排在最后
- git克隆项目安装依赖报错
- sql server 数据分析优化实战(一)——SQL语句优化
- 浅析SQL中 in 与 exists 用法的区别及其各自执行流程、not in/not exists区别、sql优化应该如何选择in还是exists
- 全球最大单体光伏电站项目一期380兆瓦在宁并网发电
- 怎样使用oracle 的DBMS_SQLTUNE package 来执行 Sql Tuning Advisor 进行sql 自己主动调优
- nuxt项目运行在ie报错
- golang开发需要掌握的核心包以及中间件,涵盖项目的各个领域,值得收藏
- 【SQL Bugs】Caused by: java.sql.SQLSyntaxErrorException: ORA-01789: 查询块具有不正确的结果列数(原因记录)
- SQL Server中用Case When Then多条件判断sql