可観測性

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

概要

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

バックエンド 設定
ロギング Zap(JSON構造化) loggerlogmanager
メトリクス Prometheus prometheus
トレーシング OpenTelemetry otel

ロガー設定

基本ロガー

logger:
  mode: production     # developmentまたはproduction
  level: info          # debug, info, warn, error
  encoding: json       # jsonまたはconsole

ログマネージャ

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

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

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

自動コンテキスト

すべてのログに含まれるもの:

  • pid - プロセスID
  • location - エントリIDと行番号(例:app.api:handler:45

Prometheusメトリクス

prometheus:
  enabled: true
  address: "localhost:9090"

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

スクレイプ設定

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

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

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

トレースソース

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

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ワークフロー

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
関数呼び出し 関数ID process.pid, frame.id
プロセスライフサイクル {source}.started/terminated process.pid
キューメッセージ メッセージトピック ヘッダー内のトレースコンテキスト
Temporalワークフロー ワークフロー/アクティビティ名 workflow.id, run.id

コンテキスト伝播

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

  • 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 プロパゲーターリスト

ランタイム統計

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()

関連項目