SpringBootアプリケーションのセルフホストモニタリング
1. 序章
Spring Bootの多くの優れた機能の1つは、組み込みのアクチュエータのセットです。 これらのアクチュエータは、SpringBootアプリケーションのほぼすべての側面を監視および制御する簡単な方法を提供します。
このチュートリアルでは、メトリクスアクチュエータを使用して、Spring Bootアプリケーション用の自己ホスト型監視ソリューションを作成する方法について説明します。
2. 指標データベース
Spring Bootアプリケーションの監視の最初の部分は、メトリックデータベースを選択することです。 デフォルトでは、SpringBootはすべてのアプリケーションでMicrometerメトリックレジストリを構成します。
このデフォルトの実装は、メモリとCPUの使用量、HTTPリクエスト、その他いくつかの事前定義されたアプリケーションメトリックのセットを収集します。 ただし、これらのメトリックはメモリにのみ保存されます。つまり、アプリケーションを再起動するたびに失われます。
自己ホスト型の監視ソリューションを作成するには、最初にSpringBootアプリケーションの外部にあるメトリックデータベースを選択する必要があります。 次のセクションでは、利用可能なセルフホストオプションのほんの一部について説明します。
Spring Bootがクラスパスで別のメトリクスデータベースを検出すると、メモリ内レジストリが自動的に無効になることに注意してください。
2.1. InfluxDB
InfluxDB は、オープンソースの時系列データベースです。 InfluxDBを使い始める最も簡単な方法は、Dockerコンテナとしてローカルで実行することです。
docker run -p 8086:8086 -v /tmp:/var/lib/influxdb influxdb
これにより、メトリックがローカル /tmpパーティションに格納されることに注意してください。 これは開発とテストには問題ありませんが、実稼働環境には適していません。
InfluxDBが実行されると、適切なMicrometer依存関係を追加することにより、SpringBootアプリケーションにメトリックを公開するように構成できます。
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-influx</artifactId>
</dependency>
さらに、application.propertiesファイルに新しいエントリを追加する必要があります。
management.metrics.export.influx.uri=http://localhost:8086
箱から出して、データベース名は mydb に設定されていますが、ユーザー名とパスワードは未設定のままです。
ただし、専用のプロパティを使用してデフォルト値を上書きできます。
management.metrics.export.influx.db=customDbName
management.metrics.export.influx.user-name=myUserName
management.metrics.export.influx.password=mySecret
InfluxDBは、ネイティブの視覚化ツールを提供していません。 ただし、InfluxDBデータの視覚化に適したクロノグラフと呼ばれる別のツールを提供します。
2.2. プロメテウス
Prometheus は、もともとSoundCloudで構築されたオープンソースの監視およびアラートツールキットです。 InfluxDBとは少し動作が異なります。
メトリックをPrometheusに公開するようにアプリケーションを構成する代わりに、アプリケーションを定期的にポーリングするようにPrometheusを構成します。
まず、新しいPrometheusアクチュエータエンドポイントを公開するようにSpringBootアプリケーションを構成します。 これを行うには、micrometer-registry-prometheusの依存関係を含めます。
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
これにより、Prometheusが理解できる特別な形式でメトリックデータを生成する新しいアクチュエータエンドポイントが作成されます。
次に、必要な構成を prometheus.yml ファイルに追加して、アプリケーションをポーリングするようにPrometheusを構成する必要があります。
次の構成は、新しいアクチュエータエンドポイントを使用して、5秒ごとにアプリケーションをポーリングするようにPrometheusに指示します。
scrape_configs:
- job_name: 'spring-actuator'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
static_configs:
- targets: ['127.0.0.1:8080']
最後に、Dockerを使用してローカルのPrometheusサーバーを起動できます。 これは、カスタム構成ファイルがローカルファイル/etc/prometheus/prometheus.ymlにあることを前提としています。
docker run -d \
--name=prometheus \
-p 9090:9090 \
-v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus \
--config.file=/etc/prometheus/prometheus.yml
Prometheusは、収集されたメトリックを表示するための独自の視覚化ツールを提供します。 URL http:// localhost:9090/。からアクセスできます。
2.3. 黒鉛
Graphite は、もう1つのオープンソースの時系列データベースです。 そのアーキテクチャは、これまで見てきた他のデータベースよりも少し複雑ですが、Dockerを使用すると、インスタンスをローカルで実行するのが簡単です。
docker run -d \
--name graphite \
--restart=always \
-p 80:80 \
-p 2003-2004:2003-2004 \
-p 2023-2024:2023-2024 \
-p 8125:8125/udp \
-p 8126:8126 \
graphiteapp/graphite-statsd
次に、 micrometer-registry-graphite 依存関係を追加して、インスタンスにメトリックを公開するようにSpringBootを構成できます。
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-graphite</artifactId>
</dependency>
application.properties に構成プロパティを追加するだけでなく、次のようになります。
management.metrics.export.graphite.host=127.0.0.1
management.metrics.export.graphite.port=2004
Prometheusと同様に、Graphiteには独自の視覚化ダッシュボードが含まれています。 URL http:// localhost/で入手できます。
3. 視覚化ツール
Spring Bootアプリケーションの外部にメトリックを保存するためのソリューションができたら、次の決定はデータをどのように視覚化するかです。
前述のメトリックデータベースの一部には、独自の視覚化ツールが含まれています。 セルフホストの監視ソリューションを検討する価値のあるスタンドアロンの視覚化ツールがあります。
3.1. Grafana
Grafana は、オープンソースの分析および監視ツールです。 前述のすべてのデータベース、および他の多くのデータベースに接続できます。
Grafanaは通常、ほとんどの組み込みの視覚化ツールよりも優れた構成と優れたアラートを提供します。 プラグインを使用して簡単に拡張でき、独自の視覚化をすばやく作成するためにインポートできるビルド済みのダッシュボードがたくさんあります。
Grafanaをローカルで実行するには、Dockerを使用して開始できます。
docker run -d -p 3000:3000 grafana/grafana
これで、URL http:// localhost:3000/でGrafanaホームページにアクセスできます。
この時点で、1つ以上のデータソースを構成する必要があります。 これは、前に説明したメトリックデータベースのいずれか、またはサポートされている他のさまざまなツールの場合があります。
データソースを構成したら、新しいダッシュボードを作成するか、必要な処理を実行するダッシュボードをインポートできます。
4. 結論
この記事では、SpringBootアプリケーション用の自己ホスト型監視ソリューションの作成について説明しました。
Spring Bootがすぐにサポートする3つのメトリックデータベースを調べ、それらをローカルで実行する方法を確認しました。
また、さまざまなソースからのメトリックデータを表示できる強力な視覚化ツールであるGrafanaについても簡単に説明しました。