first commit
This commit is contained in:
Executable
+132
@@ -0,0 +1,132 @@
|
||||
#!/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 "$@"
|
||||
Reference in New Issue
Block a user