RousselTMLEARNING

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

Installer OpenObserve

1. Installer OpenObserve #

Binaire ou Docker Compose.

Avec Docker Compose #

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
    volumes:
      - o2-data:/data

volumes:
  o2-data:
docker compose up -d
curl http://localhost:5080/healthz
# {"status":"ok"}

L'interface est sur http://localhost:5080. Les identifiants de l'utilisateur racine ne servent qu'au premier démarrage : les changer ensuite dans le fichier ne change pas le mot de passe.

Avec le binaire #

ZO_ROOT_USER_EMAIL=root@example.com ZO_ROOT_USER_PASSWORD='Complexpass#123' ./openobserve
Erreur GLIBC_2.xx not found ? Nous l'avons rencontrée sur Debian 12. Prenez l'archive -linux-amd64-musl, qui ne dépend pas de la version de la glibc.

2. Les variables à connaître #

Tout se configure par l'environnement.

Réglages principaux #

VariableRôleDéfaut
ZO_DATA_DIRDossier local des données./data/openobserve/
ZO_LOCAL_MODENœud uniquetrue
ZO_LOCAL_MODE_STORAGEdisk ou s3disk
ZO_COMPACT_DATA_RETENTION_DAYSRétention globale, 3 jours minimum3650
ZO_INGEST_ALLOWED_UPTOÂge maximal des données acceptées, en heures5
ZO_PAYLOAD_LIMITTaille maximale d’une requête209715200
ZO_NODE_ROLERôles du nœudall
ZO_TELEMETRYTélémétrie anonyme vers l’éditeurtrue

Stocker dans S3 ou MinIO #

En mode local, on peut déjà sortir les données du disque. Le dossier local garde alors le WAL et les fichiers temporaires.

ZO_LOCAL_MODE: "true"
ZO_LOCAL_MODE_STORAGE: s3
ZO_S3_SERVER_URL: http://minio:9000
ZO_S3_REGION_NAME: us-east-1
ZO_S3_BUCKET_NAME: openobserve
ZO_S3_ACCESS_KEY: minioadmin
ZO_S3_SECRET_KEY: minioadmin
ZO_S3_PROVIDER: minio

3. Première ingestion #

Envoyer et retrouver des événements.

Envoyer #

Le chemin est toujours /api/<organisation>/<flux>/_json. Le flux est créé s'il n'existe pas.

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}]}

Interroger #

L'API de recherche attend du SQL et une période en microsecondes.

NOW=$(date +%s)
curl -s -u 'root@example.com:Complexpass#123' \
  -H 'Content-Type: application/json' \
  http://localhost:5080/api/default/_search \
  -d "{\"query\":{
        \"sql\":\"SELECT service, count(*) AS n, avg(duree_ms) AS moy FROM commandes GROUP BY service ORDER BY n DESC\",
        \"start_time\":$(( (NOW-3600)*1000000 )),
        \"end_time\":$(( (NOW+60)*1000000 )),
        \"from\":0,\"size\":10}}" | jq .hits

Ce que l'ingestion transforme #

Ces résultats ont été observés en envoyant {"Level":"INFO","http":{"status":500},"Tags":["a","b"]} :

EnvoyéStockéConséquence
LevellevelLes noms passent en minuscules
http.status (objet imbriqué)http_statusLes objets sont aplatis avec _
Tags: ["a","b"]Chaîne "[\"a\",\"b\"]"Un tableau devient du texte JSON
Le piège des données anciennes : un événement de plus de 5 heures est refusé, tout en renvoyant un code HTTP 200. Le détail est dans la réponse : "successful":0,"failed":1,"error":"Too old data...". Lisez donc le corps de la réponse pour vos reprises d'historique, et augmentez ZO_INGEST_ALLOWED_UPTO si besoin.

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

Mon suivi

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

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

💬 Poser une question

Articles recommandés

Ingestion Elasticsearch : Bulk API, ingest pipelines, enrich et reindex

Ingérer et transformer des données dans Elasticsearch : Bulk API, ingest pipelines et processeurs...

Installer Jaeger v2 : all-in-one, configuration et stockages

Lancer Jaeger v2 en all-in-one, comprendre son fichier de configuration (extensions jaeger_storag...

Installer Grafana Loki (Docker Compose, binaire et Helm)

Installer et valider Grafana Loki : configuration minimale, Docker Compose avec Grafana et Alloy,...

Ingérer des métriques dans VictoriaMetrics : scraping, vmagent et remote write

Toutes les façons d'alimenter VictoriaMetrics : remote write depuis Prometheus, scraping intégré,...

Maîtriser les Variables dans Grafana : Dynamisez vos Tableaux de Bord

Apprenez à utiliser les variables pour créer des tableaux de bord interactifs et réutilisables. D...

Alimenter OpenSearch : pipelines d'ingestion et Data Prepper

Transformer les données avec les pipelines d'ingestion, collecter avec Data Prepper, recevoir l'O...

Grafana Alloy : Guide complet pour collecter métriques, logs et traces

Tutoriel complet sur Grafana Alloy. Découvrez comment installer, configurer et utiliser ce collec...

Dynatrace : Gestion du RGPD et protection de la vie privée (Data Privacy)

Apprenez à configurer Dynatrace pour respecter le RGPD, masquer les données sensibles et activer ...

Maîtriser les Transformations dans Grafana : Manipulez vos données avec agilité

Apprenez à utiliser les transformations Grafana pour reformater, calculer et combiner vos données...

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 !