pg慢SQL告警企业微信

配置DB_LIST.txt数据库链接信息


内容格式:数据库名称=数据库IP地址=用户名=密码=端口号
    例:testjyz=192.168.1.1=test=jyz123456=5432

编写脚本 slowsql.sh


#!/bin/bash
wx(){
   curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=*************************' \
   -H 'Content-Type: application/json' \
   -d '
   {
        "msgtype": "text",
        "text": {
            "content": "'${1}'"
        }
   }'
}


date1=`date "+%Y-%m-%d %H:%M:%S"`
for i in `cat DB_LIST.txt`
do
MYDATA=`echo ${i}|awk -F "=" '{print $1}'`
DBHOST=`echo ${i}|awk -F "=" '{print $2}'`
DBUSER=`echo ${i}|awk -F "=" '{print $3}'`
DBPASSWORD=`echo ${i}|awk -F "=" '{print $4}'`
DBPORT=`echo ${i}|awk -F "=" '{print $5}'`
##数据库查询
PGPASSWORD=${DBPASSWORD} psql -U ${DBUSER} -h ${DBHOST} -p ${DBPORT} -c "SELECT usename,client_addr,round(EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - LEAST (query_start, xact_start)))) AS runtime,datname,query FROM  pg_stat_activity where state <> 'idle' and round(EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - LEAST (query_start, xact_start))))>1  order by runtime desc limit 5;" > sql_${MYDATA}.txt 
sed -i '/^[  ]*$/d' sql_${MYDATA}.txt
sed -i "1,2d" sql_${MYDATA}.txt
NUM=`cat sql_${MYDATA}.txt|grep -v rows|wc -l`
USER=`cat sql_${MYDATA}.txt|grep -v row|awk -F "|" '{print $1}'|sed 's/ //g'`
HOST=`cat sql_${MYDATA}.txt|awk -F "|" '{print $2}'|sed 's/ //g'`
TIME=`cat sql_${MYDATA}.txt|awk -F "|" '{print $3}'|sed 's/ //g'`
DB=`cat sql_omp.txt|awk -F "|" '{print $4}'|sed 's/ //g'`
sed -i 's/+//g' sql_${MYDATA}.txt
SQL_ALL=`cat sql_${MYDATA}.txt|awk -F "|" '{print $5}'`
PGPASSWORD=${DBPASSWORD} psql -U ${DBUSER} -h ${DBHOST} -p ${DBPORT} -c "explain ${SQL_ALL}" > explain_sql_${MYDATA}.txt

SQL_ALL_S=`echo ${SQL_ALL}|sed 's/ /~/g'|sed 's/=//g'`
sed -i "1,2d" explain_sql_${MYDATA}.txt
INFO_ALL="[${date1}],大于100s慢查询${NUM}次其中最长为${TIME}秒,用户${USER},主机${HOST},数据库${DB},索引类型${SQL_EXPLAIN_TYPE},POSSIBLE_KEYS为${SQL_EXPLAIN_POSSIBLE_KEYS},KEY为${SQL_EXPLAIN_KEYS},sql为:${SQL_ALL_S}"
INFO=`echo ${INFO_ALL}|sed 's/ /~/g'|sed "s/\"/'/g"`
echo -e ${INFO}
echo ${NUM}
if [ ${NUM} -gt 0 ]; then
wx ${INFO}
fi
done
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值