mysql慢查询、慢日志监测并发送钉钉告警

使用场景:mysql数据库开启慢日志,记录1s以上的sql语句,每出现新的慢sql时,发送到钉钉告警

思路:不需要分析指标也不需要图形界面的话,可以直接使用脚本实现:监控慢日志文件的状态,当状态发生改变时,截取最新一条日志,发送到钉钉机器人。

实现过程

1.首先确认下自己的mysql设置里开启了慢查询: 

slow_query_log=1                                    # 开启慢日志
slow-query-log-file=/www/server/data/mysql-slow.log # 慢日志路径
long_query_time=1                                   # 慢查询响应时间设置

2.钉钉群添加机器人:

        在群设置里面找到机器人,点击添加机器人

 

 

 添加完成后复制地址

3.脚本实现

 

mysql-slow.log文件是我们想监测的文件

mysql-slow.log.md5:这是慢日志的MD5文件,用来储存慢日志文件的状态

mon-监测文件.sh:通过监测慢日志的MD5状态,当状态与MD5文件不一致时,说明慢日志发生了变化,执行一次dingdingpush.sh,然后生成当前慢日志的MD5文件覆盖旧的MD5文件,等待下次慢日志变化

dingdingpush.sh:截取慢日志最后一条日志,把它发送到钉钉机器人

mon-监测文件.sh脚本:

#!/bin/bash
# $filename 需要监测的文件
# $fmd5 存放文件md5值,用于判断文件是否更改
# $mingling 文件更新后,需要执行的命令(用''单引号包起来)
# 适用场景,修改某配置文件或更新某文件以后自动处理某些事物

filename=/www/server/data/mysql-slow.log        #这个变量就是要监测的慢日志
fmd5=/www/server/data/mysql-slow.log.md5        #这个变量是慢日志的MD5文件
mingling='./dingdingpush.sh'                    #这个变量是我们要执行的命令语句

 # 生成md5验证文件 
 function creatMd5file()                        #这里我们定义了一个方法,名为creatMd5file()
 {                                              #每次调用它都会生成当前慢日志状态的MD5文件
    md5sum -b $filename > $fmd5                 #这里调用了上面的变量,filename和fmd5
 }

 # 判断被监测文件是否存在MD5文件,若没有就执行方法先创建一个
 if [ ! -e $fmd5 ] ; then
    creatMd5file $filename $fmd5
 fi
# 下面是一个死循环,一直检测
 while(true) ; do
    # 检测文件是否修改,$?返回1 表示修改, 0表示未修改
    md5sum -c $fmd5 --status        # 取当前慢日志的MD5状态,对比MD5文件

    if [ $? -gt 0 ] ; then            
        if [ "$mingling" ]; then    # 被修改时执行命令,变量命令在上面有定义
            $mingling
        fi

    creatMd5file $filename $fmd5    # 这里覆盖旧的MD5文件

    fi
    # 每过1秒检测一次
    sleep 1
 done

 dingdingpush.sh脚本:

text=$(tail -n +`grep -n '# Time' mysql-slow.log | tail -1 | awk -F ':' '{print $1}'` mysql-slow.log) #截取最后一条日志sql
data='{"msgtype": "markdown","markdown": {"title":"137数据库","text":"慢查询:'$text' "},"at":{"isAtAll":true}}'
curl --request POST \
     --url 'https://oapi.dingtalk.com/robot/send?access_token=a05a33c1bde6676b5a54f2914c39f6a3cc36c602c41dd0e6dd0619eeb0f820fb' \
     --header 'content-type: application/json' \
     --data "$data"

这里是通过慢日志的格式,取最后一条日志的关键字行号,通过行号截下最新的一条慢日志

把自己的地址和token粘贴上去即可

4.执行

./mon-监测文件.sh &

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MySQL 慢查询日志可以记录执行时间超过指定阈值的 SQL 查询语句,用于帮助 DBA 或开发者监控和优化 SQL 查询性能。 以下是 MySQL 慢查询日志分析的一般步骤: 1. 开启 MySQL 慢查询日志。在 MySQL 配置文件中设置 `slow_query_log` 参数为 `ON`,并指定 `slow_query_log_file` 参数为日志文件路径。 2. 查看慢查询日志。可以使用 `mysqldumpslow` 工具或者其他第三方工具来查看慢查询日志,例如: ``` mysqldumpslow -s t /path/to/slow_query_log_file ``` 上面的命令会按照时间排序并显示执行时间最长的 SQL 查询语句。 3. 分析慢查询语句。对于执行时间较长的 SQL 查询语句,可以进行如下分析: - 检查 SQL 查询语句是否存在索引。可以使用 `EXPLAIN` 命令或者其他第三方工具来查看 SQL 查询语句的执行计划,判断是否存在全表扫描或者索引失效等问题。 - 检查 SQL 查询语句的优化方式。可以考虑对 SQL 查询语句进行重构,使用更优的语法或者查询方式,例如使用 JOIN、子查询等方式来替代多次查询。 - 检查 MySQL 数据库的配置参数。可以根据查询语句的特点来调整 MySQL 数据库的配置参数,例如 `innodb_buffer_pool_size`、`max_connections`、`query_cache_size` 等参数。 4. 优化慢查询语句。根据分析结果,对 SQL 查询语句、MySQL 数据库配置参数等进行优化,提高查询性能。 总之,MySQL 慢查询日志分析需要结合实际情况和经验进行,需要不断地监控和优化,以提高 MySQL 数据库的性能和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值