#!/bin/bash # Script de integración para Zabbix External Scripts # ================================================== # # Este script debe colocarse en: # /usr/lib/zabbix/externalscripts/cisco_mac_discovery.sh # # Y configurar permisos: # chmod +x /usr/lib/zabbix/externalscripts/cisco_mac_discovery.sh # chown zabbix:zabbix /usr/lib/zabbix/externalscripts/cisco_mac_discovery.sh # Configuración CONTAINER_NAME="cisco-mac-monitor" DATA_FILE="/data/cisco_mac_data.json" TIMEOUT=60 # Función de logging log() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >&2 } error() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: $1" >&2 exit 1 } # Verificar que el contenedor existe y está corriendo check_container() { if ! docker ps --format "table {{.Names}}" | grep -q "^${CONTAINER_NAME}$"; then error "Contenedor ${CONTAINER_NAME} no está corriendo" fi } # Ejecutar discovery y obtener datos run_discovery() { log "Ejecutando discovery en contenedor ${CONTAINER_NAME}" # Ejecutar single-run en el contenedor if ! timeout ${TIMEOUT} docker exec ${CONTAINER_NAME} single-run >/dev/null 2>&1; then error "Falló la ejecución de discovery (timeout: ${TIMEOUT}s)" fi # Verificar que el archivo de datos existe if ! docker exec ${CONTAINER_NAME} test -f ${DATA_FILE}; then error "Archivo de datos no encontrado: ${DATA_FILE}" fi # Obtener y validar JSON local json_data json_data=$(docker exec ${CONTAINER_NAME} cat ${DATA_FILE}) if [[ -z "${json_data}" ]]; then error "Archivo de datos está vacío" fi # Validar formato JSON básico if ! echo "${json_data}" | python3 -m json.tool >/dev/null 2>&1; then error "Datos no están en formato JSON válido" fi # Retornar datos echo "${json_data}" } # Función principal main() { case "${1:-discovery}" in "discovery"|"") check_container run_discovery ;; "status") if docker ps --format "table {{.Names}}" | grep -q "^${CONTAINER_NAME}$"; then echo "Container ${CONTAINER_NAME} is running" exit 0 else echo "Container ${CONTAINER_NAME} is not running" exit 1 fi ;; "logs") docker logs --tail 50 ${CONTAINER_NAME} ;; "help"|"-h"|"--help") cat << EOF Cisco MAC Discovery - Zabbix Integration Script USAGE: $0 [COMMAND] COMMANDS: discovery Ejecutar discovery y retornar JSON (default) status Verificar estado del contenedor logs Mostrar logs recientes del contenedor help Mostrar esta ayuda EJEMPLOS: # Usar en Zabbix Discovery Rule cisco_mac_discovery.sh # Verificar estado cisco_mac_discovery.sh status # Ver logs para troubleshooting cisco_mac_discovery.sh logs CONFIGURACIÓN ZABBIX: Discovery Rule: - Name: Cisco MAC Discovery - Type: External check - Key: cisco_mac_discovery.sh - Update interval: 5m EOF ;; *) error "Comando desconocido: ${1}. Usa 'help' para ver opciones disponibles." ;; esac } # Verificar dependencias if ! command -v docker >/dev/null 2>&1; then error "Docker no está instalado o no está en PATH" fi if ! command -v python3 >/dev/null 2>&1; then error "Python3 no está instalado o no está en PATH" fi # Ejecutar función principal main "$@"