Advertising:

Eliminar o Desactivar Hosts vía API desde un Template: Difference between revisions

From Zabbix-ES
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
  '''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.  
  '''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.
  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 [[https://github.com/mobarrio/zabbix_autoscaling_monitoring 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.
  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.

Revision as of 11:35, 2 April 2020

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