使用Python走阿里云API获取ECS相关监控信息,然后用在Zabbix监控上。
一、先安装需要的模块
# pip install aliyunsdkcore
# pip install aliyunsdkecs
# pip install aliyunsdkcms
二、获取SLB实例,用于Zabbix上自动发现
#!/bin/python
#coding=utf-8
# 获取ecs 所有实例的详细信息
# discovery_ecs.py
from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526 import DescribeInstancesRequest
import json
Id = 'xxx'
Secret = 'xxx'
RegionId = 'cn-shenzhen'
clt = client.AcsClient(Id,Secret,RegionId)
request = DescribeInstancesRequest.DescribeInstancesRequest();
request.set_accept_format('json')
response = json.loads(clt.do_action_with_exception(request), encoding='utf-8')
# print(response)
InstanceIdList = []
InstanceIdDict = {}
ZabbixDataDict = {}
for i in response['Instances']['Instance']:
InstanceIdDict['{#INSTANCEID}'] = i['InstanceId']
InstanceIdList.append(InstanceIdDict)
ZabbixDataDict["data"] = InstanceIdList
print(ZabbixDataDict)
三、采集SLB实例上的各种监控指标数据
#!/bin/python
#coding=utf-8
# check_ecs.py
# ecs监控指标信息
import json
import sys
import time
import datetime
from aliyunsdkcore import client
from aliyunsdkcms.request.v20180308 import QueryMetricListRequest # 查询一段时间的
from aliyunsdkcms.request.v20180308 import QueryMetricLastRequest # 查询最新的一条记录
Id = 'xxx'
Secret = 'xxx'
RegionId = 'cn-shenzhen'
clt = client.AcsClient(Id,Secret,RegionId)
def getMetriceData(instanceId,metric):
request = QueryMetricLastRequest.QueryMetricLastRequest()
request.set_accept_format('json')
request.set_Project('acs_ecs_dashboard')
request.set_Metric(metric)
request.set_Dimensions("{'instanceId':'%s'}" % instanceId)
request.set_Period('60')
response = clt.do_action_with_exception(request)
return json.loads(response)
instanceId = sys.argv[1]
metric = sys.argv[2]
if metric == "CPUUtilization":
CPUUtilization = getMetriceData(instanceId,"CPUUtilization")
print(CPUUtilization)
elif metric == "DiskReadIOPS": # 系统磁盘读IOPS
DiskReadIOPS = getMetriceData(instanceId,"DiskReadIOPS")
elif metric == "DiskWriteIOPS": # 系统磁盘写IOPS
DiskReadIOPS = getMetriceData(instanceId,"DiskWriteIOPS")
elif metric == "cpu_idle": # 当前空闲CPU百分比
DiskReadIOPS = getMetriceData(instanceId,"cpu_idle")
# 剩下的大部分都可用zabbix agent取值,所以这里就不再往下取值了