1.环境概述

装有python3的linux服务器,同时安装zabbix-agent,下载与服务端相应版本。

zabbix-server:5.0.3

zabbix-agent:https://cdn.zabbix.com/zabbix/binaries/stable/5.0/5.0.3/zabbix_agent-5.0.3-linux-3.0-amd64-static.tar.gz

2.修改zabbix_agentd.conf

Server及ServerActive改成zabbix-server地址

UnsafeUserParameters值为1

3.监控脚本,有啥其他想监控的修改脚本即可

from datetime import datetime, timedelta
import json
import sys
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkrds.request.v20140815.DescribeDBInstancePerformanceRequest import DescribeDBInstancePerformanceRequest

utc_time = datetime.now() - timedelta(hours=8)
start_utc_time = utc_time - timedelta(minutes=5)  #为了匹配设置频率为300秒的实例,改成了5
start_time = start_utc_time.strftime("%Y-%m-%dT%H:%MZ")
end_time = utc_time.strftime("%Y-%m-%dT%H:%MZ")

client = AcsClient('XXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXXXX', 'ap-southeast-1')  #阿里云AK
request = DescribeDBInstancePerformanceRequest()
request.set_accept_format('json')
request.set_DBInstanceId(sys.argv[1]) #用配置文件的$1传入
request.set_Key("MySQL_MemCpuUsage")   #要获取的监控项,可从RDS阿里云文档获取,要获取其他的可以定义成sys.argv[3]这样
request.set_StartTime(start_time)
request.set_EndTime(end_time)

response = client.do_action_with_exception(request)
response = str(response,encoding='utf-8')
response = json.loads(response)
if sys.argv[2] == 'cpu':   #用配置文件的$2传入
    response=response["PerformanceKeys"]["PerformanceKey"][0]["Values"]["PerformanceValue"][-1]["Value"].split("&")[0]    #[-1]就是取监控的最后一个值
elif sys.argv[2] == 'memory':
    response=response["PerformanceKeys"]["PerformanceKey"][0]["Values"]["PerformanceValue"][-1]["Value"].split("&")[1]
print(float(response))   #改成浮点类型

4.获取自己帐号下RDS实例列表

from datetime import datetime, timedelta
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
import json

utc_time = datetime.now() - timedelta(hours=8)
start_utc_time = utc_time - timedelta(minutes=1)
start_time = start_utc_time.strftime("%Y-%m-%dT%H:%MZ")
end_time = utc_time.strftime("%Y-%m-%dT%H:%MZ")
instance_id = []
for i in ['ap-northeast-1','ap-southeast-2','eu-central-1','us-east-1']:
    client = AcsClient('XXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXXX', i)
    request = DescribeDBInstancesRequest()
    request.set_accept_format('json')
    response = client.do_action_with_exception(request)
    response = str(response,encoding='utf-8')
    # print(i)
    response = json.loads(response)
    for i in response["Items"]["DBInstance"]:
        i = i['DBInstanceId'] + ' '+ i['DBInstanceDescription']
        print(i)

5.利用zabbix的API批量生成监控项

#!/usr/bin/python
# -*- coding:utf8 -*-
import sys
from zabbix_api import ZabbixAPI

server = "http://x.x.x.x/zabbix"
username = "xxxxxx"
password = "xxxxxx"
zapi = ZabbixAPI(server=server, path="", log_level=0)
zapi.login(username, password)


def get_hostinfo():
    # 主要用来获取host的id,接口的id,其中HOST_NAME就是你想往哪个host里面增添item。
    host_info = zapi.host.get({"selectInterfaces": ["interfaceid"], "filter": {"host": ["vm_129"]}})
    hostid = host_info[0]['hostid']
    interfaceid = host_info[0]['interfaces'][0]['interfaceid']
    return (hostid, interfaceid)


def create_item(name, key):
    a = get_hostinfo()
    hostid = a[0]
    interfaceid = a[1]
    create_item = zapi.item.create(
        {
            "name": name,
            "key_": key,
            "hostid": hostid,
            "type": 0,
            "value_type": 0,  # 0是float,3是整数
            "interfaceid": interfaceid,
            "date_type": 0,
            "delay": 60,
            "history": 3600,
            "trends": 86400,
            "status": 0
        }
    )
    return "item create success"


def create_trigger(name, key):
    zapi.trigger.create(
        {
            "description": name,
            "expression": '{monitor:' + key + '.sum(3)}>40',
            'priority': 2,
        }
    )
    return 'trigger create success'


if __name__ == "__main__":
    arg1 = 'cpu'
    f = open('rds_id.txt', mode='r', encoding='utf-8')
    # 从conf文件中读取实例id和实例名称。
    for i in f:
        rds = i.split()
        key = "rds.get_from_cms[%s,%s]" % (rds[0], arg1)
        name = "%s-%s" % (rds[1], arg1)
        # print(key, name)
        result = create_item(name, key)  # 调用添加函数。
        print(result)

其中文件rds_id.txt的样例是:前为id,后为实例描述

6.添加图形,把上面的监控项添加进去

最后成品

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