ログ管理

ログを検索し、トレースを保つ

ログはリソース属性とトレースIDを保ったまま、構造化された状態で届きます。つまり検索結果は行き止まりではなく、どの行からでも、それを書き込んだリクエストを開けます。

画面

重大度・サービス・属性を1つのフィルタレールに

ファセットは実際に範囲内にある行から計算されるため、各重大度の横の件数は、これから表示される件数そのものであり、古い集計ではありません。

Structured log search with severity facets and attribute filters down the left rail
/logs severity >= WARN
signal
logs
transport
OTLP · no agent
severity
TRACE · DEBUG · INFO · WARN · ERROR · FATAL
filters
body · resource.* · log.*
joins.on
trace_id · span_id
buckets
5 min

動き

流れ続けるストリーム

行は書き込まれるそばから届き、それぞれにサービスと重大度のタグが付きます。これはテイル表示であり、検索が返すのと同じ行です。

logs · stream LIVE
12:04:18 INFO edge GET /api/orders/8421 200 412ms
12:04:18 INFO orders-api load_order order_id=8421 366ms
12:04:18 DEBUG auth verify_jwt iss=auth.maple.dev 38ms
12:04:18 INFO postgres SELECT line_items rows=12 158ms
12:04:18 INFO shipping rate_quote carrier=ups 96ms
12:04:18 WARN fedex-api POST /rates retried (1/3) 72ms
12:04:18 INFO redis SET order:8421:rate ttl=3600 14ms
12:04:19 INFO edge GET /api/cart 200 94ms
12:04:19 INFO cart-svc load_cart user=u_4109 58ms
12:04:19 DEBUG feature-flag evaluate fast_checkout=false
12:04:19 ERROR payments stripe.charge declined card=v•••4242 204ms
12:04:19 WARN payments fallback to authorize_only flow
12:04:19 INFO kafka produce orders.canceled offset=98041
12:04:20 INFO edge POST /webhooks/stripe 200 26ms
12:04:20 INFO events dispatch payment.failed → ops
12:04:20 DEBUG scheduler reschedule retry_at=12:04:25
12:04:20 INFO edge GET /api/inventory 200 41ms
12:04:20 INFO inventory lookup sku=SKU-9081 region=iad 23ms
12:04:20 WARN inventory stock low sku=SKU-9081 qty=3
12:04:21 INFO search query "red shoes" hits=412 82ms
12:04:21 INFO edge GET /api/recos 200 67ms
12:04:21 DEBUG recos model=v3.2 cohort=A2
12:04:21 INFO edge POST /api/feedback 201 18ms
12:04:21 INFO analytics track event=checkout_started
12:04:18 INFO edge GET /api/orders/8421 200 412ms
12:04:18 INFO orders-api load_order order_id=8421 366ms
12:04:18 DEBUG auth verify_jwt iss=auth.maple.dev 38ms
12:04:18 INFO postgres SELECT line_items rows=12 158ms
12:04:18 INFO shipping rate_quote carrier=ups 96ms
12:04:18 WARN fedex-api POST /rates retried (1/3) 72ms
12:04:18 INFO redis SET order:8421:rate ttl=3600 14ms
12:04:19 INFO edge GET /api/cart 200 94ms
12:04:19 INFO cart-svc load_cart user=u_4109 58ms
12:04:19 DEBUG feature-flag evaluate fast_checkout=false
12:04:19 ERROR payments stripe.charge declined card=v•••4242 204ms
12:04:19 WARN payments fallback to authorize_only flow
12:04:19 INFO kafka produce orders.canceled offset=98041
12:04:20 INFO edge POST /webhooks/stripe 200 26ms
12:04:20 INFO events dispatch payment.failed → ops
12:04:20 DEBUG scheduler reschedule retry_at=12:04:25
12:04:20 INFO edge GET /api/inventory 200 41ms
12:04:20 INFO inventory lookup sku=SKU-9081 region=iad 23ms
12:04:20 WARN inventory stock low sku=SKU-9081 qty=3
12:04:21 INFO search query "red shoes" hits=412 82ms
12:04:21 INFO edge GET /api/recos 200 67ms
12:04:21 DEBUG recos model=v3.2 cohort=A2
12:04:21 INFO edge POST /api/feedback 201 18ms
12:04:21 INFO analytics track event=checkout_started
14.2k events / minute retention 30d · structured

できること

ログ1行に対してできること

/logs?q=
本文と属性を検索
リソース属性とログ属性はブロブではなくカラムです。service.name、deployment.environment、独自のキーを、メッセージ本文と同じ方法で絞り込めます。
severity
意味としての重大度
OTelの6段階の重大度は、それぞれ固有の色とファセットを持ちます。WARNとERRORはクリック1回の距離にあり、どちらもテキスト一致に埋もれません。
trace_id
行の裏側のトレースを開く
トレースIDを持つ行からは、そのリクエストを開けます。しかも、その行が書き込まれた時点で実行中だったスパンの位置に移動します。
volume histogram
詳細の前にボリューム
結果の上のヒストグラムは重大度別に積み上げられているため、14:20のERRORの急増は、1行も読まないうちに見て取れます。
OTLP
OTelの定義どおりに送信
ログはトレースやメトリクスと同じOTLPで届きます。ログ転送エージェントも、維持すべき第2のパイプラインも、別途考慮すべき保持期間もありません。

次は

このデータを共有する画面

OTLPをMapleに向ける。

エンドポイントとキーが1つずつ。トレース、ログ、メトリクス、セッションが、最初のリクエストから同じトレースIDに集まります。