ZabbixとObserviumを友達にする方法

少し前に、興味深いObservium監視システムに出会いました。このシステムでは、ネットワークハードウェア構成と、 記事で説明されているいくつかのチップを保存することに興味がありました。



私はすでにZabbixを使用しており、新しい監視に完全に切り替えたくはありません。また、新しいホストを一度に2つ追加するのも面倒です。そのため、API経由のスクリプトを使用してZabixからホストを取得し、Observiumに追加するというアイデアが生まれました。



Observiumでは、何らかの理由でIPアドレスでホストをイデオロギー的に追加できないため、何らかの理由でDNSを解決できないホストを追加する前に、/ etc / hostsファイルに追加する必要があります。 シスコのデバイスはグループ(ルーター、アクセスポイント、スイッチ)に分割され、名前は都市の略語で始まります(例:Cisco 2811 NSK-10.20.23.1)



ホストをcity-type-XXXX.domain.nameの形式でObserviumに追加します。 また、スクリプトを使用してZabbixホストのマクロからsnmpコミュニティを取得します。



まず、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")
      
      





このスクリプトは、デバイスの異なるグループから順番にホストを取得し、それらをホストファイルに配置します。ホストをObserviumに追加するためのスクリプトも作成され、実行のために起動されます。



All Articles