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_ENV | X-Rayの名前が giga-$APP_ENV となる |
ただし現状では、アプリケーションのサンプリングレートはデフォルトの 1.0 が使われていて、すべてのトレースが awsxrayreceiver へ送られているようにみえる。そうしておいて batchprocessor で振り分けているのかもしれない。
上記の他に、X-Ray関連の設定は lib/Giga/Config.pm にも環境ごとに分かれて定義されている。このうち common はすべての環境で共通の設定となる。
| 環境 | パラメータ | 値 |
|---|---|---|
| common | aws.xray.name | giga-$APP_ENV |
| common | aws.xray.sampling-rate | $XRAY_SAMPLING_RATE または0.0 |
| common | aws.xray.elapsed-threshold | 0.0 (秒) |
| production | aws.xray.elapsed-threshold | 0.2 (秒) |
| jam_review | aws.xray.elapsed-threshold | 0.31 (秒) |
| jam_phase5 | aws.xray.elapsed-threshold | 0.31 (秒) |
| test | aws.xray.sampling-rate | 0.0 |
このとき、パラメータはPlackの enable_if で GigaXRay モジュールを有効化して渡される。ここで sampling-rate が0以下ならトレースを無効化する。有効な場合、Plackミドルウェアのルールで、モジュールの call サブルーチンが呼ばれる。
では、どのトレースを送出するかの決定は、サンプリングレートの比率で対象となった場合、またはリクエストの処理時間が elapsed-threshold で設定した秒を超えた場合にトレースを送出する。
OpenTelemetry Collector
Section titled “OpenTelemetry Collector”設定はおそらく Dockerfiles/otel-collector/config.yaml だろう。