1. Chercher en SQL #
Le langage commun aux logs et aux traces.
Les requêtes utiles #
Toutes ces requêtes ont été exécutées sur OpenObserve 1.1.2.
-- Filtrer sur un champ
SELECT * FROM commandes WHERE level = 'error'
-- Chercher du texte dans un champ
SELECT * FROM commandes WHERE str_match(message, 'banque')
-- Chercher dans tous les champs de recherche plein texte
SELECT * FROM commandes WHERE match_all('banque')
-- Agréger
SELECT service, count(*) AS n, avg(duree_ms) AS moy
FROM commandes GROUP BY service ORDER BY n DESC
-- Courbe par minute
SELECT histogram(_timestamp, '1 minute') AS t, count(*) AS n
FROM commandes GROUP BY t ORDER BY t
-- Percentile
SELECT approx_percentile_cont(duree_ms, 0.95) AS p95 FROM commandes| Fonction | Usage |
|---|---|
str_match(champ, 'x') | Le champ contient x |
match_all('x') | Recherche dans les champs plein texte du flux |
histogram(_timestamp, '1 minute') | Découpe le temps pour les courbes |
approx_percentile_cont(c, 0.95) | Percentile approché |
2. PromQL pour les métriques #
Réutiliser ses requêtes Prometheus.
Une API compatible #
OpenObserve expose l'API de requête de Prometheus sous /api/<organisation>/prometheus. Grafana peut donc s'y connecter comme à un Prometheus.
curl -s -u 'root@example.com:Complexpass#123' \
'http://localhost:5080/api/default/prometheus/api/v1/query?query=cpu_usage' | jq .data.result3. Optimiser un flux #
Index, partitions et rétention.
Les réglages d'un flux #
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"}]}
}'| Réglage | Effet | Pour quels champs ? |
|---|---|---|
data_retention | Durée de conservation du flux, en jours | – |
full_text_search_keys | Champs couverts par match_all | Le message |
index_fields | Index sur un champ recherché | Identifiant, service |
partition_keys | Découpe les fichiers par valeur | Faible cardinalité : niveau, environnement |
Partitionner sur un champ très varié (identifiant de requête, utilisateur) crée une multitude de petits fichiers et ralentit tout. Réservez les partitions aux champs ayant peu de valeurs distinctes.
4. Transformer avec VRL #
Fonctions à la lecture ou à l'écriture.
Une fonction #
Les fonctions s'écrivent en VRL, le langage de Vector. Elles peuvent servir à la lecture, ou être appliquées à l'ingestion via un pipeline. Une fonction doit se terminer par ., qui renvoie l'événement.
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"}Pour l'essayer à la lecture, passez-la encodée en base64 dans query_fn : le champ grave apparaît alors dans les résultats, sans être stocké.
5. Tableaux de bord et traces #
L'exploration dans l'interface.
Tableaux de bord #
Les panneaux s'appuient sur une requête SQL ou PromQL, avec des variables pour filtrer par service ou environnement. Les tableaux de bord s'exportent en JSON : versionnez-les.
Traces #
Le menu Traces liste les requêtes et affiche leur chronologie. Pour passer d'un log à sa trace, faites porter trace_id à vos logs : le SDK OpenTelemetry le fait pour vous si l'appel se déroule dans une trace.
Mon suivi
Connectez-vous pour suivre votre progression et prendre des notes. Se connecter
Articles recommandés
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...
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...
MetricsQL : PromQL avec des super-pouvoirs
Les différences entre MetricsQL et PromQL : fenêtres implicites, fonctions supplémentaires (range...
Les bases de données Google Cloud : Cloud SQL, AlloyDB, Spanner, Firestore et Bigtable
Choisir une base de données sur Google Cloud : Cloud SQL et AlloyDB pour le relationnel, Spanner ...
Les bases de données sur Azure : Azure SQL, Cosmos DB, PostgreSQL et cache
Choisir une base de données managée sur Azure : Azure SQL Database et Managed Instance, Azure Dat...
Métriques Dynatrace : Data Explorer, sélecteurs de métriques, API et tableaux de bord
Exploiter les métriques dans Dynatrace : métriques intégrées et personnalisées, Data Explorer, sy...
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...
Alertes et pipelines dans OpenObserve
Créer un modèle, une destination et une alerte, éviter le blocage SSRF des webhooks et traiter le...
Dynatrace : Différences entre SQL Modifications, SQL Queries or Procedures, et SQL Transactions
Cet article détaille les différences entre trois concepts essentiels dans l'exécution des instruc...