侧边栏壁纸
博主头像
背锅小王子博主等级

我从事运维工作有十年之久,主要从事云原生相关的工作,对k8s、devops、servicemesh、可观察性等较为熟悉!

  • 累计撰写 59 篇文章
  • 累计创建 64 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

使用Slack来告警AWS RDS慢查询SQL

背锅小王子
2023-03-20 / 0 评论 / 0 点赞 / 185 阅读 / 484 字
温馨提示:
本文最后更新于 2023-03-20,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1、需求说明

因业务发展需要,需要将aws rds的慢查询日志统计出来,发送给开发来处理

2、rds慢查询设置

在aws的rds中开启慢查询,并且能够直接在提控制台Cloudwatch里查询,需要配置rds的配置文件如下:

slow_query_log:1
general_log:1
long_query_time:1
log_output option:FILE 

3、安装awslogs

因为aws自带的工具要做到实时告警比较复杂,所以我们采用开源的方案awslogs来处理

安装awslogs

pip install awslogs

4、配置aws权限

awslogs运行权限包含在CloudWatchLogsReadOnlyAccess AWS 托管权限中,具体如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "logs:Describe*",
                "logs:Get*",
                "logs:List*",
                "logs:StartQuery",
                "logs:StopQuery",
                "logs:TestMetricFilter",
                "logs:FilterLogEvents"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

5、python任务

创建一个python任务,来执行获取clouwatch里面的rds慢查询,代码如下:

import os
import json
import requests

db = ""
sql = ""
time = ""

# 每分钟获取一次cloudwatch中rds慢查询的日志
os.system("/usr/local/bin/awslogs get /aws/rds/instance/xxxx/slowquery --start='1min ago' > /tmp/mysql-slowlog.txt")

with open("/tmp/mysql-slowlog.txt") as f:
    f = f.readlines()

for line in f:
    if line.startswith("/aws/rds"):
        db=line.split("/")[4]
    if line.startswith("# Query_time"):
        time=line.split(" ")[2]
    if line.startswith("select"):
        sql=line

        content="告警环境: Prod\n告警团队: DBA\n告警DB: " + db + "\n查询耗时: " + time + "\n告警SQL: \n" + sql
        payload={"channel": "#mysql-slowlog", "username": "webhookbot", "text": content}
        data = json.dumps(payload).encode("utf8")
        url="你的slack webhook地址"
        response = requests.post(url=url,data=data)
        print(response)

6、创建定时任务

# 每分钟执行一次获取rds慢查询
*1 * * * * python3 /script/mysql_slowlog_alert.py > /dev/null 2>&1
0

评论区