RousselTMLEARNING

Artículo · ClickStack: del descubrimiento a la maestría

La telemetría en ClickHouse

Este artículo está disponible en francés.

1. L'exportateur ClickHouse #

OpenTelemetry vers SQL.

Configuration #

# Collector OpenTelemetry (distribution contrib)
exporters:
  clickhouse:
    endpoint: tcp://clickhouse:9000?dial_timeout=10s
    database: otel
    username: otel
    password: ${env:CLICKHOUSE_PASSWORD}
    ttl: 168h                  # rétention 7 jours
    create_schema: true        # crée les tables au démarrage
    logs_table_name: otel_logs
    traces_table_name: otel_traces
service:
  pipelines:
    logs:   { receivers: [otlp], processors: [batch], exporters: [clickhouse] }
    traces: { receivers: [otlp], processors: [batch], exporters: [clickhouse] }

L'exportateur crée des tables otel_logs, otel_traces et otel_metrics_* (par type de métrique) au format MergeTree, triées pour les requêtes par service et par temps.

2. Interroger en SQL #

Les colonnes principales.

Requêtes #

TableColonnes utiles
otel_tracesTimestamp, TraceId, SpanId, ParentSpanId, SpanName, ServiceName, Duration (ns), StatusCode, SpanAttributes (Map)
otel_logsTimestamp, TraceId, ServiceName, SeverityText, Body, LogAttributes (Map), ResourceAttributes (Map)
-- Latence p95 par opération sur la dernière heure
SELECT ServiceName, SpanName,
       quantile(0.95)(Duration) / 1e6 AS p95_ms, count() AS spans
FROM otel.otel_traces
WHERE Timestamp > now() - INTERVAL 1 HOUR AND SpanKind = 'Server'
GROUP BY ServiceName, SpanName
ORDER BY p95_ms DESC LIMIT 10;

-- Logs d'erreur d'une trace lente, en une jointure
SELECT l.Timestamp, l.ServiceName, l.Body
FROM otel.otel_logs AS l
WHERE l.TraceId IN (
  SELECT TraceId FROM otel.otel_traces
  WHERE Timestamp > now() - INTERVAL 1 HOUR AND Duration > 2e9 LIMIT 100)
  AND l.SeverityText = 'ERROR'
ORDER BY l.Timestamp;

-- Attribut à haute cardinalité : top clients en erreur
SELECT SpanAttributes['client.id'] AS client, countIf(StatusCode = 'Error') AS erreurs
FROM otel.otel_traces WHERE Timestamp > now() - INTERVAL 1 DAY
GROUP BY client ORDER BY erreurs DESC LIMIT 10;

3. Rétention et performance #

TTL et vues matérialisées.

Réglages #

-- Modifier la rétention d'une table existante
ALTER TABLE otel.otel_logs MODIFY TTL toDateTime(Timestamp) + INTERVAL 14 DAY;

-- Pré-agréger les métriques RED par minute
CREATE MATERIALIZED VIEW otel.red_par_minute
ENGINE = SummingMergeTree ORDER BY (ServiceName, SpanName, minute) AS
SELECT ServiceName, SpanName, toStartOfMinute(Timestamp) AS minute,
       count() AS requetes, countIf(StatusCode = 'Error') AS erreurs
FROM otel.otel_traces WHERE SpanKind = 'Server'
GROUP BY ServiceName, SpanName, minute;

-- Place occupée et taux de compression
SELECT table, formatReadableSize(sum(data_compressed_bytes)) AS compresse,
       round(sum(data_uncompressed_bytes) / sum(data_compressed_bytes), 1) AS ratio
FROM system.parts WHERE database = 'otel' AND active GROUP BY table;
Bonne Pratique : Avec le plugin ClickHouse de Grafana, ces requêtes deviennent des panneaux, avec des liens vers les traces : une option intéressante pour une équipe déjà sur Grafana.

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

Mi seguimiento

  • ⏱ Duración estimada : ≈ 7 min

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

💬 Hacer una pregunta

Artículos recomendados

Exploiter une plateforme d'observabilité sur ClickHouse et choisir son outil

Exploiter ClickHouse pour la télémétrie (réplication, disques, fusions, stockage objet, supervisi...

L'observabilité sur ClickHouse : pourquoi une base colonne change la donne

Pourquoi de plus en plus de plateformes d'observabilité stockent logs, traces et métriques dans C...

ClickStack : ClickHouse, HyperDX et OpenTelemetry

La pile d'observabilité officielle de ClickHouse : installation tout-en-un, interface HyperDX (re...

Bonnes pratiques SigNoz, ClickStack et ClickHouse pour l'observabilité

Check-list de production pour une plateforme d'observabilité sur ClickHouse : instrumentation Ope...

Utiliser SigNoz : APM, traces, logs, dashboards et alertes

Exploiter SigNoz au quotidien : vue APM des services, explorateur de traces et de logs, query bui...

Corréler traces, métriques, logs et profils avec OpenTelemetry

Relier les quatre signaux pour diagnostiquer vite : ressource commune, trace_id dans les logs, ex...

Grafana Alloy : Collecte et Transformation de Télémétrie

Apprenez à utiliser Grafana Alloy pour collecter, transformer et acheminer logs, métriques et tra...

Projet fil rouge : les quatre signaux de l'OpenTelemetry Demo dans la stack Grafana

Un projet fil rouge qui traverse les formations d'observabilité : déployer l'OpenTelemetry Demo, ...

Grafana Alloy vs OpenTelemetry Collector : Lequel choisir ?

Comparaison détaillée entre Grafana Alloy et l'OpenTelemetry Collector. Découvrez les avantages, ...

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!