MySQL慢日志监控脚本实例剖析

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:

      公司线上的 MySQL 慢日志,之前一直没有做好监控。趁着上周空闲,我就把监控脚本写了下,今天特地把代码发出来与51博友分享一下。

       针对脚本的注解和整体构思,我会放到脚本之后为大家详解。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/bin/bash
#
# 本脚本用来在指定频率内监控 MySQL 慢日志的变化,并在发生增长时及时报警
# Written by sunsky
# Mail : 274546888@qq.com
# Date : 2014-11-17 10:00:00
#
 
 
MON_FILE= "$2"    # 指定所要监控的脚本路径
SEC=60           # 指定所要监控的频率,即间隔多久去查看一次
MON_POINT_FILE= /tmp/mon_mysql_slow .point   # 指定MySQL慢日志的监控点存放的路径
DIFF_MON_FILE= /tmp/mon_mysql_slow .log      # 指定在监控频率内增加的MySQL慢日志信息存放路径
ADMIN_MAIL=274546888@qq.com                # 指定发送给哪个管理员
 
function  USAGE {
     echo  -e  "\033[31m脚本名称: \033[37m"
     echo  "    $0"
     echo  -e  "\033[31m语法结构: \033[37m"
     echo  "    $0 {start|stop|restart} MySQL慢日志文件路径"
     echo  -e  "\033[31m使用范例: \033[37m"
     echo  "    $0 start /usr/local/mysql/log/mysql_slow.log"
     echo  "    $0 stop"
     echo  "    $0 restart /usr/local/mysql/log/mysql_slow.log"
     echo  -e  "\033[31m注意事项: \033[37m"
     echo  "    1. 除了stop操作,start和restart操作时,\$2 参数不能为空"
     echo  "    2. \$2 参数指定的文件必须存在"
     exit  2
}
 
function  start {
     echo  "MySQL慢日志监控进程已经启动,监控文件为 $MON_FILE ,监控频率为 ${SEC}s一次."
     while  :
     do
         [ -f $MON_POINT_FILE ] ||  echo  0 > $MON_POINT_FILE
         NEW_POINT=$( awk  'END{print NR}'  $MON_FILE)
         OLD_POINT=$(<$MON_POINT_FILE)
         [[ -z $OLD_POINT ]]&&OLD_POINT=0
         SUM_POINT0=$(($NEW_POINT-$OLD_POINT))
         SUM_POINT=${SUM_POINT0 #-}
         sed  -n  "$OLD_POINT,${NEW_POINT}p"  $MON_FILE > $DIFF_MON_FILE
         if  [[ -s $DIFF_MON_FILE ]]; then
             sed  -i  '1i 本次新增慢日志 ' $SUM_POINT ' 条'   $DIFF_MON_FILE
             mail -s  "[警告] 服务器 $(hostname) 产生 MySQL 慢日志 $SUM_POINT 条"  $ADMIN_MAIL < $DIFF_MON_FILE
             > $DIFF_MON_FILE
             echo  $NEW_POINT > $MON_POINT_FILE
         fi
         sleep  ${SEC}s
     done
}
 
function  stop {
         if  [[ -n ` ps  -ef| awk  '$0~"mon_mysql_slow_log.sh"{print $2}' ` ]];
             then
                 for  PID  in  ` ps  -ef| awk  '$0~"mon_mysql_slow_log.sh"{print $2}' `;
                        do
                            [[ $PID != $$ ]] &&  kill  -9 $PID >&  /dev/null
                        done
             else
                 echo  '目前暂无MySQL慢日志监控进程'
                 exit  0
         fi
         echo  'MySQL慢日志监控进程已经停止运行'
}
 
function  restart {
         stop
         start &
}
 
if  [[ $1 == stop ]]
     then
         :
     else
         [[ $2 < 3 ]] && USAGE
         [[ ! -f $2 ]] && USAGE
fi
 
case  $1  in
     start)
         start &
         ;;
     stop)
         stop
         ;;
     restart)
         MON_FILE=$2
         restart
         ;;
     *)
         USAGE
         ;;
esac

      OK!

       以上就是脚本的全部内容。整个脚本由四个主函数构成。针对每个函数的作用,我这里做下介绍:

1
2
3
4
USAGE    # 该函数负责提示用户如何正确使用该脚本
start    # 该函数负责启动脚本
stop     # 该函数负责停止监控脚本
restart  # 该函数负责重启监控脚本

       下面附上脚本的使用效果图:

