Herausforderung, zabbix api in Python zu steuern Dieses Mal werde ich versuchen, Informationen zu bekommen
Es gibt Pyzabbix usw., die für Python praktisch sind, aber Angenommen, es besteht Widerstand gegen die Installation in der Unternehmensserverumgebung Ich habe versucht, json und urllib2 zu verwenden Wenn Sie können, denke ich auch, dass Sie es verwenden werden, nachdem Sie es in ein Modul gelegt haben. Ich werde diesmal nicht so viel tun
Da ich ein Anfänger von Python bin, habe ich mich beim Erstellen auf den Inhalt des Vorgängers bezogen. [Ich durfte mich beziehen] http://www.zumwalt.info/blog/2012/11/pyhtonでzabbix-apiを触ってみる/
Die Operation wurde mit den Serien zabbix 2.0 und zabbix 2.4 bestätigt.
Bitte schreiben Sie den URL-Teil des Clients an die Abhöradresse Vergessen Sie auch nicht, http oder https festzulegen
python
#!/usr/bin/python
# coding: utf-8
import os
import sys
import getpass
import json
import urllib2
if len(sys.argv) != 2 :
print ' ERROR : Please check Search hostname.'
print ' Usage: ' + os.path.basename(__file__) + ' [search hostname]'
sys.exit()
client = 'https://127.0.0.1/zabbix/api_jsonrpc.php'
postheader = {'Content-Type': 'application/json-rpc'}
userid = raw_input('Please Enter Zabbix Web Account : ')
passwd = getpass.getpass('PASSWORD :')
while userid == '':
print 'type the account.'
userid = raw_input('Please Enter Zabbix Web Account : ')
while passwd == '':
print 'type the password'
passwd = getpass.getpass('PASSWORD :')
# auth
authquery = json.dumps({'jsonrpc':'2.0', 'method':'user.login', 'params':{'user':userid, 'password':passwd}, 'auth':None, 'id': 1})
authreq = urllib2.Request(client, authquery, postheader)
try :
getauthresult = urllib2.urlopen(authreq).read()
authresult = json.loads(getauthresult)
except Exception as e :
print ' %s %s' % ('ERROR :',e)
print ' Please check zabbix URL Setting or Others.'
sys.exit()
if 'error' in authresult :
print ' %s %s' % ('API Error :',authresult['error']['data'])
sys.exit()
# query
##Methoden und Parameter
# host.get :Methode zur Erfassung von Hostinformationen
# output : Object properties to be returned.Wenn Sie sich das Dokument jetzt ansehen, ist die Standardeinstellung "Erweitern"
# filter : 'status:0' =Monitor-fähiger Host, 'host:[hogehoge]'Filtern Sie nach dem angegebenen Hostnamen
# inventory :Ausgabespezifikation des Inventarinformationselements erweitern=Zeige alles
#Wenn Sie nur das Inventar eines bestimmten Hosts abrufen möchten, den Host des Filters,Nur ausgewähltes Inventar sieht gut aus
postquery = json.dumps({'jsonrpc':'2.0', 'method':'host.get', 'params':{'output':'extend', 'filter':{'status':'0', 'host':sys.argv[1]}, 'selectInventory':'extend'}, 'auth':authresult['result'], 'id':1})
postreq = urllib2.Request(client, postquery, postheader)
getpostresult = urllib2.urlopen(postreq).read()
postresult = json.loads(getpostresult)
# result is empty
if not postresult['result'] :
print 'no such host.'
sys.exit()
# result data export
info=[]
for data in postresult['result'] :
if not data['inventory'] :
print 'no such inventory .'
sys.exit()
info = data['inventory']['notes']
print '--------------------------------------------------'
print '%s%s%s%s%s' % ('# INFO -> ', sys.argv[1], ' : ', '\n', info)
Bereiten Sie ein Konto bei jeder Referenzbehörde vor (Admin ist in Ordnung) --Listen Sie Inventarinformationen zum Testen auf. Dieses Mal verwenden wir Notizen
Das Skript streichen $ scriptname.py [Name des Zielhosts suchen (auf zabbix gesetzt)] `
python
$ ./get.py test
Please Enter Zabbix Web Account : test
PASSWORD :
--------------------------------------------------
# INFO -> test :
test test test
Sogar ein Test
aaaaaaaaaaa
Die Ausgabe ist nicht gut, aber Sie können sie so extrahieren Ich dachte, es wäre praktisch, es sich zur Gewohnheit zu machen, jedes Mal zu überprüfen, bevor Sie sich beim Server anmelden, aber es ist schwierig, Regeln zu erstellen
:Wenn die URL falsch angegeben ist:
$ ./get.py test
Please Enter Zabbix Web Account : test
PASSWORD :
ERROR : <urlopen error [Errno 111] Connection refused>
Please check zabbix URL Setting or Others.
$ ./get.py test
Please Enter Zabbix Web Account : test
PASSWORD :
ERROR : HTTP Error 404: Not Found
Please check zabbix URL Setting or Others.
:Konto- oder Passwortfehler:
$ ./get.py test
Please Enter Zabbix Web Account :a
PASSWORD :
API Error : Login name or password is incorrect.
:Inventar ist deaktiviert, Host existiert nicht (nicht autorisiert und kann nicht referenziert werden):
$ ./get.py test1
Please Enter Zabbix Web Account : test
PASSWORD :
no such host.
$ ./get.py test2
Please Enter Zabbix Web Account : test
PASSWORD :
no such inventory.
Natürlich können Sie verschiedene Dinge erhalten, indem Sie die Methode und die Parameter ändern. Außerdem habe ich das Gefühl, dass ich die mit selectInventory zu erwerbenden Artikel für diese Inventarinformationen angeben konnte. Aus irgendeinem Grund erinnere ich mich, dass ich versagt habe, also lasse ich die Daten erweitern und verarbeiten
Recommended Posts