OTel+ClickHouse+Grafanaでダッシュボード
OTel + ClickHouse + Grafanaの連携は済んでいる前提
Grafana > Dashboards
1. 右上のNew > New dashboard
2. とりあえずSave。Titleは「hoge」、Descriptionは「Otel+ClickHouse+Grafana」、Folderはデフォルト(Dashboards)
Panel追加
1. Add visualization
2. Data sourceを選択(clickhouse)
3. 右側バーにて、Visualzationで、「Table」を選択
code:sql
SELECT "TraceId" as "トレースID",
"ServiceName" as "サービス名",
"SpanName" as "スパン名",
"Timestamp" as "開始時間",
"Duration" as "Duration(マイクロ秒)"
FROM "myotel"."otel_traces"
WHERE ( Timestamp >= $__fromTime AND Timestamp <= $__toTime )
AND ( ParentSpanId = '' )
AND ( Duration > 0 )
ORDER BY Timestamp DESC, Duration DESC LIMIT 1000
multiply("Duration", 0.000001) as duration
は、渡された2つの値の掛け算の結果
やっていることは、マイクロ秒→秒にしている
例:1530000だった場合、1.53秒となる
トレース
code:sql
WITH
'ee34e50c81aac6bf229914ac580643cc' as trace_id
, (SELECT min(Start) FROM "myotel"."otel_traces_trace_id_ts" WHERE TraceId = trace_id) as trace_start
, (SELECT max(End) + 1 FROM "myotel"."otel_traces_trace_id_ts" WHERE TraceId = trace_id) as trace_end
SELECT
"TraceId" as traceID
, "SpanId" as spanID
, "ParentSpanId" as parentSpanID
, "ServiceName" as serviceName
, "SpanName" as operationName
, multiply(toUnixTimestamp64Nano("Timestamp"), 0.000001) as startTime
, multiply("Duration", 0.000001) as duration
, arrayMap(key -> map('key', key, 'value',"SpanAttributes"key), mapKeys("SpanAttributes")) as tags , arrayMap(key -> map('key', key, 'value',"ResourceAttributes"key) , mapKeys("ResourceAttributes")) as serviceTags
, if("StatusCode" IN ('Error', 'STATUS_CODE_ERROR'), 2, 0) as statusCode
, arrayMap((name, timestamp, attributes) -> tuple(name, toString(toUnixTimestamp64Milli(timestamp))
, arrayMap( key -> map('key', key, 'value', attributeskey), mapKeys(attributes)))::Tuple(name String, timestamp String, fields Array(Map(String, String))), "Events".Name, "Events".Timestamp, "Events".Attributes) AS logs , arrayMap((traceID, spanID, attributes) -> tuple(traceID, spanID, arrayMap(key -> map('key', key, 'value', attributeskey), mapKeys(attributes)))::Tuple(traceID String, spanID String, tags Array(Map(String, String))), "Links".TraceId, "Links".SpanId, "Links".Attributes) AS references , "SpanKind" as kind
, "StatusMessage" as statusMessage
, "TraceState" as traceState
FROM "myotel"."otel_traces"
WHERE
traceID = trace_id
AND "Timestamp" >= trace_start
AND "Timestamp" <= trace_end
LIMIT 1000