zabbix监控阿里云RDS的CPU和内存
1.环境概述装有python3的linux服务器,同时安装zabbix-agent,下载与服务端相应版本。zabbix-server:5.0.3zabbix-agent:https://cdn.zabbix.com/zabbix/binaries/stable/5.0/5.0.3/zabbix_agent-5.0.3-linux-3.0-amd64-static.tar.gz2.修改zabbix_
·
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.添加图形,把上面的监控项添加进去
最后成品
更多推荐
所有评论(0)