zabbix通過api監控阿里雲RDS
一.說明
監控阿里雲的RDS可以寫指令碼去用mysql命令登陸獲取,也可以用API獲取(API還按次數收費,前100萬次免費)。
主要用到DescribeMetricLast方法進行監控項資料查詢
通過監控項鍊接,找到對應產品文件
主要是填入這2個值,一個確定產品,一個確定監控項,再通過Dimensions引數查詢指定例項的資訊
安裝核心sdk和雲監控、RDS的sdk
pip3 install aliyun-python-sdk-core
pip3 install aliyun-python-sdk-cms
pip3 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.將模板套用在有指令碼在的那臺機器上即可