本ブログはアフィリエイト広告を利用しています。

Spring Boot ActuatorとGrafanaで雑にヘルスチェックしてみた

healthcheck-dynamic-text-install プログラミング

たまにアプリが落ちてしまうことがあったのでSpring Boot Actuatorを使って死活監視をかなり雑にしてみました。
本来ならprometheusと連携した方がいい?ような気がしますがそれは別途試すとして、今回はGrafanaから直接Spring Boot Actuatorのエンドポイントにアクセスさせます。

Spring Boot Actuatorの設定

Spring Bootで作成したPJにヘルスチェック用のエンドポイントを追加していきます。

Maven pom.xmlにライブラリ追加

pom.xmlに以下を追加

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

application.propertiesに設定追加

application.propertiesに以下を追加

デフォルト設定ではエンドポイントが/actuatorになりますが、”management.endpoints.web.base-path”で/statusに変更しています。特に変更した必要はないのですが。
ここをみるとWeb(HTTP)の場合、デフォルトでhealthが有効になっているので設定する必要はありませんが意図的に公開していますという意味で設定しました。
また、jmx経由だと全開なのでこちらは全て除外しています。GrafanaからはHTTPでアクセスさせるためです。

management.endpoints.web.base-path=/status
management.endpoints.web.exposure.include=health
management.endpoints.jmx.exposure.exclude=*

Spring Securityを使用しているので認証不要に設定

ヘルスチェックは別に認証いらないかなと思ったので認証不要に設定します。
省略した形でソースを載せておきます。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/status/**").permitAll()	// 認証不要なパスを指定
                .anyRequest().authenticated()
                .and()
                .cors().and().csrf().disable()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();

    }
    // 省略
}

動作確認

以上の設定が完了したら設定が有効になっているか確認しましょう。
ローカルで動かす場合は http://localhost:8080/status/health にアクセスすると {“status”:”UP”} というJSONが返却されます。
次はここに対してGrafanaからアクセスさせていきます。

Grafanaの設定

Grafanaのpluginをインストール

以下の2つのプラグインを使用します。
JSON API(Data source)でエンドポイントにアクセスし、Dynamic text(panel)で表示していきます。

  • Dynamic text
  • JSON API

Grafanaのプラグイン画面でDynamic text、JSON APIとそれぞれ検索してインストールしてください。

healthcheck-dynamic-text-install

Data sourcesの設定

Add data sourceでインストールしたJSON APIを選択し、設定していきます。
今回は認証など煩わしい設定をする必要がないのでURLとtimeout(秒)のみ設定しました。
URLはhttps://xxxxx/status としました。/healthは次で設定可能ですのでここでは指定しません。
特にヘルスチェック以外のエンドポイントを使用する場合は/statusで止めておくべきです。
設定後、Save & testでSuccessとなることを確認してください。

healthcheck-json-api-setting

ダッシュボードの設定

ダッシュボード→ Add an empty panelでパネルを追加し、Data sourceで先ほど設定したJSON APIを選択します。
最初にPath(/health)を設定していきます。

healthcheck-json-api-path-setting

次にFieldを設定します。先にPathを設定しているため、”$.”と入力するとstatusという文字列が候補として出てくるはずです。
そのまま選択して$.statusとしてください。

healthcheck-json-api-field-setting

最後にAliasを設定します。ここでは status とします。

あとはパネルの設定となります。パネルをDynamic textに変更してください。
右側にある設定のDynamic text – Contentに以下のように記述します。
この領域はマークダウンで記述できるのでお好きなように設定してください。
{{XXX}}で先ほどJSON APIで設定したaliasを指定することで {“status”:”UP”} の UP の部分を取得することができます。

Spring Boot Actuator health check
# {{status}}
healthcheck-dynamic-text-setting

ダッシュボードに戻って表示を確認

JSON APIとDynamic textの設定が完了したら Apply でダッシュボードに戻って表示を確認しましょう。

healthcheck-dashbord

ちなみにアプリが落ちる(主にOutOfMemoryで)と画像のように赤いビックリマークがでるのでそこで判断します。(雑)

healthcheck-dashbord-app-down

Prometheusと連携はやる気がでたらやってみよう。
以上です。

関連記事

コメント

タイトルとURLをコピーしました