RousselTMLEARNING

TP · OpenObserve: del descubrimiento a la maestría

Práctica final: retención, función VRL y alerta por webhook con corrección

La corrección está integrada en el TP (Ver los recuadros verdes)

Lo que vas a aprender en este TP
  • Ajustar retención e índices
  • Escribir una función VRL
  • Recibir una alerta

Introducción #

Lo que vas a aprender en esta sección
  • Ajustar retención e índices
  • Escribir una función VRL
  • Recibir una alerta

Contexto. Tu maqueta debe ser explotable: conservar los logs 30 días, optimizar las búsquedas y avisar al equipo en cuanto falle un pago.

Requisitos: la primera práctica  ·  Duración estimada: 45 min

Una cadena de alerta completa.

Puesta en marcha #

Pasos guiados, con su corrección.

  1. 1. Preparar la pila

    ¿Por qué? El receptor es un contenedor vecino, es decir, una dirección privada: sin esta opción, OpenObserve rechaza el destino. No lo reproduzcas en producción.

    Añade un contenedor echo y la opción ZO_SKIP_SSRF_CHECKS, y vuelve a ingerir los eventos de la primera práctica.
    Ver la corrección
    services:
      openobserve:
        image: public.ecr.aws/zinclabs/openobserve:latest
        ports:
          - "5080:5080"
        environment:
          ZO_DATA_DIR: /data
          ZO_ROOT_USER_EMAIL: root@example.com
          ZO_ROOT_USER_PASSWORD: Complexpass#123
          ZO_SKIP_SSRF_CHECKS: "true"
        volumes:
          - o2-data:/data
    
      echo:
        image: mendhak/http-https-echo:latest
    
    volumes:
      o2-data:
    curl -u 'root@example.com:Complexpass#123' \
      -H 'Content-Type: application/json' \
      http://localhost:5080/api/default/commandes/_json \
      -d '[
        {"level":"error","service":"paiement","message":"timeout vers la banque","duree_ms":3100},
        {"level":"info","service":"paiement","message":"ok","duree_ms":120},
        {"level":"info","service":"panier","message":"ok","duree_ms":40}
      ]'
    # {"code":200,"status":[{"name":"commandes","successful":3,"failed":0}]}
  2. 2. Ajustar el flujo

    ¿Por qué? Estos ajustes deciden el coste y la velocidad.

    Fija 30 días de retención, texto completo en message, un índice en service y una partición en level.
    Ver la corrección
    curl -u 'root@example.com:Complexpass#123' -X PUT \
      -H 'Content-Type: application/json' \
      'http://localhost:5080/api/default/streams/commandes/settings?type=logs' \
      -d '{
        "data_retention": 30,
        "full_text_search_keys": {"add": ["message"]},
        "index_fields": {"add": ["service"]},
        "partition_keys": {"add": [{"field": "level", "types": "value"}]}
      }'
  3. 3. Escribir una función

    ¿Por qué? VRL transforma los eventos sin tocar la aplicación.

    Crea la función marque_grave, ábrela en el menú Functions y pruébala con un evento.
    Ver la corrección
    curl -u 'root@example.com:Complexpass#123' \
      -H 'Content-Type: application/json' \
      http://localhost:5080/api/default/functions \
      -d '{"name":"marque_grave","function":".grave = true\n.","params":"row","transType":0}'
    # {"code":200,"message":"Function saved successfully"}
  4. 4. Crear la cadena de alerta

    ¿Por qué? La alerta necesita el destino, que necesita la plantilla: el orden importa.

    Crea la plantilla, el destino y después la alerta.
    Ver la corrección
    A='root@example.com:Complexpass#123'
    curl -u "$A" -H 'Content-Type: application/json' \
      http://localhost:5080/api/default/alerts/templates \
      -d '{"name":"tpl_simple","type":"http","title":"",
           "body":"{\"alerte\":\"{alert_name}\",\"flux\":\"{stream_name}\",\"nb\":\"{alert_count}\"}"}'
    
    curl -u "$A" -H 'Content-Type: application/json' \
      http://localhost:5080/api/default/alerts/destinations \
      -d '{"name":"webhook_tp","url":"http://echo:8080/alerte","method":"post",
           "skip_tls_verify":false,"template":"tpl_simple","headers":{},"type":"http"}'
    A='root@example.com:Complexpass#123'
    curl -u "$A" -H 'Content-Type: application/json' \
      http://localhost:5080/api/v2/default/alerts \
      -d '{"name":"erreurs_paiement","stream_type":"logs","stream_name":"commandes",
           "is_real_time":false,"enabled":true,"owner":"root@example.com","folder_id":"default",
           "description":"Au moins une erreur en une minute","row_template":"","context_attributes":{},
           "query_condition":{"type":"sql","conditions":null,"promql":null,"promql_condition":null,
             "aggregation":null,"vrl_function":null,"multi_time_range":null,
             "sql":"SELECT count(*) AS nb FROM commandes WHERE level='"'"'error'"'"'"},
           "trigger_condition":{"period":1,"threshold":1,"frequency":1,"cron":"","operator":">=",
             "silence":0,"frequency_type":"minutes","timezone":null,"tolerance_in_seconds":null},
           "destinations":["webhook_tp"]}'
  5. 5. Disparar la alerta

    ¿Por qué? Una alerta que nunca se ha disparado no está probada.

    Envía errores y lee los registros del contenedor echo. Cuenta con uno o dos minutos.
    Ver la corrección
    for i in 1 2 3; do
      curl -s -u 'root@example.com:Complexpass#123' -H 'Content-Type: application/json' \
        http://localhost:5080/api/default/commandes/_json \
        -d '[{"level":"error","service":"paiement","message":"erreur de test"}]'
      sleep 30
    done
    docker compose logs echo | grep -i alerte

