RousselTMLEARNING

TP · OpenObserve : de la découverte à l'expertise

TP Final : Rétention, fonction VRL et alerte par webhook avec correction

La correction est intégrée au TP (Voir les encadrés de couleur vert)

Ce que vous allez apprendre dans ce TP
  • Régler rétention et index
  • Écrire une fonction VRL
  • Recevoir une alerte

Introduction #

Ce que vous allez apprendre dans cette section
  • Régler rétention et index
  • Écrire une fonction VRL
  • Recevoir une alerte

Contexte. Votre maquette doit devenir exploitable : conserver les logs 30 jours, optimiser les recherches et prévenir l'équipe dès qu'un paiement échoue.

Prérequis : le premier TP  ·  Durée estimée : 45 min

Une chaîne d'alerte complète.

Mise en place #

Étapes guidées, avec leur correction.

  1. 1. Préparer la pile

    Pourquoi ? Le récepteur est un conteneur voisin, donc une adresse privée : sans cette option, OpenObserve refuse la destination. À ne pas reproduire en production.

    Ajoutez un conteneur echo et l'option ZO_SKIP_SSRF_CHECKS, puis réinjectez les événements du premier TP.
    Voir la correction
    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. Régler le flux

    Pourquoi ? Ces réglages décident du coût et de la vitesse.

    Fixez 30 jours de rétention, le plein texte sur message, un index sur service et une partition sur level.
    Voir la correction
    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. Écrire une fonction

    Pourquoi ? VRL transforme les événements sans toucher à l'application.

    Créez la fonction marque_grave, puis ouvrez-la dans le menu Functions et testez-la sur un événement.
    Voir la correction
    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. Créer la chaîne d'alerte

    Pourquoi ? L'alerte a besoin de la destination, qui a besoin du modèle : l'ordre compte.

    Créez le modèle, la destination, puis l'alerte.
    Voir la correction
    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. Déclencher l'alerte

    Pourquoi ? Une alerte jamais déclenchée n'est pas une alerte testée.

    Envoyez des erreurs et lisez les journaux du conteneur echo. Comptez une à deux minutes.
    Voir la correction
    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

Niveau de difficulté : ●●●○○ (3/5)

Mon suivi

  • ⏱ Durée estimée : ≈ 45 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

💬 Poser une question

Articles recommandés

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...

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 : 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...

La rétention des données dans Dynatrace : Grail, buckets et durées par type de données

Comprendre combien de temps Dynatrace conserve logs, traces, métriques, sessions et événements, g...

Stocker et interroger la télémétrie directement dans ClickHouse

Envoyer logs et traces dans ClickHouse avec l'exportateur OpenTelemetry, comprendre le schéma des...

Envoyer ses logs, métriques et traces vers OpenObserve

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

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !