[Из песочницы] Как подружить Zabbix и Observium
У меня уже используются Zabbix и полностью переходить на новый мониторинг даже не хочется, так же как и добавлять новые хосты сразу в два тоже лениво, поэтому пришла в голову идея забирать хосты из забикса скриптом через API и добавлять их на Observium.
В observium почему-то нельзя идеологически добавлять хосты по IP-адресу, поэтому перед добавлением хоста, который по каким-то причинам не резолвится DNS, его необходимо добавить в файл /etc/hosts. У меня устройства Cisco разбиты по группам (роутеры, точки доступа, коммутаторы), а имена начинаются с аббревиатуры города, например NSK Cisco 2811 — 10.20.23.1
Добавлять хосты в Observium будем в виде city-type-X-X-X-X.domain.name. Также скриптом будем забирать snmp community из макроса в хосте Zabbix.
Для начала поставим pyZabbix:
pip install pyzabbix
Ну, а дальше, собственно, сам скрипт:
#!/usr/bin/python
import os
from pyzabbix import ZabbixAPI
zapi = ZabbixAPI(server="http://servername/zabbix")
zapi.login("login", "password")
file_hosts = open('/etc/hosts', 'w')
file_hosts.truncate()
file_hosts.write ("##### Auto generated by script /opt/observium/scripts/get_zabbix_hosts.py" + '\n')
file_script_add_device = open('/opt/observium/scripts/_my_script_add_device.sh', 'w')
file_script_add_device.truncate()
file_script_add_device.write ("#!/bin/bash" + '\n\n')
file_script_add_device.write ("##### Auto generated by script /opt/observium/scripts/_my_script_import_from_zbx.py" + '\n')
file_hosts.write ('\n' + "##### Cisco Routers" + '\n')
file_script_add_device.write ('\n' + "##### Cisco Routers" + '\n')
routers = zapi.host.get(output = 'extend', groupids = '11', )
if (routers != 0) and (len(routers) != 0):
for h in routers:
if h['status'] == '0':
hid = h['hostid']
ipadr = zapi.hostinterface.get(hostids = hid ,filter={"main":["1"]})[0]['ip']
ipadr_spliter = ipadr.split(".")
city = h['name'].split(" ")[0].lower()
dns_name = (city + "-gw-" + ipadr_spliter[0] + "-" + ipadr_spliter[1] + "-" + ipadr_spliter[2] + "-" + ipadr_spliter[3] + ".domain.name")
snmp_community = zapi.usermacro.get(output = 'extend', hostids = hid, filter={"macro":["{$SNMP_COMMUNITY}"]})[0]['value']
line_hosts = (ipadr + " " + dns_name)
file_hosts.write (line_hosts + '\n')
line_add_device = ("/opt/observium/add_device.php " + dns_name + " " + snmp_community + " v2c")
file_script_add_device.write (line_add_device + '\n')
file_hosts.write ('\n' + "##### Cisco Access Points" + '\n')
file_script_add_device.write ('\n' + "##### Cisco Access Points" + '\n')
access_points = zapi.host.get(output = 'extend', groupids = '20', )
if (access_points != 0) and (len(access_points) != 0):
for h in access_points:
if h['status'] == '0':
hid = h['hostid']
ipadr = zapi.hostinterface.get(hostids = hid ,filter={"main":["1"]})[0]['ip']
ipadr_spliter = ipadr.split(".")
city = h['name'].split(" ")[0].lower()
dns_name = (city + "-ap-" + ipadr_spliter[0] + "-" + ipadr_spliter[1] + "-" + ipadr_spliter[2] + "-" + ipadr_spliter[3] + ".domain.name")
snmp_community = zapi.usermacro.get(output = 'extend', hostids = hid, filter={"macro":["{$SNMP_COMMUNITY}"]})[0]['value']
line_hosts = (ipadr + " " + dns_name)
file_hosts.write (line_hosts + '\n')
line_add_device = ("/opt/observium/add_device.php " + dns_name + " " + snmp_community + " v2c")
file_script_add_device.write (line_add_device + '\n')
file_hosts.write ('\n' + "##### Cisco Switches" + '\n')
file_script_add_device.write ('\n' + "##### Cisco Switches" + '\n')
switches = zapi.host.get(output = 'extend', groupids = '19', )
if (switches != 0) and (len(switches) != 0):
for h in switches:
if h['status'] == '0':
hid = h['hostid']
ipadr = zapi.hostinterface.get(hostids = hid ,filter={"main":["1"]})[0]['ip']
ipadr_spliter = ipadr.split(".")
city = h['name'].split(" ")[0].lower()
dns_name = (city + "-sw-" + ipadr_spliter[0] + "-" + ipadr_spliter[1] + "-" + ipadr_spliter[2] + "-" + ipadr_spliter[3] + ".domain.name")
snmp_community = zapi.usermacro.get(output = 'extend', hostids = hid, filter={"macro":["{$SNMP_COMMUNITY}"]})[0]['value']
line_hosts = (ipadr + " " + dns_name)
file_hosts.write (line_hosts + '\n')
line_add_device = ("/opt/observium/add_device.php " + dns_name + " " + snmp_community + " v2c")
file_script_add_device.write (line_add_device + '\n')
file_hosts.close()
file_script_add_device.close()
os.system("chmod 750 /opt/observium/scripts/_my_script_add_device.sh")
os.system("/opt/observium/scripts/_my_script_add_device.sh | grep 'Could not reach ' > /var/log/import_hosts_from_zabbix.log")
Данный скрипт забирает хосты по очереди с разных групп устройств и помещает их в файл hosts, также создаётся скрипт добавления хостов в Obversion и запускается на исполнение.
Комментарии (1)
8 сентября 2016 в 17:34
+1↑
↓
А где дружба то?
Вижу простой экспорт/импорт.