Skip to content

hoto_dev

遇见王斌 edited this page Mar 29, 2018 · 12 revisions

与第三方监控服务对接二次开发

1 获取 zabbix 信息主动上报到其他监控服务

1.1 场景

定时上报固定的监控项信息到已有的监控服务

1.2 设计思路

主动上报(即程序主动将要监控信息主动上报到监控中心)和被动上报(监控中心直接获取想要的监控项的值)的区别是

主动上报需要知道需要上传那些监控项即需要先获取到每台机器需要上报的监控项,然后定时获取 zabbix issues 中的异常值,然后进行上报

1.3 步骤

  • 生成每台机器的监控列表(zabbix_tool create_config)
    [功能]
    (1)主机名_IP字典(根据host_list获取)
    (2)主机名_服务名列表(根据item_list获取)
    
    [说明]
    可以修改 `/etc/zabbix_tool/zabbix_tool.ini` 中 application 名称以及生成的文件路径
    
  • 启动定时程序时获取机器列表以及监控列表【读取配置文件】
  • 获取异常主机列表和正常主机列表【zabbix issues 进行获取】
    • 异常主机 获取异常监控项项和非异常监控项
    • 正常主机 返回全部OK的信息

2 开发步骤

进行二次开发是需要了解 Python 基础知识,同时需要熟悉 zabbix_api 使用

2.1 导入 zabbix_api 模块

import os
import sys
root_path = os.path.split(os.path.realpath(__file__))[0]
os.chdir(root_path)
sys.path.insert(0,'/opt/ZabbixTool/lib_zabbix/')
sys.path.insert(0,'/opt/ZabbixTool/lib_zabbix/w_lib/')

2.2 使用 zabbix_api

下面是使用 zabbix_api 输出异常监控项的例子,同时可以通过修改 /opt/ZabbixTool/lib_zabbix/zabbix_api.py 中函数的返回值,进而返回不同的内容

#!/usr/bin/python
#coding=utf8
import os
import sys
root_path = os.path.split(os.path.realpath(__file__))[0]
os.chdir(root_path)
sys.path.insert(0,'/opt/ZabbixTool/lib_zabbix/')
sys.path.insert(0,'/opt/ZabbixTool/lib_zabbix/w_lib/')

from zabbix_api import zabbix_api
zabbix=zabbix_api(output=False)
issues_dict=zabbix.issues()
print issues_dict

2.3 获取 Zabbix server 中的异常监控项列表

from zabbix_api import zabbix_api
zabbix=zabbix_api(output=False)
issues_dict=zabbix.issues()
print issues_dict

注:获取到的issues_dict是个字典,可以通过以下方法显示的优美点

import json
print json.dumps(issues_dict,indent=4)

返回值为

{
    "主机名1": [
        "异常监控项1的key",
        "异常监控项2的key",
        "异常监控项3的key",
    ],
    "主机名2": [
        "异常监控项1的key",
        "异常监控项2的key",
    ]
}

注意:如果没有异常则返回 0

2.4 生成主机名和 IP 字典

Zabbix 中对监控主机是以主机名作为标识的,主机名和 host_id 一样都是唯一的,但有的第三方监控平台是以 IP 作为标识的话,则需要生成主机名与 IP 的对应关系

可以通过如下方法生成字典

host_list=zabbix.host_list()
hostname_ip={}
for host in host_list:
    # host[0]---hostid ,host[1]---hostname,host[2]---hostip
    hostid=host[0]
    hostname=host[1]
    hostip=host[2]
    hostname_ip[hostname]=hostip
print json.dumps(hostname_ip,indent=4)

3 注意

3.1 工作路径

程序中导入 zabbix_api 时,工作目录会切换为 /opt/ZabbixTool/lib_zabbix 路径

获取配置和导出文件时建议使用绝对路径

可以查看实例 zabbix_tool