wKiom1RpXvbQT11mAANgpoABdRc407.jpg

      脚本的整个思路就是,通过while :;do statement;done启一个死循环,然后在死循环里面通过 sleep 来控制死循环的循环间隔。在指定的循环间隔内,通过取MySQL慢日志的长度作为一个记录点,然后在下一个循环到来时,通过比对上一个记录点来得出,日志是否有变化。如果有变化,就通过计算记录点的差值来得出增长值。通过增长值来获取到增长的这部分日志,然后通过mail发送到指定的管理员邮箱。

      这里展示下发送出来的邮件:

wKioL1RpaCmDwmdoAADNd7VSm3c747.jpg

      OK!其它的一看就懂,这里就不废话了。

      本文到此结束,希望能对51博友有所帮助!










本文转自 aaao 51CTO博客,原文链接:http://blog.51cto.com/nolinux/1577326,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
15天前
|
监控 关系型数据库 MySQL
《MySQL 简易速速上手小册》第7章:MySQL监控和日志分析(2024 最新版)
《MySQL 简易速速上手小册》第7章:MySQL监控和日志分析(2024 最新版)
36 3
|
5天前
|
分布式计算 DataWorks 关系型数据库
DataWorks操作报错合集之在DataWorks中设置了一个任务节点的调度时间,并将其发布到生产环境,但到了指定时间(例如17:30)却没有产生运行实例和相关日志如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
20 0
|
4天前
|
Prometheus 监控 Cloud Native
【Go语言专栏】Go语言中的日志记录与监控
【4月更文挑战第30天】Go语言在软件开发和运维中扮演重要角色,提供灵活的日志记录机制和与多种监控工具的集成。内置`log`包支持基本日志记录,而第三方库如`zap`、`zerolog`和`logrus`则扩展了更多功能。监控方面,Go应用可与Prometheus、Grafana、Jaeger等工具配合,实现系统指标收集、可视化和分布式追踪。健康检查通过HTTP端点确保服务可用性。结合日志和监控,能有效提升Go应用的稳定性和性能。
|
4天前
|
分布式计算 DataWorks 关系型数据库
DataWorks操作报错合集之DataWorks集成实例绑定到同一个vpc下面,也添加了RDS的IP白名单报错:数据源配置有误,请检查,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
18 0
|
4天前
|
DataWorks 关系型数据库 MySQL
DataWorks产品使用合集之在DataWorks中,如何通过PolarDB for MySQL来查看binlog日志
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
15 1
|
5天前
|
存储 监控 关系型数据库
PHP编写的电脑监控软件:用户登录日志记录与分析
使用PHP编写简单但功能强大的电脑监控软件,记录用户登录日志并进行分析。代码示例展示了如何获取并存储用户IP地址和登录时间到数据库,然后进行登录数据的分析,如计算登录频率和常见登录时间。此外,还介绍了如何通过定时任务自动将监控数据提交到网站,以便实时监控用户活动,提升系统安全性和稳定性。
19 0
|
5天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理策略
【4月更文挑战第30天】 在微服务架构日益普及的当下,容器化技术与编排工具如Kubernetes成为了运维领域的重要话题。有效的监控和日志管理对于保障系统的高可用性和故障快速定位至关重要。本文将探讨在Kubernetes环境中实施监控和日志管理的最佳实践,包括选用合适的工具、部署策略以及如何整合这些工具来提供端到端的可见性。我们将重点讨论Prometheus监控解决方案和EFK(Elasticsearch, Fluentd, Kibana)日志管理堆栈,分析其在Kubernetes集群中的应用,并给出优化建议。
|
5天前
|
DataWorks NoSQL 关系型数据库
DataWorks操作报错合集之在使用 DataWorks 进行 MongoDB 同步时遇到了连通性测试失败,实例配置和 MongoDB 白名单配置均正确,且同 VPC 下 MySQL 可以成功连接并同步,但 MongoDB 却无法完成同样的操作如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
22 1
|
5天前
|
SQL 监控 关系型数据库
【MySQL学习】MySQL的慢查询日志和错误日志
【MySQL学习】MySQL的慢查询日志和错误日志
|
7天前
|
关系型数据库 MySQL
MySQL基础(二:常用数据类型及MySQL创建过程实例)
MySQL基础(二:常用数据类型及MySQL创建过程实例)
MySQL基础(二:常用数据类型及MySQL创建过程实例)