通过阿里云接口获取ecs监控信息并推送到企业微信

阿里云接口获取ecs监控信息并推送到企业微信

一、环境配置

下载python3及pip3
yum install python3*

下载阿里云sdk
pip3 install requests
pip3 install aliyunsdkcms
pip3 install aliyun-python-sdk-cms
pip3 install aliyun-python-sdk-ecs

参考
https://www.alibabacloud.com/help/zh/doc-detail/28182.htm
接口参考
https://help.aliyun.com/document_detail/28619.html?spm=a2c4g.11186623.4.6.7a6a5e5dVfFqGX

https://help.aliyun.com/document_detail/51939.html?spm=a2c4g.11186623.2.25.1f74750egVzpq1

二、脚本

#!/usr/bin/env python
#coding=utf-8

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
import time,json,ast,requests

from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest

date = time.strftime("%Y-%m-%d-%H:%M:%S")

class PUSH_info(object):
    def __init__(self,key,value,where):
        self.key = key
        self.value = value
        self.where = where
        self.client = AcsClient(key,value,where)

    def check_cpu(self):
        request = DescribeMetricLastRequest()
        request.set_accept_format('json')
        request.set_MetricName("cpu_system")
        request.set_Period("60")
        request.set_Namespace("acs_ecs_dashboard")
        response = self.client.do_action_with_exception(request)
        data = str(response,encoding='utf-8')
        datas = json.loads(data)
        Datapoints = ast.literal_eval(datas['Datapoints'][1:-1])
        #print(Datapoints)
        #print(type(Datapoints))
        for k in Datapoints:
            if k['Average'] > 90:
                sms_push('cpu',k['instanceId'],k['Average'])

    def check_disk(self):
        request = DescribeMetricLastRequest()
        request.set_accept_format('json')
        request.set_MetricName("diskusage_utilization")
        request.set_Period("60")
        request.set_Namespace("acs_ecs_dashboard")
        response = self.client.do_action_with_exception(request)
        data = str(response,encoding='utf-8')
        datas = json.loads(data)
        Datapoints = ast.literal_eval(datas['Datapoints'][1:-1])
        #print(Datapoints)
        #print(type(Datapoints))
        for k in Datapoints:
            if k['Average'] > 90:
                sms_push('磁盘',k['instanceId'],k['Average'],k['device'])

    def check_mem(self):
        request = DescribeMetricLastRequest()
        request.set_accept_format('json')
        request.set_MetricName("memory_usedutilization")
        request.set_Period("60")
        request.set_Namespace("acs_ecs_dashboard")
        response = self.client.do_action_with_exception(request)
        data = str(response,encoding='utf-8')
        datas = json.loads(data)
        Datapoints = ast.literal_eval(datas['Datapoints'][1:-1])
        #print(Datapoints)
        #print(type(Datapoints))
        for k in Datapoints:
            if k['Average'] > 90:
                sms_push('内存',k['instanceId'],k['Average'])


def get_ecs_info():
    request = DescribeInstancesRequest()
    request.set_accept_format('json')
    request.add_query_param('RegionId', 'cn-shenzhen')
    request.set_PageSize('100')
    response = client.do_action_with_exception(request)
    data = str(response,encoding='utf-8')
    datas = json.loads(data)
    info = datas['Instances']['Instance']
    lists = []
    for k in info:
        lists.append({"InstanceId":k['InstanceId'],"InstanceName":k['InstanceName'],"PublicIpAddress":k['PublicIpAddress']['IpAddress']}) 
    return lists


def sms_push(pro,ids,value,disk=''):
    for i in get_ecs_info():
        if ids in filters:
            pass
        elif ids in i['InstanceId'] :
            strs = "服务器:%s ip:%s %s %s当前使用已达%s 请注意!!!"%(i['InstanceName'],i['PublicIpAddress'],pro,disk,value)
            #get_sms(strs)
            print(i['InstanceName'],i['PublicIpAddress'],pro,disk,value)



def get_sms(sms):
     headers = {"Content-Type": "text/plain"}
     send_url = ""
     send_data = {
         "msgtype": "markdown",  # 消息类型,此时固定为markdown
         "markdown": {
             "content": "# **提醒:阿里云系统监控处理**<font color=\"warning\"></font>\n" +
                        "#### **请相关系统同事注意,及时跟进!**\n" +
                        "> <font color=\"info\">%s</font> \n"%sms
         }
     }
     res = requests.post(url=send_url, headers=headers, json=send_data)
     print(res.text)


if __name__=="__main__":
    filters = ['']
    key = ''
    value = ''
    where = ''
    push = PUSH_info(key,value,where)
    push.check_cpu()
    push.check_mem()
    push.check_disk()
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值