手動計装
ワークショップの第 2 部では、OpenTelemetry による手動計装が計測データ収集を強化する方法を実演することに焦点を当てます。より具体的には、今回のケースでは、producer-lambda関数からconsumer-lambda関数にトレースコンテキストデータを伝播させることができるようになります。これにより、現在は自動コンテキスト伝播をサポートしていない Kinesis ストリームを介しても、2 つの関数間の関係を見ることができるようになります。
手動計装ワークショップディレクトリとコンテンツ
再度、作業ディレクトリとそのファイルの一部を確認することから始めます。今回は o11y-lambda-workshop/manual ディレクトリです。ここにはワークショップの手動計装部分のすべてのコンテンツがあります。
manual ディレクトリ
以下のコマンドを実行して
o11y-lambda-workshop/manualディレクトリに移動します:lsコマンドでこのディレクトリの内容を確認します:出力には以下のファイルとディレクトリが含まれるはずです:
ワークショップの質問
このディレクトリと最初に始めた auto ディレクトリに何か違いがありますか?
auto と manual のファイルを比較する
見た目が同じように見えるこれらのファイルが実際に同じかどうか確認しましょう。
autoとmanualディレクトリのmain.tfファイルを比較します:- 違いはありません!(違いがあるはずはありません。もし違いがあれば、ワークショップ進行役に支援を求めてください)
次に、
producer.mjsファイルを比較してみましょう:- ここにはかなりの違いがあります!
ファイル全体を表示してその内容を調べたい場合は以下を実行します:
- 必要な手動計装タスクを処理するために、いくつかの OpenTelemetry オブジェクトを関数に直接インポートしていることに注目してください。
- プロデューサー関数でコンテキストを伝播するために、@opentelemetry/api から次のオブジェクトをインポートしています:
- context
- propagation
- trace
最後に、
consumer.mjsファイルを比較します:ここにもいくつかの注目すべき違いがあります。より詳しく見てみましょう:
- このファイルでは、次の @opentelemetry/api オブジェクトをインポートしています:
- propagation
- trace
- ROOT_CONTEXT
- これらを使用して、プロデューサー関数から伝播されたトレースコンテキストを抽出します
- その後、抽出したトレースコンテキストに
nameとsuperpowerに基づいた新しいスパン属性を追加します
- このファイルでは、次の @opentelemetry/api オブジェクトをインポートしています:
プロデューサー関数からのトレースコンテキスト伝播
以下のコードはプロデューサー関数内で次のステップを実行します:
- このトレース用のトレーサーを取得する
- コンテキストキャリアオブジェクトを初期化する
- アクティブスパンのコンテキストをキャリアオブジェクトに注入する
- Kinesis ストリームに配置しようとしているレコードを修正し、アクティブスパンのコンテキストをコンシューマーに運ぶキャリアを含める
コンシューマー関数でのトレースコンテキスト抽出
以下のコードはコンシューマー関数内で次のステップを実行します:
producer-lambdaから取得したコンテキストをキャリアオブジェクトに抽出する- 現在のコンテキストからトレーサーを抽出する
- 抽出したコンテキスト内でトレーサーを使用して新しいスパンを開始する
- ボーナス:メッセージからの値を含むカスタム属性など、追加の属性をスパンに追加する!
- 完了したら、スパンを終了する
これでどのような違いが生まれるか見てみましょう!