メインコンテンツへスキップ
メインコンテンツへスキップ

Ruby on Rails

このガイドで扱う統合対象は次のとおりです:

✖️ ログ✖️ ️️メトリクス✅ トレース

ClickStack にログを送信するには、OpenTelemetry collector を経由して送信してください。

はじめに

OpenTelemetry パッケージをインストールする

次のコマンドで OpenTelemetry パッケージをインストールします。

bundle add opentelemetry-sdk opentelemetry-instrumentation-all opentelemetry-exporter-otlp

OpenTelemetry とロガーフォーマッタを設定する

次に、OpenTelemetry のトレーシング用インストルメンテーションを初期化し、 Rails の logger 用のログメッセージフォーマッタを設定して、ログが自動的に トレースにひも付けられるようにする必要があります。カスタムフォーマッタがない場合、 ログは ClickStack 上で自動的に相関付けられません。

config/initializers ディレクトリ内に hyperdx.rb というファイルを作成し、 次の内容を追加します。

# config/initializers/hyperdx.rb \{#configinitializershyperdxrb}

require 'opentelemetry-exporter-otlp'
require 'opentelemetry/instrumentation/all'
require 'opentelemetry/sdk'

OpenTelemetry::SDK.configure do |c|
  c.use_all() # すべてのトレース計装を有効化
end

Rails.application.configure do
  Rails.logger = Logger.new(STDOUT)
  # Rails.logger.log_level = Logger::INFO # デフォルトはDEBUGですが、本番環境ではINFO以上が推奨されます
  Rails.logger.formatter = proc do |severity, time, progname, msg|
    span_id = OpenTelemetry::Trace.current_span.context.hex_span_id
    trace_id = OpenTelemetry::Trace.current_span.context.hex_trace_id
    if defined? OpenTelemetry::Trace.current_span.name
      operation = OpenTelemetry::Trace.current_span.name
    else
      operation = 'undefined'
    end

    { "time" => time, "level" => severity, "message" => msg, "trace_id" => trace_id, "span_id" => span_id,
      "operation" => operation }.to_json + "\n"
  end

  Rails.logger.info "ロガーを初期化しました !! 🐱"
end

環境変数を設定する

以降、ClickStack にテレメトリデータを送信するために、シェルで次の環境変数を設定します。

export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 \
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \
OTEL_SERVICE_NAME='<アプリまたはサービスの名前>' \
OTEL_EXPORTER_OTLP_HEADERS='authorization=<インジェストAPIキー>'

OTEL_SERVICE_NAME 環境変数は、HyperDX アプリ内で自分のサービスを識別するために使用されます。任意の名前を設定できます。

OTEL_EXPORTER_OTLP_HEADERS 環境変数には、HyperDX アプリの Team Settings → API Keys から取得できる API キーを設定します。