1. 程式人生 > 其它 >zabbix通過api監控阿里雲RDS

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.將模板套用在有指令碼在的那臺機器上即可

本文版權歸作者所有,歡迎轉載,請務必新增原文連結。