Guía: Envía Alertas desde Bash con Webhooks

Una de las formas más potentes de utilizar AlertHub es integrarlo en tus scripts ddel sistema. Ya sea que estés ejecutando copias de seguridad nocturnas, tareas cron o despliegues CI/CD, recibir una notificación cuando algo sale mal (o bien) es crucial.

En este tutorial, configuraremos un entorno de Linux para enviar alertas de manera segura utilizando variables de entorno.

1. Obtén tu Clave de Proyecto

Primero, necesitas las credenciales de tu proyecto:

  1. Ve a tu panel de AlertHub.
  2. Crea un nuevo Proyecto (o usa uno existente).
  3. Copia la Secret Key (generalmente comienza con sk_...).

2. Configura la Variable de Entorno

Para no escribir tu clave secreta (hardcode) en cada script, es una buena práctica guardarla en una variable de entorno.

Abre tu terminal y ejecuta:

export ALERTHUB_KEY="tu_secret_key_aqui"

Para hacerlo permanente, agrega esa línea a tu archivo ~/.bashrc o ~/.zshrc.

3. Envía una Alerta con cURL

Ahora podemos usar curl para enviar una petición HTTP POST a la API de ingestión de AlertHub. Usaremos la variable $ALERTHUB_KEY que acabamos de definir.

Copia y pega este comando:

curl -X POST https://api.thealerthub.com/sendAlert \
  -H "Content-Type: application/json" \
  -d '{
    "ah_key": "'"$ALERTHUB_KEY"'",
    "ah_title": "Backup Completado",
    "ah_description": "La copia de seguridad de la base de datos finalizó correctamente.",
    "ah_level": "info",
    "ah_source": "BackupScripts"
  }'

¿Qué está pasando aquí?

  • -X POST: Indicamos que es una petición de tipo POST.
  • -H "Content-Type:...": Le decimos al servidor que enviamos datos en formato JSON.
  • "ah_key": "'"$ALERTHUB_KEY"'": Aquí está el truco de bash. Usamos comillas dobles y simples para insertar el valor de la variable dentro del string JSON.

Bonus: Función Bash Avanzada

Para hacer esto aún más potente, puedes añadir esta función a tu .bashrc o .zshrc. Soporta flags (-t, -d, -l, -s), configuración interactiva y rotación de claves.

alerthub_alert() {
    local title=""
    local desc=""
    local level="info"
    local source="BashScript"
    local change_key=false

    # Parsear argumentos
    while [[ "$#" -gt 0 ]]; do
        case $1 in
            -t) title="$2"; shift ;;
            -d) desc="$2"; shift ;;
            -l) level="$2"; shift ;;
            -s) source="$2"; shift ;;
            --change-project-key) change_key=true ;;
            *) echo "Parámetro desconocido: $1"; return 1 ;;
        esac
        shift
    done

    # Chequear API Key o petición de cambio
    if [[ "$change_key" == true ]] || [[ -z "$ALERTHUB_KEY" ]]; then
        if [[ -z "$ALERTHUB_KEY" ]]; then
            echo "ALERTHUB_KEY no encontrada."
        fi
        
        echo -n "Introduce tu Secret Key de AlertHub (Intro para cancelar): "
        read -r input_key
        
        if [[ -n "$input_key" ]]; then
            export ALERTHUB_KEY="$input_key"
            echo "✅ ALERTHUB_KEY guardada para esta sesión."
            
            # Opcional: Preguntar para persistir
            echo -n "¿Quieres guardarla en la config de tu shell? (y/n): "
            read -r save_persist
            if [[ "$save_persist" == "y" ]]; then
                echo "export ALERTHUB_KEY=\"$input_key\"" >> ~/$(basename $SHELL)rc
                echo "Guardado en ~/$(basename $SHELL)rc"
            fi
        elif [[ -z "$ALERTHUB_KEY" ]]; then
             echo "❌ La clave es necesaria para enviar alertas. Saliendo."
             return 1
        fi
    fi

    # Salir si solo queríamos cambiar la clave
    if [[ "$change_key" == true && -z "$title" ]]; then return 0; fi

    # Validación
    if [[ -z "$title" ]]; then
        echo "Error: El título es obligatorio. Usa -t \"Mi Título\""
        return 1
    fi

    # Enviar Petición
    curl -s -X POST https://api.thealerthub.com/sendAlert \
      -H "Content-Type: application/json" \
      -d "{
        \"ah_key\": \"$ALERTHUB_KEY\",
        \"ah_title\": \"$title\",
        \"ah_description\": \"$desc\",
        \"ah_level\": \"$level\",
        \"ah_source\": \"$source\"
      }" > /dev/null
      
    if [ $? -eq 0 ]; then
        echo "¡Alerta enviada correctamente! 🚀"
    else
        echo "Fallo al enviar la alerta."
    fi
}

Ejemplos de Uso

1. Verificar o Cambiar Clave:

alert --change-project-key

2. Enviar una alerta simple:

alert -t "Despliegue Finalizado"

3. Enviar una alerta crítica completa:

alert -t "Error de Base de Datos" -d "Timeout de conexión en 192.168.1.5" -l "critical"