Zabbix使用Python监控阿里云SLB

使用Python走阿里云API获取SLB相关监控信息,然后用在Zabbix监控上。

一、先安装需要的模块

# pip install aliyunsdkcore
# pip install aliyunsdkslb
# pip install aliyunsdkcms

二、获取SLB实例,用于Zabbix上自动发现

# /usr/bin/python
# coding:utf-8
# discovery_slb.py

import json
import sys
import time
import datetime
from aliyunsdkcore import client
from aliyunsdkslb.request.v20140515 import DescribeLoadBalancersRequest
from aliyunsdkslb.request.v20140515 import  DescribeLoadBalancerAttributeRequest


Id = 'xxx'
Secret = 'xxx'
RegionId = 'cn-shenzhen'

LoadBalancersList = []
LoadBalancersDict = {}
ZabbixDataDict = {}

clt = client.AcsClient(Id, Secret, RegionId)
request = DescribeLoadBalancersRequest.DescribeLoadBalancersRequest();
request.set_accept_format('json')
response = json.loads(clt.do_action_with_exception(request), encoding='utf-8')

for i in response['LoadBalancers']['LoadBalancer']:
    LoadBalancersDict["{#LOADBALANCERID}"] = i['LoadBalancerId']
    LoadBalancersDict["{#LOADBALANCERVIP}"] = i['Address']
    LoadBalancersList.append(LoadBalancersDict)

ZabbixDataDict['data'] = LoadBalancersList
print(ZabbixDataDict)

'''
result:
{'data': [{'{#LOADBALANCERID}': 'lb-wz9qncudq2wwlely1g3ar', '{#LOADBALANCERVIP}': '120.78.29.236'}, \
   {'{#LOADBALANCERID}': 'lb-wz9qncudq2wwlely1g3ar', '{#LOADBALANCERVIP}': '120.78.29.236'}]}
'''

三、采集SLB实例上的各种监控指标数据

#!/bin/python
#coding=utf-8
# slb监控指标信息
# check_slb.py

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)

#只获取三分钟内的数据(有时值是三个有时是两个,但是我只取最后一个)
start_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()-180))
timestamp_start = int(time.mktime(time.strptime(start_time, "%Y-%m-%d %H:%M:%S")))*1000

def getMetriceData(metrice,slbid,slbip,slbport):

    request = QueryMetricLastRequest.QueryMetricLastRequest()
    request.set_accept_format('json')
    #两个参数按照预设值设定,参见参考资料描述
    request.set_Project('acs_slb_dashboard')
    request.set_Metric(metrice) 
    request.set_StartTime(timestamp_start)

    #从系统输入参数获取IP地址和SLB-ID
    request.set_Dimensions({'instanceId':slbid}) #'port':slbport,'vip':slbip})
    request.set_Period('60')
    result = clt.do_action_with_exception(request)
    datadict = json.loads(result)
    res = datadict['Datapoints'] # [-2]['Average']
    
    return json.loads(res)[0]['Average']


Type = sys.argv[1]    
Slb_Id = sys.argv[2]
Slb_IP = sys.argv[3]
Slb_Port = sys.argv[4]

if (Type == 'UnhealthyServerCount'): # 后端异常实例个数
    res = getMetriceData(Type,Slb_Id,Slb_IP,Slb_Port)
    print(res)
elif (Type == 'TrafficRXNew'): # 端口每秒流入数据量 bit/s
    res = getMetriceData(Type,Slb_Id,Slb_IP,Slb_Port)
    print(res)
elif (Type == 'TrafficTXNew'): # 端口每秒流出数据量 bit/s
    res = getMetriceData(Type,Slb_Id,Slb_IP,Slb_Port)
    print(res)
elif (Type == 'ActiveConnection'):  # 端口当前活跃连接数
    res = getMetriceData(Type,Slb_Id,Slb_IP,Slb_Port)
    print(res)
elif (Type == 'InactiveConnection'): # 端口当前非活跃连接数,既访问SLB后未断开的空闲的连接
    res = getMetriceData(Type,Slb_Id,Slb_IP,Slb_Port)
    print(res)
elif (Type == 'MaxConnection'):  # 端口当前并发连接数
    res = getMetriceData(Type,Slb_Id,Slb_IP,Slb_Port)
    print(res)
elif (Type == 'InstanceActiveConnection'): # 实例每秒活跃连接数
    res = getMetriceData(Type,Slb_Id,Slb_IP,Slb_Port)
    print(res)
elif (Type == 'InstanceDropConnection'): # 实例每秒丢失连接数
    res = getMetriceData(Type,Slb_Id,Slb_IP,Slb_Port)
    print(res)
elif (Type == 'InstanceMaxConnection'): # 实例每秒最大并发连接数
    res = getMetriceData(Type,Slb_Id,Slb_IP,Slb_Port)
    print(res)
elif (Type == 'InstanceNewConnection'): # 实例每秒新建连接数
    res = getMetriceData(Type,Slb_Id,Slb_IP,Slb_Port)
    print(res)

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值