Projet

Général

Profil

Demande #1017

Anomalie #978: remonté des alertes lorsqu'un service ou une machine est planté

ajout d'une alerte zabbix via les API

Ajouté par Loïc Dachary il y a plus de 11 ans. Mis à jour il y a plus de 11 ans.

Statut:
Fermé
Priorité:
Immédiate
Assigné à:
Catégorie:
Task
Version cible:
Début:
10/11/2012
Echéance:
11/11/2012
% réalisé:

100%

Temps estimé:
Temps passé:
Difficulté:
2 Facile

Description

Expérimentations avec l'API zabbix

Utilisation

Ajout d'un host.

Obtention du token d'auth

curl -H content-type:application/json --data '{ "jsonrpc":"2.0", "method":"user.authenticate", "params":{"user":"admin", "password":"XXX"}, "id":2 }' http://127.0.0.1:8080/zabbix//api_jsonrpc.php 
{"jsonrpc":"2.0","result":"a74d1f3f4c4e83ac2a6bbee704a49bc6","id":2}

Obtention de l'ID du template

curl -H content-type:application/json --data '{ "jsonrpc":"2.0", "method":"template.get", "params":{ "output":"extend", "filter":{ "host":"Template_Linux" } }, "auth":"a74d1f3f4c4e83ac2a6bbee704a49bc6", "id":2 }' http://127.0.0.1:8080/zabbix//api_jsonrpc.php 
{"jsonrpc":"2.0","result":{"10001":{"hostid":"10001","proxy_hostid":"0","host":"Template_Linux","dns":"","useip":"0","ip":"","port":"10050","status":"3","disable_until":"0","error":"","available":"0","errors_from":"0","lastaccess":"0","inbytes":"0","outbytes":"0","useipmi":"0","ipmi_port":"623","ipmi_authtype":"0","ipmi_privilege":"2","ipmi_username":"","ipmi_password":"","ipmi_disable_until":"0","ipmi_available":"0","snmp_disable_until":"0","snmp_available":"0","maintenanceid":"0","maintenance_status":"0","maintenance_type":"0","maintenance_from":"0","ipmi_ip":"","ipmi_errors_from":"0","snmp_errors_from":"0","ipmi_error":"","snmp_error":"","templateid":"10001"}},"id":2}

Obtention de l'ID du groupe

curl -H content-type:application/json --data '{ "jsonrpc":"2.0", "method":"template.get", "params":{ "output":"extend", "filter":{ "host":"Linux servers" } }, "auth":"a74d1f3f4c4e83ac2a6bbee704a49bc6", "id":2 }' http://127.0.0.1:8080/zabbix//api_jsonrpc.php 
{"jsonrpc":"2.0","result":[],"id":2}

Creation du host

curl -H content-type:application/json --data '{ "jsonrpc":"2.0", "method":"host.create", "params":{"host":"TEST1","ip":"192.168.44.44","port":10050,"useip":1,"groups":[{"groupid":2}],"templates":[{"templateid": 10001}]}, "auth":"a74d1f3f4c4e83ac2a6bbee704a49bc6", "id":2 }' http://127.0.0.1:8080/zabbix//api_jsonrpc.php 
{"jsonrpc":"2.0","result":{"hostids":["10075"]},"id":2}

Import du host

curl -H content-type:application/json --data '{ "jsonrpc":"2.0", "method":"configuration.import", "auth":"9f50b272bd93ef2ca775a9565f7888d9", "id":2, "params":{"format": "xml", "rules": {"hosts": {"createMissing": true, "updateExisting": true}, "templates": {"createMissing": true, "updateExisting": true}, "templateLinkage": {"createMissing": true} }, "source": "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <zabbix_export> <version>2.0</version> <date>2012-11-17T21:23:31Z</date> <groups> <group> <name>Zabbix servers</name> </group> </groups> <hosts> <host> <host>HOST1</host> <name>HOST1</name> <proxy/> <status>0</status> <ipmi_authtype>-1</ipmi_authtype> <ipmi_privilege>2</ipmi_privilege> <ipmi_username/> <ipmi_password/> <templates> <template> <name>Template OS Linux</name> </template> </templates> <groups> <group> <name>Zabbix servers</name> </group> </groups> <interfaces> <interface> <default>1</default> <type>1</type> <useip>1</useip> <ip>127.0.0.1</ip> <dns/> <port>10050</port> <interface_ref>if1</interface_ref> </interface> </interfaces> <applications/> <items> </items> <discovery_rules/> <macros/> <inventory/> </host> </hosts> </zabbix_export>"}}' http://127.0.0.1/zabbix/api_jsonrpc.php

Installation

apt-get install rubygems
gem install zabcon

Credentials

Dans l'interface web s'assurer que l'utilisateur a accès à l'API. Il y a une ligne Api Access et quand on click sur le lien Users sur la même ligne, on doit voir l'utilisateur qui va servir pour l'API.

Configuration

