云监控最佳实践:自定义监控云数据库MySQL指标

2020-02-13 18:33:17 浏览数 (1)

如何监控云数据库MySQL连接数等运行状态指标

推荐您使用 云监控-自定义监控 !

目前内测阶段免费使用,无需审核,开通服务即用。诚邀您点击 申请页面 参与内测体验!


本文介绍如何使用 Shell 命令 SDK 方式上报云数据库 MySQL 的指标至自定义监控,查看指标并配置告警。

实践背景

定期监控云数据库 MySQL 的关键指标。当这些监控指标触发您设置的告警条件时,发送短信告警。

前提条件

  • 购买了腾讯云 云服务器 CVM 并安装 MySQL 或购买了云数据库 MySQL。
  • 安装 Python 2.7以上环境。

数据上报

步骤1:准备上报环境

安装 Python 语言 SDK:

  • Tencent Cloud SDK 3.0 for Python

步骤2:数据采集授权

在数据库中执行以下代码,进行云数据库中的数据采集授权:

代码语言:txt复制
grant select on *.* to monitor@'x.x.x.x' identified by 'monitor!@#asd';

'x.x.x.x':表示服务器 IP 地址;

*.*:表示的意思是任意数据库下的任意数据表。

步骤3:上报数据

1. 在/usr/local/bin目录下新建如下两个文件:

  • 新建 ToMonitor.py,代码如下:
代码语言:javascript复制
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.monitor.v20180724 import monitor_client, models
import sys,json
try:
SecretId = sys.argv[1]
SecretKey = sys.argv[2]
region = sys.argv[3]
metricList = json.loads(sys.argv[4])
cred = credential.Credential(SecretId, SecretKey)
httpProfile = HttpProfile()
httpProfile.endpoint = "monitor.tencentcloudapi.com"

clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
client = monitor_client.MonitorClient(cred, region , clientProfile)

req = models.PutMonitorDataRequest()
paramList = []
for single in metricList:
for MetricName,metricValue in single.items():
newParams = {}
newParams["MetricName"] = MetricName
newParams["Value"] = int(metricValue)
paramList.append(newParams)
params = '{"Metrics":%s}' %json.dumps(paramList)
req.from_json_string(params)

resp = client.PutMonitorData(req)
print(resp.to_json_string())

except TencentCloudSDKException as err:
print(err)

  • 新建 MySQLStatusToMonitor.sh 文件,代码如下:
代码语言:javascript复制
#!/bin/bash

#需要采集数据的 MySQL 地址
MYSQLHOST="1.1.1.1"
#需要采集数据的 MySQL 端口
MYSQLPORT=3306
#需要采集数据的访问用户名
MYSQLUSER="monitor"
#需要采集数据的 MySQL 访问密码
MYSQLPWD="monitor!@#asdxxxx"
#用户专属的 SecretId
SecretId="xxxxxxxxx"
#用户专属的 SecretKey
SecretKey="xxxxxxxx"
#需要上报到监控系统所属区域
region="ap-guangzhou"

function Log()
{
msg=$1
logType=$2
logFile="./MySQLStatusToMonitor.log"
echo "["`date  "%Y-%m-%d %X"`"]$msg" >> $logFile
}
MYSQLCON="/usr/bin/mysql -h$MYSQLHOST -P$MYSQLPORT -u$MYSQLUSER -p$MYSQLPWD"

#采集
NEEDEDMYSQLSTATUS=`$MYSQLCON -e "show status;"|grep -Ew "Aborted_connects|Innodb_row_lock_current_waits|Uptime"`

#记录相关参数
AbConnections=`echo "$NEEDEDMYSQLSTATUS"|awk '/Aborted_connects/{print $2}'`
InnodbRLCW=`echo "$NEEDEDMYSQLSTATUS"|awk '/Innodb_row_lock_current_waits/{print $2}'`
MYSQLUptime=`echo "$NEEDEDMYSQLSTATUS"|awk '/Uptime/{print $2}'`
Log "uploading Aborted_connects:$AbConnections,Innodb_row_lock_current_waits:$InnodbRLCW,MySQL_uptime:$MYSQLUptime."

#上报到自定义监控
/bin/python ToMonitor.py "$SecretId" "$SecretKey" "$region" '[{"AbConnections":'$AbConnections'},{"InnodbRLCW":'$InnodbRLCW'}, {"MYSQLUptime":'$MYSQLUptime'}]'

代码中:MYSQLHOST、MYSQLPORT、MYSQLUSER、MYSQLPWD、SecretId、SecretKey、Region 字段需根据您的实际情况修改

Region:地域,可查询可用 地域列表。

SecretId 和 SecretKey,请前往 API 密钥管理 获取。

ToMonitor.py 和 MySQLStatusToMonitor.sh 两个 Demo 也可放到其它目录下。本文以放/usr/local/bin为例。

2. 输入 Shell 命令,即可完成监控指标数据持续上报。

代码语言:javascript复制
chmod a x /usr/local/bin/MySQLStatusToMonitor.sh ToMonitor.py
bash MySQLStatusToMonitor.sh
crontab -l > /tmp/cron.bak
echo "* * * * * /usr/local/bin/MySQLStatusToMonitor.sh &" >> /tmp/cron.bak
crontab /tmp/cron.bak

数据查询

数据上报完成后,可以在 指标视图 看到刚才上报的数据。

1. 配置告警和接收告警仅做一个场景举例; 2. 配置云数据库 MySQL 上报过的其它指标配置,请执行下述配置告警中的步骤2-3。

配置告警

场景:定期监控云数据库 MySQL 异常连接数,当异常连接次数大于0时发送短信告警。

1. 确认用户消息通道已验证,可在 CAM 鉴权 页面查看验证情况。

2. 进入自定义监控 指标视图 页面,在指标视图右上角【配置告警】。

3. 根据背景需求配置告警规则,更详细的配置操作可参见 配置告警策略。 如图示例为:云数据库 MySQL 异常连接数大于0时发送短信告警,持续一个统计周期(1分钟),每5分钟告警一次。

接收告警

如果云数据库 MySQL 异常连接数大于0,5分钟后将会收到短信告警,短信内容如下:

代码语言:txt复制
【腾讯云】云监控自定义监控指标告警触发
账号 ID:34xxxxxxxx,昵称:自定义监控
告警详情
告警内容:指标视图 | 云数据库 MySQL 异常连接数大于0
告警对象:Aborted_connects
当前数据:1
APPID:125xxxxxxx
告警策略:视图告警
触发事件:2019-12-09 22:36:00(UTC 08:00)

指标说明

指标中文名

指标英文名

单位

异常连接数

Aborted_connects

行锁等待时间

Innodb_row_lock_current_waits

MySQL 运行时间

MySQL_uptime


扫描二维码,关注腾讯云监控公众号扫描二维码,关注腾讯云监控公众号

0 人点赞