Aunque ya hace tiempo que no hablaba acerca de cómo emplear el API de Zabbix, eso no quiere decir que no la estuviese usando, más bien todo el contrario. Durante este tiempo hice numerosas cosas con ella, y la más especial, emplear la versión escrita en Python para interactuar con ella. Puesto que tuve que escribir código en Python, aproveché para recordar y ver cómo evolucionó este lenguaje de programación.
Por si alguien lo necesita, voy a hacer una serie/mini-tutorial acerca de cómo manejar el API de Zabbix (en su versión 2.0), esta vez desde Python.
Lo primero que necesitamos para ello es obtener el código para hablar con el API de Zabbix. Existen varios port's a Pyhton, yo personalmente opté por éste, que es el port a Python de la librería Ruby oficial. Para comenzar a trabajar, lo que necesitamos es crear una carpeta y descargar el código Python necesario (un único fichero). En dicha carpeta también crearemos los script's que vayamos haciendo, para así evitar problemas con las rutas (por simplificar).
shell> mkdir scripts_zabbix shell> cd scripts_zabbix shell> wget https://raw.github.com/gescheit/scripts/master/zabbix/zabbix_api.py
Ahora que ya tenemos todo listo, sólo nos queda escribir el pequeño código necesario para crear/actualizar host's en Zabbix. Puesto que deseamos ser ordenados, crearemos un primer fichero de conexión y configuración. Luego un segundo fichero que hará los cálculos y las llamadas. El primer fichero, zabbix_conf.py tendrá el siguiente código.
#!/usr/bin/env python from zabbix_api import ZabbixAPI user = 'admin' password = 'zabbix' url = 'http://localhost/' zabbix = ZabbixAPI(server = url) zabbix.login(user = user, password = password) templatesList = { 'windows': '1', # id del template Windows 'linux': '2', # id del template Linux } soList = { 'windows': '1', # id del hostgroup Windows 'linux': '2', # id del hostgroup Linux }
Lógicamente, cada uno que adapte la URL, el nombre de usuario y la contraseña a la de su sistema. Acordaros que el usuario que empleéis debe tener acceso a la API. Ahora creamos el segundo fichero, zabbix_host.py que tendrá la siguiente forma,
#!/usr/bin/env python from zabbix_conf import * import sys import getopt import traceback import csv from optparse import OptionParser use = "Usage: %prog [options]" parser = OptionParser(usage = use) parser.add_option("-a", "--add", dest="add", action="store_true", default=False, help="Insert host.") options, args = parser.parse_args() if options.add: file = csv.reader(open('hosts.list', 'r'), delimiter=' ') for index, row in enumerate(file): try: temporal = { "name": row[0].strip(), "dns": row[0].strip() + "your_network.net", "pais": row[1].strip().upper(), "so": row[2].strip() } groups = [{"groupid": soList[temporal["so"]]}] templates = [{"templateid": templatesList[temporal["so"]}] profile = { "site_country": temporal["pais"], "os_full": temporal["so"] } print str(index + 1) + ":", temporal["name"] print "\tGrupos:", groups print "\tTemplates:", templates print "\tPerfil:", profile except: print "\tFallo:", data continue hosts = zabbix.host.get({'filter': {'name': temporal["name"]}, 'output': "extend"}) if hosts: host = { 'hostid': hosts[0]["hostid"], # línea importante para actualizar 'host': temporal["name"], 'groups': groups, 'templates': templates, 'inventory': profile, 'inventory_mode': 0 } r = zabbix.host.update(host); if r: print "Actualizado correctamente" else: print "Fallo al actualizar" else: host = { 'host': temporal["name"], 'interfaces': [{'type': 1, 'ip': "0.0.0.0", 'port': 10050, 'useip': 0, 'main': 1, 'dns': temporal["dns"]}], 'groups': groups, 'templates': templates, 'inventory': profile, 'inventory_mode': 0 } r = zabbix.host.create(host); if r: print "Añadido correctamente" else: print "Fallo al crear"
Pues que la idea es automatizar la creación de host's, como podéis observar, al principio del script se lee un fichero, hosts.list, que contiene la siguiente información,
host_1 España Windows host_2 España Linux host_3 EE.UU. Linux
Modificar el comportamiento del script no es muy complejo y espero que a alguien le sirva como referencia para comenzar a emplear el API de Zabbix de manera útil.
PD: Recordar que en Python la identación es MUY importante!
La entrada Zabbix 2.0 API - host.create la puedes leer el Puppet Linux.
Hola estoy empezando con zabbix 2.2 y tu blog me parece super interesante. ¿Has publicado algo mas sobre el uso del API?
ResponderEliminarHola,
EliminarSí, tengo más cosas acerca del uso de zabbix-api. Los puedes ver aquí: http://www.elmundoenbits.com/search/label/zabbix-api
Muchas gracias por el aporte! Tu blog es bastante interesante.
ResponderEliminarGracias a ti por la visita y si te sirvió algo de lo que hay, genial! :-)
Eliminar