cp /var/lib/gems/1.8/gems/zabcon-0.0.392/zabcon.conf.default ~/zabcon.conf

Edition pour ajouter (tout est en commentaire par défaut):
server[april][server]=http://192.168.1.33/zabbix/
server[april][username]=admin
server[april][password]=XXXXX
default_server=april

Attention: essayer de faire la même chose via la ligne de commande avec login comme par exemple:
ephedrine:/# ruby1.8 /var/lib/gems/1.8/bin/zabcon.rb --no-login -
Unable to find a default configuration file
i486-linux
Welcome to Zabcon.  Build Number: 392
Use the command 'help' to get help on commands
 -> login http://192.168.1.33/zabbix/ admin XXXX
WARNING: Initialization has changed, backwards compatability is being used.
WARNING: Use ZabbixAPI.new(url,:debug=>n,:returntype=>:result) to have the
WARNING: same capability as previous versions.
WARNING: This depreciated functionality will be removed in a future release
Runtime error detected
(NoMethodError): undefined method `[]=' for nil:NilClass

va échouer parceque /var/lib/gems/1.8/gems/zabcon-0.0.392/./libs/zabbix_server.rb fait référence a un nom qui n'existe pas:
    ServerCredentials.instance[@credentials["name"]]["auth"]=
        @connection.auth

et qui correspond au nom april dans le fichier de conf. C'est un signe que zabcon n'est utilisé qu'avec un fichier de conf.

Debug

Zabcon tracker fermé

Probablement pour des questions d'anti-spam le tracker est fermé (on ne peut pas s'enregistré) donc il n'est pas possible de remonter un bug. Il faudrait contacter les auteurs mais on dirait que c'est pas super actif.

Curl

Exemple de ligne de commande pour interagir avec l'API en direct:

curl -H content-type:application/json --data '{ "jsonrpc":"2.0", "method":"user.authenticate", "params":{"user":"admin", "password":"XXXXX"}, "id":2 }' http://127.0.0.1:8080/zabbix//api_jsonrpc.php 
{"jsonrpc":"2.0","result":"08a3b7bd27b5d7bbfcc1e75111d75c16","id":2}

Logs

Il n'y a pas de logs de l'API sur le serveur zabbix par défaut (peut-etre augmenter la verbosité ?). On voit passer les requêtes dans les logs apache de l'interface web tail -f /var/log/apache2/.log* qui se trouve sur le vserver dokuwiki de ns1.april.org dans /var/www/april.lan/www/zabbix

92.168.1.50 - - [11/Nov/2012:14:34:17 +0100] "POST /zabbix//api_jsonrpc.php HTTP/1.1" 200 39 "-" "Zbx Ruby CLI" 

Historique

#1

Mis à jour par Loïc Dachary il y a plus de 11 ans

irc.freenode.net#zabbix

(12:54:00 PM) dachary: Hi, I would like to use puppet to add items/triggers to zabbix. Any suggestions as to where I could start reading about this ?
(12:54:58 PM) f0: dachary: http://www.zabbix.com/documentation/2.0/api

#2

Mis à jour par Loïc Dachary il y a plus de 11 ans

  • % réalisé changé de 0 à 10

Je préferre ruby parceque puppet est en ruby. Donc je tente d'abord l'option API implémenté en ruby et ça tombe bien parceque c'est la seule API qui semble avoir une command line.
Installation de zabcon.
http://trac.red-tux.net/

ephedrine:/# apt-get install rubygems
...
ephedrine:/# gem install zabcon

#3

Mis à jour par Loïc Dachary il y a plus de 11 ans

Quid d'un upgrade vers zabbix-2.0.x ? irc.freenode.net#zabbix says:

(09:33:24 PM) dachary: volter: I guess my question is about how safe an upgrade from 1.8.x to 2.0.x is. It is 100% safe and moron proof ? Or does it require some kind of plan.
(09:57:40 PM) Richlv: some plan. and a backup.
(10:01:35 PM) Steki: and most of your templates will not work correctly
(10:01:45 PM) Steki: or better say they will but new functionality will not
(10:01:52 PM) Steki: so plan ahead 
(10:50:00 PM) volter: dachary: Some items were dropped in 2.0, so you might also see that.
(10:50:23 PM) volter: If you use DM, be aware you must upgrade other nodes or proxies as well.
#4

Mis à jour par Loïc Dachary il y a plus de 11 ans

browse les release notes et recherche les améliorations d'API pour voir s'il est mieux de partir sur 2.0 ou pas.
#5

Mis à jour par Loïc Dachary il y a plus de 11 ans

 curl -H content-type:application/json --data '{ "jsonrpc":"2.0", "method":"user.authenticate", "params":{"user":"admin", "password":"XXXX"}, "id":2 }' http://127.0.0.1:8080/zabbix//api_jsonrpc.php
{"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid params.","data":"No API access"},"id":2}

C'est parceque l'utilisateur n'a pas les droits d'accès à l'API, bien qu'il soit admin comme on le voit dans "l'interface de gestion des utilisateurs":
http://127.0.0.1:8080/zabbix/usergrps.php
#6

Mis à jour par Loïc Dachary il y a plus de 11 ans

  • % réalisé changé de 10 à 50
#7

Mis à jour par Vincent-Xavier JUMEL il y a plus de 11 ans

Visiblement, Wheezy contiendra encore la version 1.8 de Zabbix
(source)
On peut backporter une version 2.0 depuis sid
(source)

#8

Mis à jour par Loïc Dachary il y a plus de 11 ans

Pour avoir la liste des commandes zabcon help commands. Mais ça ne dit pas ce que ça fait ni quels sont les arguments. Pour avoir la liste des hosts c'est get host alors que la fonction d'API correspondante est host.get . Je laisse tomber zabcon parcequ'il me faudrait lire le code pour arriver à l'utiliser de la façon la plus simple.
En utilisant curl (voir plus haut pour l'obtention du token auth:

curl -H content-type:application/json --data '{ "jsonrpc":"2.0", "method":"host.get", "params":{"filter":{"host":["host_ns1"]},"output":"extend"}, "auth":"a74d1f3f4c4e83ac2a6bbee704a49bc6", "id":2 }' http://127.0.0.1:8080/zabbix/api_jsonrpc.php 
{"jsonrpc":"2.0","result":[{"hostid":"10047","proxy_hostid":"0","host":"host_ns1","dns":"","useip":"1","ip":"192.168.1.254","port":"10050","status":"0","disable_until":"0","error":"","available":"1","errors_from":"0","lastaccess":"0","inbytes":"0","outbytes":"0","useipmi":"0","ipmi_port":"623","ipmi_authtype":"-1","ipmi_privilege":"2","ipmi_username":"","ipmi_password":"","ipmi_disable_until":"0","ipmi_available":"0","snmp_disable_until":"0","snmp_available":"0","maintenanceid":"0","maintenance_status":"0","maintenance_type":"0","maintenance_from":"0","ipmi_ip":"","ipmi_errors_from":"0","snmp_errors_from":"0","ipmi_error":"","snmp_error":""}],"id":2}

 curl -H content-type:application/json --data '{ "jsonrpc":"2.0", "method":"host.exists", "params":{"hostid":"10047"}, "auth":"a74d1f3f4c4e83ac2a6bbee704a49bc6", "id":2 }' http://127.0.0.1:8080/zabbix//api_jsonrpc.php 
{"jsonrpc":"2.0","result":true,"id":2}

curl -H content-type:application/json --data '{ "jsonrpc":"2.0", "method":"template.get", "params":{ "output":"extend", "filter":{ "host":"Template_Linux" } }, "auth":"a74d1f3f4c4e83ac2a6bbee704a49bc6", "id":2 }' http://127.0.0.1:8080/zabbix//api_jsonrpc.php 
{"jsonrpc":"2.0","result":{"10001":{"hostid":"10001","proxy_hostid":"0","host":"Template_Linux","dns":"","useip":"0","ip":"","port":"10050","status":"3","disable_until":"0","error":"","available":"0","errors_from":"0","lastaccess":"0","inbytes":"0","outbytes":"0","useipmi":"0","ipmi_port":"623","ipmi_authtype":"0","ipmi_privilege":"2","ipmi_username":"","ipmi_password":"","ipmi_disable_until":"0","ipmi_available":"0","snmp_disable_until":"0","snmp_available":"0","maintenanceid":"0","maintenance_status":"0","maintenance_type":"0","maintenance_from":"0","ipmi_ip":"","ipmi_errors_from":"0","snmp_errors_from":"0","ipmi_error":"","snmp_error":"","templateid":"10001"}},"id":2}

curl -H content-type:application/json --data '{ "jsonrpc":"2.0", "method":"template.get", "params":{ "output":"extend", "filter":{ "host":"Linux servers" } }, "auth":"a74d1f3f4c4e83ac2a6bbee704a49bc6", "id":2 }' http://127.0.0.1:8080/zabbix//api_jsonrpc.php 
{"jsonrpc":"2.0","result":[],"id":2}

curl -H content-type:application/json --data '{ "jsonrpc":"2.0", "method":"host.create", "params":{"host":"TEST1","ip":"192.168.44.44","port":10050,"useip":1,"groups":[{"groupid":2}],"templates":[{"templateid": 10001}]}, "auth":"a74d1f3f4c4e83ac2a6bbee704a49bc6", "id":2 }' http://127.0.0.1:8080/zabbix//api_jsonrpc.php 
{"jsonrpc":"2.0","result":{"hostids":["10075"]},"id":2}

#9

Mis à jour par Loïc Dachary il y a plus de 11 ans

  • Statut changé de Nouveau à Fermé
  • % réalisé changé de 50 à 100
#10

Mis à jour par Loïc Dachary il y a plus de 11 ans

  • Priorité changé de Normale à Immédiate

Formats disponibles : Atom PDF