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. 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 conteneurechoet l'optionZO_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. 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 surmessage, un index surserviceet une partition surlevel.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. Écrire une fonction
Pourquoi ? VRL transforme les événements sans toucher à l'application.
Créez la fonctionmarque_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. 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. 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 conteneurecho. 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
Connectez-vous pour suivre votre progression et prendre des notes. Se connecter
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...