LoginSignup
8
1

IBM Event Streams(Kafka) をInstanaを使ってモニタリングする

Posted at

この記事はInstana Observability Advent Calendar 2023 20日目のエントリになります。

はじめに

Kafkaのような分散ストリーミング基盤は、コンポーネント間が疎結合になるため、システムに柔軟性をもたらしてくれます。

一方で、様々なコンポーネント間をリクエストが流れていくので、エラーや障害が発生した場合にどのコンポーネントで問題が起こっているのかを把握するのは難しいのではないでしょうか?

本記事では IBM Instana Observability(以下Instana)を使用し、IBM EventStreams(≒Kafka)を使用したシステムのモニタリングをしてみようと思います。

IBM Event Streams(以下Event Streams)はIBMが提供しているKafkaのディストリービューションです。

注意点

本記事では環境構築手順などは説明しておりません。

Instanaのインストール手順や、EventStreamsのインストール手順などをお探しの方は、以下のような公式ドキュメントを参照ください。

システム構成

今回は以下の構成のシステムをInstanaを使用してモニタリングします。

image.png

コンポーネント

本システムは以下のコンポーネントで構成されてます。

  • Event Streamsクラスター

    • dev-scram-origin
    • dev-scram-target

    Event Streamsクラスターは2つ存在していて、dev-scram-originからdev-scram-targetに対して、Mirror Makerを構成し、トピックの同期を行っています。

  • アプリケーション

    • Producerアプリ

      • nest-kafka-app
        Producerアプリは、dev-scram-originのトピックに対してメッセージの送信を行います。
    • Consumerアプリ

      • target-nest-kafka-app
        Consumerアプリは、dev-scram-targetのトピックからメッセージの受信を行います。
        受信するトピックは、dev-scram-originからMirror Makerで複製されたトピックです。

検証

それでは上記のシステムに対して、実際にリクエストを行い、その結果をInstana上でみてみましょう。

リクエストの送信

  1. ProducerアプリにCURLでリクエストを送信

image.png

ここではdev-scram-originsample-topic-1に対してメッセージを送信しています。

送信しているメッセージは、キーがexternal-message、バリューがmessage send from external listener.0011のメッセージです。

(Producerアプリケーションのドメインはマスクしてます。)

  1. ConsumerアプリにCURLでリクエストを送信

image.png

ここではdev-scram-targetdev-scram-origin.sample-topic-1トピックからデータの読み出しを行っています。

dev-scram-origin.sample-topic-1トピックはdev-scram-originsample-topic-1トピックがMirror Makerにより複製されたトピックです。

先ほどdev-scram-originsample-topic-1に対して送信したメッセージが読み出せていることが確認できます。

Instana上で確認する

  1. アプリケーション・パースペクティブの確認

image.png

今回は上記のシステムを1つのアプリケーションパースペクティブで表示するように構成してます。

呼び出しのセクションを見ると先ほど実行したリクエストが記録されていることが確認できます。

  1. 依存関係の確認

image.png

依存関係のタブから、コンポーネント間の依存関係を確認することができます。

このグラフからコンポーネント間がシステム構成図と同じ構成で繋がっていることがわかります。

  1. 呼び出しの分析からリクエストの詳細を確認

image.png

image.png

image.png

上記から先ほど送ったリクエストが分散トレースの形で確認できることがわかります。

image.png

また詳細を確認したいリクエストをクリックすると、「詳細」からリクエストの詳細情報を確認することができます。

補足

今回はリクエスト中にエラーは発生していませんが、エラーが発生した際には「依存関係」「呼び出しの分析」画面でそれぞれ以下のようにエラー確認することができます。

  1. 依存関係の画面

image.png

画像の引用元

エラーが発生しているコンポーネントに赤く印がつきます。

エラーが発生しているコンポーネントをクリックして、ドリルダウンしていくことでより詳しい原因の調査をすることができます。

  1. 呼び出しの分析の画面

image.png

画像の引用元

エラーが発生しているリクエストに赤く印がつきます。

またエラーが発生しているリクエストをクリックすると、リクエストの詳細を確認することができます。

余談

今回ProducerアプリケーションとConsumerアプリケーションは、KafkaJS + NestJSで実装しました。

Node.jsでProducer/Consumerアプリケーションを実装して、Instanaでモニタリングしたい場合には、KafkaJSを使用するようにしてください。

kafka-nodeだとInstanaのモニタリング機能の一部がうまく動かない可能性があります。

詳しくは以下を参照ください。

When you use the npm package kafka-node to send or consume messages. That package does not support Kafka record headers. For more information, see kafka-node#763 and kafka-node#1309. Trace continuity is supported for Kafka in general starting with Kafka version 0.11 for other runtime and also when you use the package kafkajs. Therefore, it is recommended to use kafkajs instead of kafka-node when you use Kafka and Instana in your Node.js application.

参考ドキュメント

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1