使用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取值,所以这里就不再往下取值了

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