Spring Bootにおけるモニタリング
本番環境のアプリケーションは、単に動作するだけでは不十分です。観測可能(observable)であり、障害が発生した際に容易に修正できる必要があります。ヘルスチェック、メトリクス、ログ、そしてインシデントに対処するための明確な手順が不可欠です。
Spring Bootは、これらの機能を提供するためにActuatorを使用します。Actuatorは、health、metrics、infoなどのエンドポイントを提供します。これらはHTTPまたはJMX経由で公開できます。
モニタリングすべき主要な領域:
• 可用性: アップタイム、レディネス(readiness)、およびライブネス(liveness)を確認する。 • パフォーマンス: レスポンスタイム、レイテンシ、およびスループットを追跡する。 • エラー: HTTP 4xx/5xxエラーやメッセージの失敗を監視する。 • JVM: ヒープ、メモリ、CPU、およびスレッドを監視する。 • データベース: コネクションプールとスロークエリを追跡する。 • Kafka: コンシューマーラグとリトライ率を監視する。
メトリクスの収集
Spring Bootは、メトリクスを収集するためにMicrometerを使用します。Prometheusレジストリを使用して、これらのメトリクスを公開できます。一般的な構成は以下の通りです:
Spring Boot App → Prometheus → Grafana
これにより、アプリケーションのデータをダッシュボード上で可視化できます。
ロギングのベストプラクティス
ログは、障害発生時に何が起きたのかを理解するのに役立ちます。本番環境では、ログをマシン読み取り可能にするために、構造化されたJSONログを使用してください。
推奨事項:
- orderIdやcustomerIdなどのビジネスIDをログに記録する。
- 単一のリクエストからのログを紐付けるために、相関ID(correlation ID)を使用する。
- 例外についてはスタックトレースを含める。
- 構造化ログを使用する。
避けるべきこと:
- パスワード、トークン、または個人データをログに記録しない。
- ループ内で大量のデータをログに記録しない。
- System.out.printlnを使用しない。
- 空のcatchブロックでエラーを隠蔽しない。
運用の安定性
運用サポートとは、デプロイ後にサービスを安定させ続けることを意味します。以下の点に重点を置くべきです:
- 問題を調査するためのインシデントサポート。
- 問題を早期に発見するためのダッシュボードとアラート。
- 復旧手順をガイドするランブック(Runbooks)。
- リリース失敗時のロールバック戦略。
強固なSpring Bootサービスとは、モニタリングが容易で、デバッグが容易で、復旧が容易なものです。
出典: https://dev.to/antonio_casado_1fe39cd90e/monitoring-in-spring-boot-1220