コンテンツにスキップ

可観測性

Wippyアプリケーションのロギング、メトリクス、分散トレーシングを設定します。

Wippyは起動時に設定される3つの可観測性の柱を提供します:

バックエンド設定
ロギングZap(JSON構造化)loggerlogmanager
メトリクスPrometheusprometheus
トレーシングOpenTelemetryotel
logger:
encoding: json # jsonまたはconsole

レベルと出力は CLI フラグ(-v-c-s)で制御されます — yaml から読み取られるのは encoding のみです。

ログマネージャはログの伝播とイベントストリーミングを制御します:

logmanager:
propagate_downstream: true # 子コンポーネントに伝播
stream_to_events: false # ログをイベントバスに転送
min_level: -1 # -1=debug(デフォルト), 0=info, 1=warn, 2=error

stream_to_eventsが有効な場合、ログエントリはイベントになり、プロセスはイベントバス経由でサブスクライブできます。

Luaからloggerモジュール経由で出力されるログには、以下が自動的に含まれます:

  • pid - 現在のプロセスのPID
  • location - エントリIDと呼び出し行(例:app.api:handler:45
prometheus:
enabled: true
address: "localhost:9090"

メトリクスは設定されたアドレスの/metricsで公開されます。

prometheus.yml
scrape_configs:
- job_name: 'wippy'
static_configs:
- targets: ['localhost:9090']
scrape_interval: 15s

Luaメトリクス APIについてはメトリクスモジュールを参照してください。

OTELは分散トレーシングとオプションのメトリクスエクスポートを提供します。

otel:
enabled: true
endpoint: "localhost:4318"
protocol: http/protobuf # grpcまたはhttp/protobuf
service_name: my-app
service_version: "1.0.0"
insecure: false # 非TLS接続を許可
sample_rate: 1.0 # 0.0から1.0
traces_enabled: true
metrics_enabled: false
propagators:
- tracecontext
- baggage

特定のコンポーネントのトレーシングを有効化:

otel:
enabled: true
endpoint: "localhost:4318"
service_name: my-app
# HTTPリクエストトレーシング
http:
enabled: true
extract_headers: true # 受信トレースコンテキストを読み取り
inject_headers: true # 送信トレースコンテキストを書き込み
# プロセスライフサイクルトレーシング
process:
enabled: true
trace_lifecycle: true # spawn/exitイベントをトレース
# キューメッセージトレーシング
queue:
enabled: true
# 関数呼び出しトレーシング
interceptor:
enabled: true
order: 0 # インターセプター実行順序

Temporalワークフローのトレーシングを有効化:

otel:
enabled: true
endpoint: "localhost:4318"
service_name: my-app
temporal:
enabled: true

有効な場合、Temporal SDKのトレーシングインターセプターがクライアントとワーカーの両方の操作に登録されます。

トレースされる操作:

  • ワークフローの開始と完了
  • アクティビティ実行
  • 子ワークフロー呼び出し
  • シグナルとクエリ処理
コンポーネントスパン名属性
HTTPリクエスト{METHOD} {route}http.method, http.url, http.host
関数呼び出し関数IDprocess.pid, frame.id
プロセスライフサイクル{source}.started/terminatedprocess.pid
キューメッセージメッセージトピックヘッダー内のトレースコンテキスト
Temporalワークフローワークフロー/アクティビティ名workflow.id, run.id

トレースコンテキストは自動的に伝播されます:

  • HTTP → 関数: W3C Trace Contextヘッダー
  • 関数 → 関数: フレームコンテキスト継承
  • プロセス → プロセス: spawnコンテキスト
  • キュー publish → consume: メッセージヘッダー

OTELは環境変数で設定できます:

変数説明
OTEL_SDK_DISABLEDtrueに設定してOTELを無効化
OTEL_EXPORTER_OTLP_ENDPOINTコレクターエンドポイント
OTEL_EXPORTER_OTLP_PROTOCOLgrpcまたはhttp/protobuf
OTEL_SERVICE_NAMEサービス名
OTEL_SERVICE_VERSIONサービスバージョン
OTEL_TRACES_SAMPLER_ARGサンプルレート(0.0-1.0)
OTEL_PROPAGATORSプロパゲーターリスト

systemモジュールは内部ランタイム統計を提供します:

local system = require("system")
-- メモリ統計
local mem = system.memory.stats()
-- mem.alloc, mem.heap_alloc, mem.heap_objects, etc.
-- goroutine数
local count = system.runtime.goroutines()
-- スーパーバイザ状態
local states = system.supervisor.states()