Files
los-vecinos-de-cisco/old/zabbix_integration.sh
T
2025-12-09 12:45:15 +01:00

132 lines
3.5 KiB
Bash
Executable File

#!/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 "$@"