Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Important
Cette fonctionnalité est en version bêta.
Cette page fournit des exemples de requêtes SQL pour les données OpenTelemetry ingérées dans des tables Delta par Zerobus Ingest OTLP. Pour plus d’informations sur les schémas de table et les colonnes, consultez la référence de table OpenTelemetry pour l’ingestion Zerobus.
Dans les exemples ci-dessous, remplacez <catalog>.<schema>.<prefix> le préfixe de nom de votre catalogue, de votre schéma et de votre table.
Les colonnes telles que , , attributesresource.attributeset instrumentation_scope.attributes (journaux) sont stockées en tant que bodyVARIANT. Utilisez la :key::type syntaxe pour extraire des valeurs. Par exemple, attributes:['http.method']::string retourne l’attribut http.method sous forme de chaîne.
Note
L’interrogation de VARIANT colonnes nécessite Databricks Runtime 15.3+. Pour les avantages de performances de réduction des variantes, utilisez Databricks Runtime 17.2+.
Travées
Les requêtes suivantes retournent des données de la table des segments, qui stocke les données de trace distribuées.
-- Recent spans with duration and attributes
SELECT
time,
service_name,
name,
(end_time_unix_nano - start_time_unix_nano) / 1000000 AS duration_ms,
status.code AS status_code,
attributes:['http.method']::string AS http_method,
attributes:['http.status_code']::int AS http_status
FROM <catalog>.<schema>.<prefix>_otel_spans
WHERE time > current_timestamp() - INTERVAL 1 HOUR
ORDER BY time DESC
LIMIT 100;
-- Filter spans by attribute value
SELECT *
FROM <catalog>.<schema>.<prefix>_otel_spans
WHERE attributes:['http.status_code']::int = 200
AND time > current_timestamp() - INTERVAL 1 HOUR;
-- Slowest operations by service
SELECT
service_name,
name,
COUNT(*) AS call_count,
AVG((end_time_unix_nano - start_time_unix_nano) / 1000000) AS avg_duration_ms,
PERCENTILE_APPROX((end_time_unix_nano - start_time_unix_nano) / 1000000, 0.95) AS p95_duration_ms
FROM <catalog>.<schema>.<prefix>_otel_spans
WHERE time > current_timestamp() - INTERVAL 1 HOUR
GROUP BY service_name, name
ORDER BY avg_duration_ms DESC;
-- Spans by service name, environment, and SDK version
SELECT
service_name,
resource.attributes:['deployment.environment']::string AS environment,
instrumentation_scope.attributes:['otel.library.version']::string AS sdk_version,
COUNT(*) AS span_count
FROM <catalog>.<schema>.<prefix>_otel_spans
WHERE time > current_timestamp() - INTERVAL 1 HOUR
GROUP BY service_name, environment, sdk_version;
Journaux
Les requêtes suivantes retournent des données à partir de la table des journaux d’activité, qui stocke les enregistrements de journal structurés et leurs niveaux de gravité.
-- Recent logs with body and attributes
SELECT
time,
service_name,
severity_text,
body::string AS message,
attributes:['exception.type']::string AS exception_type
FROM <catalog>.<schema>.<prefix>_otel_logs
WHERE time > current_timestamp() - INTERVAL 1 HOUR
ORDER BY time DESC
LIMIT 100;
-- Error logs by service
SELECT
service_name,
severity_text,
COUNT(*) AS log_count
FROM <catalog>.<schema>.<prefix>_otel_logs
WHERE severity_text IN ('ERROR', 'WARN')
AND time > current_timestamp() - INTERVAL 1 HOUR
GROUP BY service_name, severity_text
ORDER BY log_count DESC;
-- Structured log body
SELECT
time,
service_name,
body:message::string AS message,
body:error.code::int AS error_code
FROM <catalog>.<schema>.<prefix>_otel_logs
WHERE time > current_timestamp() - INTERVAL 1 HOUR
AND body:error.code IS NOT NULL;
Métriques
Les requêtes suivantes retournent des données à partir de la table de métriques, qui stocke les mesures de jauge, de somme et d’histogramme.
-- Recent metrics with values
SELECT
time,
service_name,
name,
metric_type,
COALESCE(gauge.value, sum.value) AS value
FROM <catalog>.<schema>.<prefix>_otel_metrics
WHERE time > current_timestamp() - INTERVAL 1 HOUR
ORDER BY time DESC
LIMIT 100;
-- Gauge metrics over time
SELECT
date_trunc('minute', time) AS minute,
name,
AVG(gauge.value) AS avg_value,
MAX(gauge.value) AS max_value
FROM <catalog>.<schema>.<prefix>_otel_metrics
WHERE metric_type = 'gauge'
AND time > current_timestamp() - INTERVAL 1 HOUR
GROUP BY 1, 2
ORDER BY minute;
-- Gauge attributes (attributes are nested inside each metric-type struct)
SELECT
time,
name,
gauge.value,
gauge.attributes:['host.name']::string AS host
FROM <catalog>.<schema>.<prefix>_otel_metrics
WHERE metric_type = 'gauge'
AND time > current_timestamp() - INTERVAL 1 HOUR;
-- Filter metrics by resource attribute
SELECT
time,
name,
gauge.value
FROM <catalog>.<schema>.<prefix>_otel_metrics
WHERE resource.attributes:['deployment.environment']::string = 'production'
AND metric_type = 'gauge'
AND time > current_timestamp() - INTERVAL 1 HOUR;
Étapes suivantes
- Référence de table OpenTelemetry pour l’ingestion Zerobus : référence pour les schémas de table et les définitions de colonnes pour les portées, les journaux et les tableaux de métriques.
- Configurez les clients OpenTelemetry (OTLP) pour envoyer des données au catalogue Unity : configurez un Kit de développement logiciel (SDK) OpenTelemetry ou un collecteur pour envoyer des données à Zerobus Ingest.
- Gestion des Erreurs d’Ingestion Zerobus : Dépannez les erreurs et les codes d’erreur courants.