可観測性
Wippyアプリケーションのロギング、メトリクス、分散トレーシングを設定します。
Wippyは起動時に設定される3つの可観測性の柱を提供します:
| 柱 | バックエンド | 設定 |
|---|---|---|
| ロギング | Zap(JSON構造化) | loggerとlogmanager |
| メトリクス | Prometheus | prometheus |
| トレーシング | OpenTelemetry | otel |
logger: encoding: json # jsonまたはconsoleレベルと出力は CLI フラグ(-v、-c、-s)で制御されます — yaml から読み取られるのは encoding のみです。
ログマネージャ
Section titled “ログマネージャ”ログマネージャはログの伝播とイベントストリーミングを制御します:
logmanager: propagate_downstream: true # 子コンポーネントに伝播 stream_to_events: false # ログをイベントバスに転送 min_level: -1 # -1=debug(デフォルト), 0=info, 1=warn, 2=errorstream_to_eventsが有効な場合、ログエントリはイベントになり、プロセスはイベントバス経由でサブスクライブできます。
自動コンテキスト
Section titled “自動コンテキスト”Luaからloggerモジュール経由で出力されるログには、以下が自動的に含まれます:
pid- 現在のプロセスのPIDlocation- エントリIDと呼び出し行(例:app.api:handler:45)
Prometheusメトリクス
Section titled “Prometheusメトリクス”prometheus: enabled: true address: "localhost:9090"メトリクスは設定されたアドレスの/metricsで公開されます。
スクレイプ設定
Section titled “スクレイプ設定”scrape_configs: - job_name: 'wippy' static_configs: - targets: ['localhost:9090'] scrape_interval: 15sLuaメトリクス APIについてはメトリクスモジュールを参照してください。
OpenTelemetry
Section titled “OpenTelemetry”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トレースソース
Section titled “トレースソース”特定のコンポーネントのトレーシングを有効化:
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ワークフロー
Section titled “Temporalワークフロー”Temporalワークフローのトレーシングを有効化:
otel: enabled: true endpoint: "localhost:4318" service_name: my-app
temporal: enabled: true有効な場合、Temporal SDKのトレーシングインターセプターがクライアントとワーカーの両方の操作に登録されます。
トレースされる操作:
- ワークフローの開始と完了
- アクティビティ実行
- 子ワークフロー呼び出し
- シグナルとクエリ処理
トレースされるもの
Section titled “トレースされるもの”| コンポーネント | スパン名 | 属性 |
|---|---|---|
| HTTPリクエスト | {METHOD} {route} | http.method, http.url, http.host |
| 関数呼び出し | 関数ID | process.pid, frame.id |
| プロセスライフサイクル | {source}.started/terminated | process.pid |
| キューメッセージ | メッセージトピック | ヘッダー内のトレースコンテキスト |
| Temporalワークフロー | ワークフロー/アクティビティ名 | workflow.id, run.id |
コンテキスト伝播
Section titled “コンテキスト伝播”トレースコンテキストは自動的に伝播されます:
- HTTP → 関数: W3C Trace Contextヘッダー
- 関数 → 関数: フレームコンテキスト継承
- プロセス → プロセス: spawnコンテキスト
- キュー publish → consume: メッセージヘッダー
OTELは環境変数で設定できます:
| 変数 | 説明 |
|---|---|
OTEL_SDK_DISABLED | trueに設定してOTELを無効化 |
OTEL_EXPORTER_OTLP_ENDPOINT | コレクターエンドポイント |
OTEL_EXPORTER_OTLP_PROTOCOL | grpcまたはhttp/protobuf |
OTEL_SERVICE_NAME | サービス名 |
OTEL_SERVICE_VERSION | サービスバージョン |
OTEL_TRACES_SAMPLER_ARG | サンプルレート(0.0-1.0) |
OTEL_PROPAGATORS | プロパゲーターリスト |
ランタイム統計
Section titled “ランタイム統計”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()- ロガーモジュール - Luaロギング API
- メトリクスモジュール - Luaメトリクス API
- システムモジュール - ランタイム統計