Advertising:
Eliminar o Desactivar Hosts vía API desde un Template
Nota: La problemática es que tenemos un servicio de Openshift que crea y registra hosts en Zabbix para su monitorizacion de forma automática según necesidades de consumo. Pero de la misma forma que los crea y se registran tendremos que eliminarlos cuando ya no sean necesarios. Para esto crearemos un Template en Zabbix el cual aplicaremos a los hosts que tendrán este comportamiento y una vez dejen de estar activos ellos mismos dispararan un trigger que los eliminara automáticamente mediante una acción predefinida para ello.
Mas información en [Github]
En la siguiente imagen podemos ver como automáticamente la infraestructura creció a 7 hosts y luego de la misma forma decreció a 3. Los que están parados se tienen que eliminar automáticamente.
- Creamos una Acción que se disparara cuando un trigger con el nombre "AWS Remove host" sea disparado. Este ejecutara un comando y vía API podrá eliminar o desactivar el HOST
- Crearemos un Template que contendrá un item y un trigger que se disparara cuando el Host no pueda conectar con el Zabbix Server en X intentos.
Nota: La condicion del trigger en la imagen fue para realizar pruebas, lo que hay que incluir es una con nodata como la siguiente: {Template Remove inactive host:net.tcp.service[tcp,"x.x.x.x",10051].nodata(1h)}=1
- Creamos un script que se conectara con el Zabbix Server y eliminara o desacrivara el Hosts indicado.
# cat <<EOF >/usr/lib/zabbix/externalscripts/zbxapi.sh #!/bin/bash ######################################################################### export zabbixServer='xxx.xxx.xxx.xxx' export zabbixApiUrl="http://$zabbixServer/zabbix/api_jsonrpc.php" export zabbixUsername='xxxxxx' export zabbixPassword='xxxxxx' header='Content-Type:application/json' # Comandos export CURL=/usr/bin/curl export JQ=/usr/bin/jq export ZBX_TOKEN="" ######################################################################### # get Token zbx_gettoken() { ZBX_TOKEN=$(${CURL} -s -X POST -H "${header}" -d '{"jsonrpc": "2.0", "method":"user.login", "params":{"user":"'${zabbixUsername}'", "password":"'${zabbixPassword}'"},"auth": null,"id":0}' ${zabbixApiUrl} | ${JQ} -r ".result") echo $ZBX_TOKEN } # get HostID zbx_getHostID() { if [ $# = 0 ]; then echo "ERROR: Parametro incorrecto. Se espera el HostID" exit 1 fi ZBX_HOSTNAME="${1}" ZBX_HOSTID=$(${CURL} -s -X POST -H "${header}" -d '{"jsonrpc": "2.0", "method": "host.get", "params": { "filter": { "host": [ "'${ZBX_HOSTNAME}'" ] } }, "auth": "'${ZBX_TOKEN}'", "id": 1 }' $zabbixApiUrl | ${JQ} -r ".result[].hostid") echo $ZBX_HOSTID } # disableHostByName zbx_disableHostByName() { if [ $# = 0 ]; then echo "ERROR: Parametro incorrecto. Se espera el Hostname" exit 1 fi ZBX_HOSTNAME="${1}" ZBX_HOSTID=$(zbx_getHostID $ZBX_HOSTNAME) zbx_disableHostByID $ZBX_HOSTID } # enableHostByName zbx_enableHostByName() { if [ $# = 0 ]; then echo "ERROR: Parametro incorrecto. Se espera el Hostname" exit 1 fi ZBX_HOSTNAME="${1}" ZBX_HOSTID=$(zbx_getHostID $ZBX_HOSTNAME) zbx_enableHostByID $ZBX_HOSTID } # disableHostByID zbx_disableHostByID() { if [ $# = 0 ]; then echo "ERROR: Parametro incorrecto. Se espera el HostID" exit 1 fi ZBX_HOSTID="${1}" $CURL -s -X POST -H "${header}" -d '{"jsonrpc": "2.0", "method":"host.update", "params": {"hostid": "'${ZBX_HOSTID}'", "status": 1 }, "auth": "'${ZBX_TOKEN}'", "id": 1 }' ${zabbixApiUrl} 2>&1 >/dev/null } # enableHostByID zbx_enableHostByID() { if [ $# = 0 ]; then echo "ERROR: Parametro incorrecto. Se espera el HostID" exit 1 fi ZBX_HOSTID="${1}" $CURL -s -X POST -H "${header}" -d '{"jsonrpc": "2.0", "method":"host.update", "params": {"hostid": "'${ZBX_HOSTID}'", "status": 0 }, "auth": "'${ZBX_TOKEN}'", "id": 1 }' ${zabbixApiUrl} 2>&1 >/dev/null } # deleteHostByID zbx_deleteHostByID() { if [ $# = 0 ]; then echo "ERROR: Parametro incorrecto. Se espera el HostID" exit 1 fi ZBX_HOSTID="${1}" $CURL -s -X POST -H "${header}" -d '{"jsonrpc": "2.0", "method":"host.delete", "params": ["'${ZBX_HOSTID}'"], "auth": "'${ZBX_TOKEN}'", "id": 1 }' ${zabbixApiUrl} 2>&1 >/dev/null } # deleteHostByName zbx_deleteHostByName() { if [ $# = 0 ]; then echo "ERROR: Parametro incorrecto. Se espera el Hostname" exit 1 fi ZBX_HOSTNAME="${1}" ZBX_HOSTID=$(zbx_getHostID $ZBX_HOSTNAME) zbx_deleteHostByID $ZBX_HOSTID } # zbx_usage zbx_usage() { echo echo "Usage:" echo " zbxapi.sh [deleteByName|deleteByID|enableByName|disableByName|enableByID|disableByID] HOSTNAME" echo echo " Ejemplo desactivar host por nombre" echo " # zbxapi.sh disableByName server1" echo exit 1 } #--------------------------------------------- # main() ZBX_TOKEN=$(zbx_gettoken) if [ $# -lt 1 ]; then zbx_usage exit 1 fi cmd="${1}" shift case "${cmd}" in "deleteByName" ) zbx_deleteHostByName ${*} ;; "deleteByID" ) zbx_deleteHostByID ${*} ;; "enableByName" ) zbx_enableHostByName ${*} ;; "disableByName" ) zbx_disableHostByName ${*} ;; "enableByID" ) zbx_enableHostByID ${*} ;; "disableByID" ) zbx_disableHostByID ${*} ;; * ) zbx_usage ;; esac exit 0 EOF # chmod 755 /usr/lib/zabbix/externalscripts/zbxapi.sh