​为你解放双手,python自动获取指定主机zabbix监控图

本文档介绍如何使用Python脚本自动获取Zabbix监控图并保存到本地,形成word文档。通过zabbix API获取auth ID、host ID、graph ID,然后利用爬虫下载图片并用docx模块插入到word。内容涵盖获取zabbix认证、主机ID、监控图ID,以及图片编辑到word的步骤。
摘要由CSDN通过智能技术生成


新钛云服已为您服务1060

在日常运维中,当你遇到每天邮件发出当天服务器的监控状态等这些类似需求时,你还在每天下午快下班的时候打开zabbix截图、发邮件......日复一日的手动处理吗?如果是,这篇干货将为您解放双手。

文档说明

本文档主要介绍利用python脚本,指定主机名,自动获取zabbix监控图,下载到本地,形成word文档。

总体思路:先通过zabbix API获取auth;通过主机名获取host ID;通过host ID获取graph ID;再利用爬虫代码将图片下载到本地;通过python的docx 模块插入至word文档(本文zabbix的版本是5.0,python是3.8)。

一、自动获取zabbix监控图保存至本地

首先,获取zabbix的auth ID,通过zabbix API获取主机id,graph ID等信息。打印出auth ID之后,保存下来,之后获取host ID需要用到:

#获取authkey

ZABBIX_URL = 'https://www.zabbix.cn'
ZABBIX_USERNAME = "user"
ZABBIX_PASSWORD = "password"

url = "{}/api_jsonrpc.php".format(ZABBIX_URL)
header = {"Content-Type": "application/json"}
# auth user and password
data = {
   "jsonrpc": "2.0",
   "method": "user.login",
   "params": {
       "user": ZABBIX_USERNAME,
       "password": ZABBIX_PASSWORD
  },
   "id": 1,
}
# 由于API接收的是json字符串,故需要转化一下
value = json.dumps(data).encode('utf-8')

# 对请求进行包装
req = request.Request(url, headers=header, data=value)

# 验证并获取Auth ID
try:
   # 打开包装过的url
   result = request.urlopen(req)
except Exception as e:
   print("Auth Failed, Please Check Your Name And Password:", e)
else:
   response = result.read()
   # 上面获取的是bytes类型数据,故需要decode转化成字符串
   page = response.decode('utf-8')
   # 将此json字符串转化为python字典
   page = json.loads(page)
   result.close()
   print("Auth Successful. The Auth ID Is: {}".format(page.get('result')))

变量hostname即是需要查询的主机名,通过主机名查询到host ID。当然也可以使用input函数做交互,实现动态查询。

#获取hostid
data = {

    "jsonrpc": "2.0",
    "method": "host.get",
    "params": {
       "output": [
           "hostid",
           "host"
      ],
       "selectInterfaces": [
           "interfaceid",
           "ip"
      ]
    },
    "auth": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",  #这里的auth的值就是上文获取到的auth
    "id": 2

}

r = requests.post(url, headers=header, data=json.dumps(data))

hostname = abc123

with open(hostname_txt,'r') as f:
   tmp_list = [x.strip("\n") for x in f.readlines()]
   for hostname in tmp_list:
       if r.json().get('result'):
           for i in r.json()['result']:
               if i['host'] == hostname:
                   hostids = i['hostid']

使用host ID查询到graph ID,并保存到本地;

value传入的值,from和to这两个key决定了获取监控图的监控时间段,本例设置的是一个月;

v

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值