Nivel de dificultad : ●●●○○ (3/5)

Mi seguimiento

  • ⏱ Duración estimada : ≈ 45 min

Inicia sesión para seguir tu progreso y tomar notas. Iniciar sesión

💬 Hacer una pregunta

Artículos recomendados

Explorer ses données dans OpenObserve : SQL, PromQL et VRL

Chercher en SQL, interroger les métriques en PromQL, optimiser un flux (index, partitions, rétent...

Alertes et pipelines dans OpenObserve

Créer un modèle, une destination et une alerte, éviter le blocage SSRF des webhooks et traiter le...

Transformer avec VRL et tester ses pipelines Vector

Le langage VRL (Vector Remap Language) : analyse de logs (JSON, regex, syslog), gestion des erreu...

Vector : les transforms en détail (remap et VRL, route, filter, réduction et métriques)

Transformer les événements dans Vector : remap et le langage VRL (analyse, enrichissement, gestio...

OpenObserve : architecture et concepts

Comprendre OpenObserve : stockage Parquet, modes de déploiement, rôles (router, ingester, querier...

Envoyer ses logs, métriques et traces vers OpenObserve

Les points de réception d'OpenObserve : JSON, bulk, OTLP avec le Collector OpenTelemetry, Prometh...

Alertes, connecteurs et SLO dans Kibana

Créer des règles d'alerte dans Kibana (requête Elasticsearch, ES|QL, seuil personnalisé, logs), c...

Vector : sources, transforms, sinks et topologie

Les concepts de Vector (sources, transforms, sinks), la configuration YAML, les composants couran...

Installer OpenObserve et ingérer ses premières données

Installer OpenObserve avec Docker Compose ou le binaire, le configurer par ses variables ZO_*, en...

Apoyar

♥ APOYAR

Apoya RousselTM Learning

Los cursos, artículos, prácticas y certificados siguen siendo gratuitos y sin publicidad intrusiva. Una contribución libre, por el importe que elijas, financia el alojamiento, los entornos de prácticas y nuevos contenidos.

Contribuir con PayPal Importe libre · tarjeta o cuenta PayPalMás información
QR code PayPal
O escanea este código QR con tu teléfono

¡Gracias, cada contribución cuenta!