目录
一.说明
监控阿里云的RDS可以写脚本去用mysql命令登陆获取,也可以用API获取(API还按次数收费,前100万次免费)。
主要用到DescribeMetricLast方法进行监控项数据查询
通过监控项链接,找到对应产品文档
主要是填入这2个值,一个确定产品,一个确定监控项,再通过Dimensions参数查询指定实例的信息
安装核心sdk和云监控、RDS的sdkpip3 install aliyun-python-sdk-corepip3 install aliyun-python-sdk-cmspip3 install aliyun-python-sdk-rds
二.脚本
1.根据api获取rds的实例列表,生成json格式的内容
auto_rds.sh
#!/usr/bin/python3
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkrds.request.v20140815.DescribeDBInstancesRequest import DescribeDBInstancesRequest
#秘钥
aliyun_user_ak = \'xxxxxxxxxxxxxxxxx\'
aliyun_user_sk = \'xxxxxxxxxxxxxxxxxxxxxxxxx\'
region_id = \'cn-beijing\'
client = AcsClient(ak=aliyun_user_ak, secret=aliyun_user_sk, region_id=region_id, timeout=300)
rds_list = []
request = DescribeDBInstancesRequest()
request.set_accept_format(\'json\')
request.set_InstanceNetworkType("VPC")
request.set_VpcId("vpc-2ze0w06g138ax9rh7aj2e")
response = client.do_action_with_exception(request)
rds_info = json.loads(response)
for i in range(len(rds_info["Items"]["DBInstance"])):
rds_id = rds_info["Items"]["DBInstance"][i]["DBInstanceId"]
rds_list += [{\'{#RDSID}\':rds_id}]
print(json.dumps({\'data\':rds_list},sort_keys=True,indent=4,separators=(\',\',\':\')))
2.根据api传入RDS的id和键值来获取信息
测试:./rds_info.py rm-2zem2w8dlem15e49s ConnectionUsage
rds_info.py
#!/usr/bin/python3
import datetime, json, sys, ast
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkcms.request.v20190101.DescribeMetricLastRequest import DescribeMetricLastRequest
#秘钥
aliyun_user_ak = \'xxxxxxxxxxxxxxxxxxxxxxx\'
aliyun_user_sk = \'xxxxxxxxxxxxxxxxxxxxxxxxxxx\'
region_id = \'cn-beijing\'
client = AcsClient(ak=aliyun_user_ak, secret=aliyun_user_sk, region_id=region_id, timeout=300)
nowtime = datetime.datetime.now()
stmp_time = nowtime - datetime.timedelta(minutes=4)
etmp_time = nowtime - datetime.timedelta(minutes=3)
start_time = stmp_time.strftime(\'%Y-%m-%d %H:%M:%S\') #开始时间
end_time = etmp_time.strftime(\'%Y-%m-%d %H:%M:%S\') #结束时
request = DescribeMetricLastRequest()
request.set_accept_format(\'json\')
request.set_MetricName(sys.argv[2])
request.set_Period("60")
request.set_StartTime(start_time)
request.set_EndTime(end_time)
request.set_Dimensions("[{\"instanceId\":%s}]" %(sys.argv[1]))
request.set_Namespace("acs_rds_dashboard")
response = client.do_action_with_exception(request)
item_info = json.loads(response)
item_str = item_info["Datapoints"]
item_str = item_str.lstrip(\'[\') #字符串去掉两边[]
item_str = item_str.rstrip(\']\')
item_dict = json.loads(item_str)
#item_dict = ast.literal_eval(item_str)
if item_info["Code"] == "200":
print(item_dict["Average"])
else:
print(item_info)
三.zabbix配置
1.修改配置文件,添加脚本位置vim /etc/zabbix/zabbix_agentd.d/userparams.conf
#rds-api
UserParameter=auto_rds,/usr/bin/python3 /etc/zabbix/script/rdsapi/auto_rds.py
UserParameter=rds_info[*],/usr/bin/python3 /etc/zabbix/script/rdsapi/rds-info.py $1 $2
重启service zabbix-agent restart
四.网页配置
1.修改配置文件重启服务vim /etc/zabbix/zabbix_agentd.d/userparams.conf
UserParameter=auto_rds,/usr/bin/python3 /etc/zabbix/script/rdsapi/auto_rds.py
UserParameter=rds_info[*],/usr/bin/python3 /etc/zabbix/script/rdsapi/rds-info.py $1 $2
2.通过客户端命令来查看是否可以获取到值zabbix_agentd -t rds_info[rm-2ze2g49593rz06j8s,CpuUsage]
3.添加自动发现规则
4.监控项原型,{#RDSID}是json里定义的,rds_info[{#RDSID},MySQL_IbufUseRatio],类型浮点数
5.添加触发器
6.将模板套用在有脚本在的那台机器上即可