pt-query-digest 慢日志监控
2023-09-27 14:25:28 时间
一、安装percona-toolkit,以centos为例
yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm yum -y install percona-toolkit
二、 创建慢日志收集表 mysql_slow_query_review.sql
CREATE TABLE `mysql_slow_query_review` ( `checksum` CHAR(32) NOT NULL, `fingerprint` longtext NOT NULL, `sample` longtext NOT NULL, `first_seen` datetime(6) DEFAULT NULL, `last_seen` datetime(6) DEFAULT NULL, `reviewed_by` varchar(20) DEFAULT NULL, `reviewed_on` datetime(6) DEFAULT NULL, `comments` longtext, `reviewed_status` varchar(24) DEFAULT NULL, PRIMARY KEY (`checksum`), KEY `idx_last_seen` (`last_seen`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `mysql_slow_query_review_history` ( `id` int(11) NOT NULL AUTO_INCREMENT, `hostname_max` varchar(64) NOT NULL, `client_max` varchar(64) DEFAULT NULL, `user_max` varchar(64) NOT NULL, `db_max` varchar(64) DEFAULT NULL, `checksum` CHAR(32) NOT NULL, `sample` longtext NOT NULL, `ts_min` datetime(6) NOT NULL, `ts_max` datetime(6) NOT NULL, `ts_cnt` float DEFAULT NULL, `Query_time_sum` float DEFAULT NULL, `Query_time_min` float DEFAULT NULL, `Query_time_max` float DEFAULT NULL, `Query_time_pct_95` float DEFAULT NULL, `Query_time_stddev` float DEFAULT NULL, `Query_time_median` float DEFAULT NULL, `Lock_time_sum` float DEFAULT NULL, `Lock_time_min` float DEFAULT NULL, `Lock_time_max` float DEFAULT NULL, `Lock_time_pct_95` float DEFAULT NULL, `Lock_time_stddev` float DEFAULT NULL, `Lock_time_median` float DEFAULT NULL, `Rows_sent_sum` float DEFAULT NULL, `Rows_sent_min` float DEFAULT NULL, `Rows_sent_max` float DEFAULT NULL, `Rows_sent_pct_95` float DEFAULT NULL, `Rows_sent_stddev` float DEFAULT NULL, `Rows_sent_median` float DEFAULT NULL, `Rows_examined_sum` float DEFAULT NULL, `Rows_examined_min` float DEFAULT NULL, `Rows_examined_max` float DEFAULT NULL, `Rows_examined_pct_95` float DEFAULT NULL, `Rows_examined_stddev` float DEFAULT NULL, `Rows_examined_median` float DEFAULT NULL, `Rows_affected_sum` float DEFAULT NULL, `Rows_affected_min` float DEFAULT NULL, `Rows_affected_max` float DEFAULT NULL, `Rows_affected_pct_95` float DEFAULT NULL, `Rows_affected_stddev` float DEFAULT NULL, `Rows_affected_median` float DEFAULT NULL, `Rows_read_sum` float DEFAULT NULL, `Rows_read_min` float DEFAULT NULL, `Rows_read_max` float DEFAULT NULL, `Rows_read_pct_95` float DEFAULT NULL, `Rows_read_stddev` float DEFAULT NULL, `Rows_read_median` float DEFAULT NULL, `Merge_passes_sum` float DEFAULT NULL, `Merge_passes_min` float DEFAULT NULL, `Merge_passes_max` float DEFAULT NULL, `Merge_passes_pct_95` float DEFAULT NULL, `Merge_passes_stddev` float DEFAULT NULL, `Merge_passes_median` float DEFAULT NULL, `InnoDB_IO_r_ops_min` float DEFAULT NULL, `InnoDB_IO_r_ops_max` float DEFAULT NULL, `InnoDB_IO_r_ops_pct_95` float DEFAULT NULL, `InnoDB_IO_r_ops_stddev` float DEFAULT NULL, `InnoDB_IO_r_ops_median` float DEFAULT NULL, `InnoDB_IO_r_bytes_min` float DEFAULT NULL, `InnoDB_IO_r_bytes_max` float DEFAULT NULL, `InnoDB_IO_r_bytes_pct_95` float DEFAULT NULL, `InnoDB_IO_r_bytes_stddev` float DEFAULT NULL, `InnoDB_IO_r_bytes_median` float DEFAULT NULL, `InnoDB_IO_r_wait_min` float DEFAULT NULL, `InnoDB_IO_r_wait_max` float DEFAULT NULL, `InnoDB_IO_r_wait_pct_95` float DEFAULT NULL, `InnoDB_IO_r_wait_stddev` float DEFAULT NULL, `InnoDB_IO_r_wait_median` float DEFAULT NULL, `InnoDB_rec_lock_wait_min` float DEFAULT NULL, `InnoDB_rec_lock_wait_max` float DEFAULT NULL, `InnoDB_rec_lock_wait_pct_95` float DEFAULT NULL, `InnoDB_rec_lock_wait_stddev` float DEFAULT NULL, `InnoDB_rec_lock_wait_median` float DEFAULT NULL, `InnoDB_queue_wait_min` float DEFAULT NULL, `InnoDB_queue_wait_max` float DEFAULT NULL, `InnoDB_queue_wait_pct_95` float DEFAULT NULL, `InnoDB_queue_wait_stddev` float DEFAULT NULL, `InnoDB_queue_wait_median` float DEFAULT NULL, `InnoDB_pages_distinct_min` float DEFAULT NULL, `InnoDB_pages_distinct_max` float DEFAULT NULL, `InnoDB_pages_distinct_pct_95` float DEFAULT NULL, `InnoDB_pages_distinct_stddev` float DEFAULT NULL, `InnoDB_pages_distinct_median` float DEFAULT NULL, `QC_Hit_cnt` float DEFAULT NULL, `QC_Hit_sum` float DEFAULT NULL, `Full_scan_cnt` float DEFAULT NULL, `Full_scan_sum` float DEFAULT NULL, `Full_join_cnt` float DEFAULT NULL, `Full_join_sum` float DEFAULT NULL, `Tmp_table_cnt` float DEFAULT NULL, `Tmp_table_sum` float DEFAULT NULL, `Tmp_table_on_disk_cnt` float DEFAULT NULL, `Tmp_table_on_disk_sum` float DEFAULT NULL, `Filesort_cnt` float DEFAULT NULL, `Filesort_sum` float DEFAULT NULL, `Filesort_on_disk_cnt` float DEFAULT NULL, `Filesort_on_disk_sum` float DEFAULT NULL, `Bytes_sum` float DEFAULT NULL, `Bytes_min` float DEFAULT NULL, `Bytes_max` float DEFAULT NULL, `Bytes_pct_95` float DEFAULT NULL, `Bytes_stddev` float DEFAULT NULL, `Bytes_median` float DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY (checksum, ts_min, ts_max), KEY `idx_hostname_max_ts_min` (`hostname_max`,`ts_min`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
三、部署脚本
#!/bin/bash DIR="$( cd "$( dirname "$0" )" && pwd )" cd $DIR #配置archery数据库的连接地址 monitor_db_host="127.0.0.1" monitor_db_port=3306 monitor_db_user="root" monitor_db_password="123456" monitor_db_database="archery" #实例慢日志位置 slowquery_file="/home/mysql/log_slow.log" pt_query_digest="/usr/bin/pt-query-digest" #实例连接信息 hostname="mysql_host:mysql_port" # 和archery实例配置内容保持一致,用于archery做筛选 #获取上次分析时间,初始化时请删除last_analysis_time_$hostname文件,可分析全部日志数据 if [ -s last_analysis_time_$hostname ]; then last_analysis_time=`cat last_analysis_time_$hostname` else last_analysis_time='1000-01-01 00:00:00' fi #收集日志 #RDS需要增加--no-version-check选项 $pt_query_digest \ --user=$monitor_db_user --password=$monitor_db_password --port=$monitor_db_port \ --review h=$monitor_db_host,D=$monitor_db_database,t=mysql_slow_query_review \ --history h=$monitor_db_host,D=$monitor_db_database,t=mysql_slow_query_review_history \ --no-report --limit=100% --charset=utf8 \ --since "$last_analysis_time" \ --filter="\$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"$hostname\" and \$event->{client}=\$event->{ip} " \ $slowquery_file > /tmp/analysis_slow_query.log echo `date +"%Y-%m-%d %H:%M:%S"`>last_analysis_time_$hostname
相关文章
- Linux服务器性能监控利器-Nmon实战
- 第十二章 使用日志监控 - 日志监视器错误和陷阱
- 136 日志监控告警系统案例(代码实现)
- 课时 12:可观测性-监控与日志(莫源)
- Linux 系统中使用 logwatch 监控日志文件
- 测试并发应用(四)监控Fork/Join池
- 监控 Linux 容器性能的命令行神器
- Postgres 日志监控:阻塞,死锁,Checkpoint 优化(译)
- Zabbix监控ActiveMQ
- 建设DevOps统一运维监控平台,先从日志监控说起
- nagios+logstash实时监控java日志(一)
- web文件管理系统和日志实时监控工具
- [运维]ELK实现日志监控告警
- 服务器监控(包括性能指标与web应用程序)
- zabbix监控日志文件
- zabbix 部署 jmx 监控tomcat
- Kafka监控工具KafkaOffsetMonitor配置及使用
- Nginx编译安装+监控模块Nginx-module-vts
- 四步搞定Zabbix 日志文件监控
- linux监控下几个系统工具
- SpringBoot整合RedisTemplate实现缓存信息监控
- Qt编写安防视频监控系统19-日志查询
- Qt编写气体安全管理系统5-数据监控
- Qt编写安防视频监控系统3-通道交换
- Qt编写视频监控画面分割界面(开源)
- c 语言写的高级Oracle®数据库调优及监控工具
- kafka生产者性能监控:Monitor Kafka Producer for Performance
- 日志监控系统中,大批量查询mysql方案
- 浅析PM2的十个实用功能:自动保存、自定义日志文件、设置内存限制、查看进程信息详细、监控所有进程、使用SourceMap定位错误位置、监听目录文件变化自动重启、4种失败重启策略(零延迟高可用)、命名空间对服务归类、内置http服务器
- 一步一步搭建前端监控系统:如何将网页截图上报?
- ZABBIX监控原理