LogicMonitorでは、膨大な量の時系列データを管理し、毎日数十億のメトリック、イベント、構成を処理しています。 一枚岩 アーキテクチャからマイクロサービスへ移行し、 クォークス—Kubernetes ネイティブ Java スタック—その効率性とスケーラビリティにより、Quarkus は高く評価されています。最高品質の Java ライブラリと標準を使用して構築された Quarkus は、OpenJDK HotSpot および GraalVM とシームレスに連携するように設計されています。
マイクロサービスを効果的に監視するために、 ミクロメーターは、JVM ベースのアプリケーション向けのベンダーに依存しないメトリクス計測ライブラリです。Micrometer は、JVM とカスタム メトリクスの両方の収集を簡素化し、移植性を最大限に高め、サービス全体のパフォーマンス監視を合理化します。
このガイドでは、統合する方法を説明します クォークス Micrometer メトリックを使用して、実用的な手順、コード例、ベスト プラクティスを紹介します。パフォーマンスの問題をトラブルシューティングする場合でも、アーキテクチャ用にこれらのツールを評価する場合でも、この記事は効果的なマイクロサービス監視を設定するのに役立ちます。
主要な取り組み
QuarkusとMicrometerの連携方法
Quarkus は、Micrometer の統合を簡素化し、JVM とカスタム メトリックの両方の収集を容易にする専用の拡張機能を提供します。この拡張機能を使用すると、Representational State Transfer (REST) エンドポイントを通じてアプリケーション メトリックをすばやく公開できるため、Java 仮想マシン (JVM) のパフォーマンスから特定のマイクロサービス メトリックまで、すべてをリアルタイムで監視できます。このプロセスを合理化することで、Quarkus と Micrometer が連携して、最小限のセットアップでマイクロサービスを監視するための強力なソリューションを提供します。
// gradle dependency for the Quarkus Micrometer extension
implementation 'io.quarkus:quarkus-micrometer:1.11.0.Final'
// gradle dependency for an in-memory registry designed to operate on a pull model
implementation 'io.micrometer:micrometer-registry-prometheus:1.6.3'
メトリクス処理パイプラインの 2 つの主要な KPI は何ですか?
メトリック処理パイプラインの場合、XNUMXつの主要なKPI(主要業績評価指標)は、処理されたメッセージの数と、複数のマイクロサービスにわたるパイプライン全体のレイテンシーです。
アプリケーションの予想されるワークロードの異常を検出するために、時間の経過に伴う処理メッセージの数に注目しています。ワークロードは時間の経過とともに変化しますが、通常は予測可能なパターンに従います。これにより、予想を超える負荷を検出し、それに応じて対応し、潜在的なデータ収集の問題を事前に検出できます。
データ量に加えて、パイプラインのレイテンシにも注目しています。この指標は、最初の取り込みから完全に処理されるまでのすべてのメッセージに対して測定されます。この指標により、マイクロサービス固有の指標と組み合わせてパイプライン全体の健全性を監視できます。これには、Kafkaクラスター内での転送に費やされた時間が含まれます。 さまざまなマイクロサービス各メッセージの合計処理時間を監視するため、平均処理時間と、p50、p95、p999 などのさまざまなパーセンタイル値についてレポートし、アラートを出すことができます。これにより、パイプラインに沿ったマイクロサービス内の 99 つまたは複数のノードが正常でない場合にそれを検出できます。すべてのメッセージの平均処理時間はあまり変わらないかもしれませんが、高いパーセンタイル (p999、pXNUMX) は増加し、局所的な問題を示します。
Micrometer は、KPI に加えて、メモリ使用量、CPU 使用量、ガベージ コレクションなど、通常のアプリケーション監視に使用できる JVM メトリックを公開します。
マイクロメーター注釈の使用
Quarkus内でMicrometerを使用するには、Quarkus Micrometer依存関係とMicrometer Registry Prometheusの2つの依存関係が必要です。Quarkus Micrometerは、コードをインストルメントするために必要なインターフェイスとクラスを提供し、Micrometer Registry Prometheusは、RESTエンドポイントで簡単にメトリクスを公開できるインメモリレジストリです。これら2つの依存関係は、 XNUMXつの拡張子Quarkus 1.11.0.Final 以降。
Quarkus のマイクロメーター注釈は、さまざまなメソッド間でメトリック名を追跡するための簡単な方法を生み出します。2 つの重要な注釈は次のとおりです。
- @タイムド: メソッドの実行にかかる時間を測定します。
- @カウントされました: メソッドが呼び出される頻度を追跡します。
ただし、これは単一のマイクロサービス内のメソッドに限定されます。
@Timed(
value = "processMessage",
description = "How long it takes to process a message"
)
public void processMessage(String message) {
// Process the message
}
プログラムでタイマーメトリックの値を作成して提供することもできます。 これは、期間を計測したいが、個別の測定値を提供したい場合に役立ちます。 この方法を使用して、マイクロサービスパイプラインのKPIを追跡しています。 取り込みタイムスタンプをKafkaヘッダーとして各メッセージに添付し、パイプライン全体で費やされた時間を追跡できます。
@ApplicationScoped
public class Processor {
private MeterRegistry registry;
private Timer timer;
// Quarkus injects the MeterRegistry
public Processor(MeterRegistry registry) {
this.registry = registry;
timer = Timer.builder("pipelineLatency")
.description("The latency of the whole pipeline.")
.publishPercentiles(0.5, 0.75, 0.95, 0.98, 0.99, 0.999)
.percentilePrecision(3)
.distributionStatisticExpiry(Duration.ofMinutes(5))
.register(registry);
}
public void processMessage(ConsumerRecord<String, String> message) {
/*
Do message processing
*/
// Retrieve the kafka header
Optional.ofNullable(message.headers().lastHeader("pipelineIngestionTimestamp"))
// Get the value of the header
.map(Header::value)
// Read the bytes as String
.map(v -> new String(v, StandardCharsets.UTF_8))
// Parse as long epoch in millisecond
.map(v -> {
try {
return Long.parseLong(v);
} catch (NumberFormatException e) {
// The header can't be parsed as a Long
return null;
}
})
// Calculate the duration between the start and now
// If there is a discrepancy in the clocks the calculated
// duration might be less than 0. Those will be dropped by MicroMeter
.map(t -> System.currentTimeMillis() - t)
.ifPresent(d -> timer.record(d, TimeUnit.MILLISECONDS));
}
}
集約されたタイマーメトリックは、https:// quarkusHostname / metricsのRESTエンドポイントを介して取得できます。
# HELP pipelineLatency_seconds The latency of the whole pipeline.
# TYPE pipelineLatency_seconds summary
pipelineLatency_seconds{quantile="0.5",} 0.271055872
pipelineLatency_seconds{quantile="0.75",} 0.386137088
pipelineLatency_seconds{quantile="0.95",} 0.483130368
pipelineLatency_seconds{quantile="0.98",} 0.48915968
pipelineLatency_seconds{quantile="0.99",} 0.494140416
pipelineLatency_seconds{quantile="0.999",} 0.498072576
pipelineLatency_seconds_count 168.0
pipelineLatency_seconds_sum 42.581
# HELP pipelineLatency_seconds_max The latency of the whole pipeline.
# TYPE pipelineLatency_seconds_max gauge
pipelineLatency_seconds_max 0.498
次に、コレクターを使用して、これらのメトリックをDataPointとしてLogicMonitorに取り込みます。
Quarkus Micrometerのセットアップ手順
シームレスなマイクロサービス監視のために Micrometer を Quarkus と統合するには、次の手順に従います。
1. 依存関係を追加する: マイクロサービスのメトリック収集とレポートを有効にするには、必要な Micrometer および Quarkus 依存関係を追加します。
gradle
Copy code
implementation 'io.quarkus:quarkus-micrometer:1.11.0.Final'
implementation 'io.micrometer:micrometer-registry-prometheus:1.6.3'
2. RESTエンドポイントを有効にする: /metrics などの REST エンドポイント経由でメトリックを公開するように Micrometer を構成します。
3. メトリクスに注釈を使用する: メトリックを追跡する必要があるメソッドに、@Timed や @Counted などの Micrometer アノテーションを適用します。
4. レジストリを設定する: Prometheus をレジストリとして使用し、Micrometer 経由で Quarkus からメトリクスを取得します。タイマーを設定する方法の例を次に示します。
java
Copy code
Timer timer = Timer.builder("pipelineLatency")
.description("Latency of the pipeline")
.publishPercentiles(0.5, 0.75, 0.95, 0.98, 0.99, 0.999)
.register(registry);
5. エンドポイント経由で監視する: セットアップ後、指定された REST エンドポイントを通じてメトリックを取得および監視します。
url
Copy code
https://quarkusHostname/metrics
Quarkus で Micrometer を使用する実際のユースケース
Quarkus と Micrometer は、マイクロサービスを監視するための強力な基盤を提供し、パフォーマンスを最適化するための貴重な洞察を提供します。以下に、いくつかの実用的なアプリケーションを示します。
- レイテンシー追跡: Micrometer を使用して、メッセージがマイクロサービス パイプラインを通過するのにかかる時間を測定します。これにより、ボトルネックを特定し、処理効率を向上させることができます。
- 異常検出: 時間の経過に伴って継続的にメトリックを分析することで、メッセージ処理速度の異常なパターンやシステム遅延の急増を検出し、パフォーマンスに影響する前に問題に対処できます。
- リソースモニタリング: メモリ使用量や CPU 消費量などの JVM メトリックを追跡して、リソース割り当てを最適化し、サービスがスムーズに実行されるようにします。
- カスタムKPI: メッセージ処理速度や応答時間など、特定のビジネス目標に合わせてメトリックをカスタマイズし、組織にとって最も重要な主要業績評価指標を追跡できるようにします。
Quarkus と Micrometer を使用すると、重要なパフォーマンス メトリックを簡単に監視できるため、企業は自信を持って規模を拡大できます。
LogicMonitor マイクロサービス テクノロジー スタック
環境内でQuarkusを使用して複数のマイクロサービスを構築したLogicMonitorのメトリックパイプラインは、次のテクノロジースタックにデプロイされています。
- Java 11(corretto、cuzライセンス)
- Kafka(AWS MSKで管理)
- Kubernetes
- Nginx(Kubernetes内の入力コントローラー)
構成の変更をメトリックにどのように関連付けるのでしょうか?
これらのメトリックが LogicMonitor に取り込まれると、グラフとして表示したり、ダッシュボードに統合したりできます。アラートや異常検出にも使用でき、運用メモと組み合わせて、インフラストラクチャや構成の変更、その他の重要なイベントに関連して視覚化することもできます。
以下は、新しいバージョンのデプロイに関連する処理時間の増加の例です。新しいバージョンをデプロイすると、自動的にオペレーション ノートがトリガーされ、グラフやダッシュボードに表示されます。この例では、この機能により、レイテンシの増加とサービスのデプロイとの相関関係がわかりやすくなります。
効率的なメトリクス収集とパフォーマンスの最適化に関するヒント
Quarkus と Micrometer を最大限に活用するには、効率的なメトリクス収集のための次のベスト プラクティスに従ってください。
- 主要な指標に焦点を当てる: レイテンシ、スループット、リソース使用量など、アプリケーションのパフォーマンスに直接影響するメトリックを追跡します。これにより、システム全体の健全性に影響を与える重要な領域を監視できます。
- パーセンタイルデータを使用する: p95 や p99 などのパーセンタイル値を分析すると、平均値に頼るよりも効果的に外れ値やボトルネックを見つけることができます。これにより、パフォーマンスの異常についてより深い洞察が得られます。
- カスタムメトリックを監視する: 収集するメトリックを、アプリケーションの特定のニーズに合わせてカスタマイズします。デフォルトのメトリックに限定しないでください。特定のビジネスクリティカルなメトリックを追跡すると、より実用的なデータが得られます。
異常を追跡する方法
当社のマイクロサービスはすべて LogicMonitor で監視されています。パイプライン レイテンシ 95 パーセンタイルの異常検出の例を次に示します。LogicMonitor は、通常の動作値を動的に計算し、予想される値のバンドを作成します。その後、値が生成されたバンドから外れた場合にアラートを定義できます。
上記のように、MicroMeterとQuarkusの統合により、LogicMonitorと組み合わせて、マイクロサービスに可視性を追加するための簡単で簡単かつ迅速な方法が可能になります。 これにより、処理パイプラインがクライアントに最大の価値を提供すると同時に、エンジニアの監視作業を最小限に抑え、コストを削減し、生産性を向上させることができます。
Quarkus と Micrometer: リアルタイムの洞察力のパワーを解き放つ
Micrometer と Quarkus を統合すると、最小限の労力でマイクロサービスのパフォーマンスをリアルタイムで可視化できます。レイテンシの監視、カスタム KPI の追跡、リソース使用の最適化など、この合理化されたアプローチにより、メトリックの収集が簡素化され、運用効率が向上します。
Quarkus と Micrometer の強みを組み合わせて活用することで、パフォーマンスの問題に積極的に対処し、スケーラビリティを向上させ、サービスが最高の効率で実行されるようにします。
よくあるご質問
Micrometer は Quarkus とどのように連携しますか?
Micrometer は、メトリクスを収集および公開するためのベンダー中立のインターフェースを提供することで、Quarkus とシームレスに統合します。Quarkus は統合を簡素化する拡張機能を提供し、ユーザーは @Timed や @Counted などのアノテーションを使用して JVM およびカスタム メトリクスを追跡し、REST エンドポイントを通じてそれらを公開できます。
マイクロサービス アーキテクチャで Micrometer を使用する利点は何ですか?
マイクロサービス アーキテクチャで Micrometer を使用すると、個々のサービスのパフォーマンスをリアルタイムで監視し、異常を検出し、レイテンシを追跡し、リソースの使用状況を監視できるようになります。Prometheus などの一般的な監視システムとの統合をサポートし、マイクロサービス全体での効率的なメトリック収集と分析を可能にし、スケーラビリティと信頼性を向上させます。
Quarkus で Micrometer メトリックをどのように設定しますか?
Quarkus で Micrometer メトリクスを設定するには、必要な依存関係 (quarkus-micrometer と micrometer-registry-prometheus などのレジストリ) を追加します。REST エンドポイント経由でメトリクスの公開を有効にし、@Timed などのアノテーションを適用して特定のメトリクスを追跡し、レジストリ (Prometheus など) を構成してメトリクスをプルして監視します。
Micrometer を Quarkus と統合する際によくある問題は何ですか? また、それを解決するにはどうすればよいですか?
よくある問題としては、依存関係の誤った構成、メトリック エンドポイントの公開の失敗、アノテーションの誤った使用などがあります。これらの問題は、適切な依存関係が含まれていること、メトリックの REST エンドポイントが正しく構成されていること、@Timed や @Counted などのアノテーションが正しいメソッドに適用されていることを確認することで解決できます。
Micrometer を使用して Quarkus マイクロサービスを監視するにはどうすればよいですか?
Micrometer を使用して Quarkus マイクロサービスを監視するには、Micrometer と Prometheus の依存関係を追加し、REST エンドポイント経由でメトリックを公開するように Micrometer を構成し、@Timed などの注釈を使用して重要なパフォーマンス メトリックを追跡します。その後、これらのメトリックを Prometheus や LogicMonitor などの監視システムに取り込んで、視覚化やアラートを行うことができます。
私たちのブログを購読する
このような記事をあなたの受信箱に直接お届けします