このガイドで対応している項目:
| ✖️ ログ | ✖️ ️️メトリクス | ✅ トレース |
ログを ClickStack に送信するには、OpenTelemetry collector 経由で送信してください。
はじめに
OpenTelemetry パッケージをインストールする
次のコマンドで OpenTelemetry パッケージをインストールします。
bundle add opentelemetry-sdk opentelemetry-instrumentation-all opentelemetry-exporter-otlpOpenTelemetry + ログ用フォーマッタを設定する
次に、OpenTelemetry のトレーシング用インストルメンテーションを初期化し、 Rails ロガーのログメッセージ用フォーマッタを設定して、ログが自動的に トレースにひも付くようにします。カスタムフォーマッタがないと、ログは ClickStack 内で自動的に相関付けられません。
config/initializers フォルダ内に hyperdx.rb という名前のファイルを作成し、
そこに次の内容を追加します:
# config/initializers/hyperdx.rb
require 'opentelemetry-exporter-otlp'
require 'opentelemetry/instrumentation/all'
require 'opentelemetry/sdk'
OpenTelemetry::SDK.configure do |c|
c.use_all() # enables all trace instrumentation!
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 "Logger initialized !! 🐱"
end環境変数を設定する
続いて、OpenTelemetry Collector 経由で ClickStack にテレメトリーを送信するため、シェルで以下の環境変数を設定する必要があります。
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 \
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \
OTEL_SERVICE_NAME='<NAME_OF_YOUR_APP_OR_SERVICE>' \export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 \
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \
OTEL_SERVICE_NAME='<NAME_OF_YOUR_APP_OR_SERVICE>' \
OTEL_EXPORTER_OTLP_HEADERS='authorization=<YOUR_INGESTION_API_KEY>'OTEL_SERVICE_NAME 環境変数は HyperDX アプリでサービスを識別するために使用されます。値には任意の名前を指定できます。
OTEL_EXPORTER_OTLP_HEADERS 環境変数には、HyperDX アプリの Team Settings → API Keys で確認できる API key を指定します。