Skip to content

Giga-Usagiのトレース計装

This content is a draft and will not be included in production builds.

Perlでは公式の計装ライブラリが存在しないのでX-Rayレシーバを経由してトレースを取得する。オリジナルの計装ライブラリ実装は lib/Plack/Middleware/XRay.pm だけど、Giga-Usagi の場合はカスタムしているらしくて、 lib/Plack/Middleware/GigaXRay.pm がそれを行うモジュールとなっている。

各種設定は環境変数でも行える。

環境変数名意味
XRAY_SAMPLING_RATEサンプリングレート
APP_ENVX-Rayの名前が giga-$APP_ENV となる

ただし現状では、アプリケーションのサンプリングレートはデフォルトの 1.0 が使われていて、すべてのトレースが awsxrayreceiver へ送られているようにみえる。そうしておいて batchprocessor で振り分けているのかもしれない。

上記の他に、X-Ray関連の設定は lib/Giga/Config.pm にも環境ごとに分かれて定義されている。このうち common はすべての環境で共通の設定となる。

環境パラメータ
commonaws.xray.namegiga-$APP_ENV
commonaws.xray.sampling-rate$XRAY_SAMPLING_RATE または0.0
commonaws.xray.elapsed-threshold0.0 (秒)
productionaws.xray.elapsed-threshold0.2 (秒)
jam_reviewaws.xray.elapsed-threshold0.31 (秒)
jam_phase5aws.xray.elapsed-threshold0.31 (秒)
testaws.xray.sampling-rate0.0

このとき、パラメータはPlackの enable_ifGigaXRay モジュールを有効化して渡される。ここで sampling-rate が0以下ならトレースを無効化する。有効な場合、Plackミドルウェアのルールで、モジュールの call サブルーチンが呼ばれる。

では、どのトレースを送出するかの決定は、サンプリングレートの比率で対象となった場合、またはリクエストの処理時間が elapsed-threshold で設定した秒を超えた場合にトレースを送出する。

設定はおそらく Dockerfiles/otel-collector/config.yaml だろう。