Relicに関する疑問がある時はまずこちらへ。すべての製品とエージェントに関してお答えします。実施するトレーニングでは、デジタルビジネスに関して優れた判断を行うのに必要なインサイトを手に入れることができます。Relicのお客様やスタッフと繋がれる場所です。(英語)当社が誇る技術エキスパートのチームと繋がり、ニーズに応じたソリューションを見つけましょう。Infrastructure対象者システム開発チーム、システム運用チーム、SRE効果パブリッククラウドベンダーの提供するマネージドなメッセージキューやKafkaやRabbitMQといったOSSのツールが普及するにつれ、要件に合わせた分散システムが作りやすくなってきています。そのような分散システムのObservabilityはどのように獲得すればいいでしょうか。その方法の一つとして分散トレーシングがあります。分散トレーシングによって、サービス間がどの様に呼び出しあっているか、それぞれどこにボトルネックがあるのか、といった情報を実際に実行されているリクエストを元に可視化します。Agentを入れ設定を有効にすることで分散トレーシングの機能を利用できます。Relicはサービス間のgRPCを含むHTTP呼び出しは多くの言語・フレームワークにおいてデフォルトでトレースを取得、可視化できます。疎結合なシステムとなるメッセージキューを挟む呼び出しを分散トレーシングとして可視化することができるとさらに分散トレーシングの価値が高まります。Pub/Subと言ったクラウドサービスを経由して、複数のアプリケーションで連携して動作するトランザクションを「疎結合な繋がりをもつトランザクション」と表現しています。Relicの分散トレーシングは特定の製品に依存しない構成が可能ですので、多くのツールを同時に複数利用しているケースでも分散トレーシングとしてまとめて可視化することが可能です。RabbitMQを挟んで、メッセージを送信する側と受信する側の(単純な)二つのトランザクションを分散トレーシングで見るとこの様に見えます。HTTPで繋がりをもつ場合、通常呼び出した側と呼び出された側のSpanは重なりますが、メッセージキューなどの場合は滞留する時間があります。分散トレーシングを設定することで滞留時間を含めて可視化することができます。Mapで繋がりが可視化されますが、手動で設定した場合も繋がりが確認できます。メッセージキューをInfrastructureのIntegrationで可視化することで、全体の状況の把握の可能になります。分散トレーシングで特定のリクエストに遅延が発生していた時、メッセージキュー全体の状況はどうだったのか、あるいはその逆をすぐに調査することが可能です。分散トレーシングのペイロードを扱うAPIを利用します。Agentに用意されており、それを利用します。Agentをインストールし、分散トレーシングを有効化しておく必要があります。呼び出す側も呼び出される側もトランザクションが開始されている必要があります。Webアプリケーションから呼び出す場合は多くのフレームワークでデフォルトでトランザクションが設定されていますが、Queueを受け取る側のアプリケーションはコンソールアプリケーションの様なバックグラウンドプロセスとして処理すること多いでしょう。その場合は、手動でnon-webトランザクションとして設定する必要があります。呼び出し側では分散トレーシングのペイロードを生成するAPIを呼び出します。この返り値はJSONフォーマットの文字列です。取得した文字列を適切にフォーマットしてメッセージの一部としてメッセージキューに送信します。Coreで設定する場合は次の様になります。全体のコードはこちら。出された側では、メッセージに含まれるペイロードを受け取りAPIを呼び出します。APIはJSONフォーマット、もしくはそれをBase64エンコードした文字列を受け取れるため、適切にフォーマットして引き渡します。Javaの場合は次の様になります。全体のコードはこちら。//メッセージを表現するバイト配列。//payloadを含むJSONオブジェクトを表現する文字列として格納されている想定。goの場合はこの様になります。全体のコードはこちら。この様にコードを多少記述しペイロードを伝搬させる必要はありますが、ミドルウェアやクラウドサービスの実装によらず幅広うことができます。Infrastructureソフトウェアエンジニア、インフラエンジニアなど自社開発や自社運用の現場で経験を積んだのち外資系ソフトウェアベンダーでのテクニカルサポートを経て現職。Relicユーザーだった経験あり。C#をはじめとするソフトウェア開発、Kubernetes関連技術およびパブリッククラウド。株式会社の公式見解であるわけではありません。本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。いかなる保証も提供することはありません。