Défi pour contrôler l'API zabbix en Python Cette fois, je vais essayer d'obtenir des informations
Il y a pyzabbix etc. qui sont pratiques pour Python, mais En supposant qu'il existe une résistance à l'installation dans l'environnement serveur de l'entreprise J'ai essayé d'utiliser json et urllib2 Aussi, si vous le pouvez, je pense que vous l'utiliserez après l'avoir déposé dans un module, Je ne ferai pas grand chose cette fois
Puisque je suis un débutant de Python, j'ai fait référence au contenu du prédécesseur lors de sa création. [J'ai été autorisé à faire référence] http://www.zumwalt.info/blog/2012/11/pyhtonでzabbix-apiを触ってみる/
L'opération a été confirmée avec les séries zabbix 2.0 et zabbix 2.4.
Veuillez réécrire la partie url du client à l'adresse d'écoute N'oubliez pas non plus de définir http ou https
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
##Méthodes et paramètres
# host.get :Méthode d'acquisition des informations sur l'hôte
# output : Object properties to be returned.Si vous regardez le document maintenant, la valeur par défaut est étendue
# filter : 'status:0' =Hôte activé par le moniteur, 'host:[hogehoge]'Filtrer par le nom d'hôte spécifié
# inventory :Extension de la spécification de sortie de l'élément d'information d'inventaire=Afficher tout
#Si vous souhaitez uniquement obtenir l'inventaire d'un hôte spécifique, l'hôte du filtre,Seul l'inventaire sélectionné semble bon
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)
--Préparez un compte avec chaque autorité de référence (l'administrateur est ok)
Lister les informations d'inventaire pour les tests Cette fois, nous utiliserons des notes
Frapper le script
$ scriptname.py [Rechercher le nom de l'hôte cible (défini sur zabbix)]
python
$ ./get.py test
Please Enter Zabbix Web Account : test
PASSWORD :
--------------------------------------------------
# INFO -> test :
test test test
Même un test
aaaaaaaaaaa
La sortie n'est pas bonne, mais vous pouvez l'extraire comme ceci J'ai pensé qu'il serait pratique de prendre l'habitude de vérifier à chaque fois avant de se connecter au serveur, mais il est difficile d'établir des règles
:Si l'URL n'est pas spécifiée correctement:
$ ./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.
:Erreur de compte ou de mot de passe:
$ ./get.py test
Please Enter Zabbix Web Account :a
PASSWORD :
API Error : Login name or password is incorrect.
:L'inventaire est désactivé, l'hôte n'existe pas (non autorisé et ne peut pas être référencé):
$ ./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.
Bien sûr, vous pouvez obtenir diverses choses en modifiant la méthode et les paramètres. De plus, j'ai le sentiment d'avoir pu spécifier les articles à acquérir avec selectInventory pour ces informations d'inventaire. Pour une raison quelconque, je me souviens avoir échoué, alors je le fais étendre et traiter les données
Recommended Posts