JHipsterアプリケーションのモニタリング パーマリンク to " JHipsterアプリケーションのモニタリング"

JHipsterには、実行時にアプリケーションをモニタリングするためのオプションがいくつか用意されています。

サマリー パーマリンク to "サマリー"

  1. 生成されたダッシュボード
  2. セキュリティメトリック
  3. JHipsterレジストリ
  4. ELK
  5. サポートされているサードパーティモニタリングシステムへのメトリックの転送
  6. Zipkin

生成されたダッシュボード パーマリンク to "生成されたダッシュボード"

モノリスとゲートウェイの場合、JHipsterは各アプリケーションを監視するための複数のダッシュボードを生成します。 これらのダッシュボードは実行時に使用可能であり、監視を行うための最も簡単な方法です。

JHipster Metrics page

集計ダッシュボード パーマリンク to "集計ダッシュボード"

メトリクスダッシュボードは、Micrometerを使用して、アプリケーションパフォーマンスの詳細なビューを提供します。

次のメトリックが表示されます。

  • JVM
  • HTTPリクエスト
  • キャッシュの使用状況
  • データベース接続プール

JVMスレッド・メトリックの横にあるExpandボタンをクリックすると、実行中のアプリケーションのスレッド・ダンプが表示されます。これは、ブロックされているスレッドを見つけるのに非常に役立ちます。

ヘルスダッシュボード パーマリンク to "ヘルスダッシュボード"

ヘルスダッシュボードは、Spring Boot Actuatorのヘルスエンドポイントを使用して、アプリケーションのさまざまな部分のヘルス情報を提供します。多くのヘルスチェックは、Spring Boot Actuatorによってすぐに提供され、アプリケーション固有のヘルスチェックの追加もできます。

ログダッシュボード パーマリンク to "ログダッシュボード"

ログダッシュボードを使用すると、実行中のアプリケーションのLogback設定を実行時に管理できます。 Javaパッケージのログ・レベルを変更するには、ボタンをクリックします。これは、開発環境とプロダクション番環境の両方で非常に便利です。

セキュリティ・メトリック パーマリンク to "セキュリティ・メトリック"

JHipsterは、JWT認証タイプを使用するプロジェクトのJWT関連のセキュリティメトリックを追跡します。

特に、JHipsterは、トークン検証エラー数(無効なトークン数)をsecurity.authentication.invalid-tokensという名前のカスタムメーターとして追跡し、次のメータータグを使用してそのような検証エラーの原因を追跡します。

  • invalid-signature:JWT署名の検証に失敗しました。
  • expired:JWTの有効期限が切れています。
  • unsupported:JWTフォーマットがアプリケーションで想定されているフォーマットと一致しません。
  • malformed:JWTが正しく構築されていません。

これらのメトリックは生成されたダッシュボードでは使用できませんが、アプリケーションメトリックとして公開され、可視化のためにサードパーティの監視システムに転送できます。

JHipsterレジストリ パーマリンク to "JHipsterレジストリ"

JHipster Registryにはこちらに独自のドキュメントページがあります。

ほとんどの場合、前のセクションと同じ監視ダッシュボードが提供されますが、別のサーバで動作します。そのため、設定が少し複雑になりますが、実行中のアプリケーションの外部でダッシュボードを実行することを強くお勧めします。そうしないと、アプリケーションエラーが発生したときにダッシュボードを使用できなくなります。

ELK (Elasticsearch, Logstash, Kibana)スタック パーマリンク to "ELK (Elasticsearch, Logstash, Kibana)スタック"

ELKスタックは、ログの集約と検索によく使用され、次のコンポーネントで構成されています。

  • Elasticsearch:データ(ログとメトリック)のインデックス作成
  • Logstash:アプリケーションから受信したログを管理および処理
  • Kibana:ログを可視化するための優れたインタフェース
警告: JHipsterはLogstashへのログの転送をサポートしていますが、JHipsterバージョン7では、ELKスタックDockerデプロイメントは提供されておらず、ダッシュボードを使用する準備ができていません。これは、現在は保守されていないJHipsterコンソールサブプロジェクトの一部でした。既存のユーザーには、別のELKソリューションに移行することをお勧めします。

Logstashへのログの転送 パーマリンク to "Logstashへのログの転送"

ログをLogstashに転送するようにJHipsterアプリケーションを構成するには、application-dev.ymlまたはapplication-prod.ymlでlogstashロギングを有効にします。

jhipster:
    logging:
        logstash:
            enabled: true
            host: localhost
            port: 5000
            queueSize: 512

これらのログを収集するには、Logstash側で簡単なlogstash.confファイルを用意します。

input {
    tcp {
        port => "5000"
        type => syslog
        codec => json_lines
    }
}

output {
    elasticsearch {
            hosts => ["${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}"]
            index => "logs-%{+YYYY.MM.dd}"
        }
    }
}

ELKスタックのセットアップ方法の詳細については、公式Elasticドキュメントを参照してください。

サポートされているサードパーティ監視システム(JMX、Prometheus)へのメトリックの転送 パーマリンク to "サポートされているサードパーティ監視システム(JMX、Prometheus)へのメトリックの転送"

JHipsterは、デフォルトでPrometheusフォーマットのアプリケーションメトリックを公開します。 management/prometheusの下で公開されます。 代替システムへのメトリックの転送は、spring boot actuatorを介してもサポートされています。

メトリックエンドポイントの公開を無効にしたい場合は、src/main/resources/application.ymlで無効にできます。

management:
    prometheus:
        export:
            enabled: false

prometheusエンドポイントはデフォルトでは保護されていません。Spring Security経由で保護したい場合は、prometheusがベーシック認証で保護されたスクレイピングエンドポイントにおいて動作するように、prometheusエンドポイントにベーシック認証を追加することで保護できます。

新しい設定ファイル(例:BasicAuthConfiguration.java)を作成します。

@Configuration
@Order(1)
@ConditionalOnProperty(prefix = "management", name = "metrics.export.prometheus.enabled")
public class BasicAuthConfiguration {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .antMatcher("/management/prometheus/**")
            .authorizeRequests()
            .anyRequest().hasAuthority(AuthoritiesConstants.ADMIN)
            .and()
            .httpBasic().realmName("jhipster")
            .and()
            .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and().csrf().disable();
        return http.build();
    }
}

デフォルトのadmin/adminでログインできます。prometheusがアプリケーションをスクレイピングできるように、次の設定をprometheus設定に追加する必要があります。

basic_auth:
    username: "admin"
    password: "admin"

docker-compose -f src/main/docker/monitoring.yml up -dを使用して、ローカルマシン上で事前設定されたGrafanaとPrometheusのインスタンスを起動し、 jvm/micrometer dashboardを参照してください。

Grafana Micrometer Dashboard

注:以前のJHipsterバージョンとは異なり、JHipster 5.8のメトリックレポートは、JMXとPrometheusのみをサポートしています。Graphiteのような他のレポーターを設定する方法については、Metricsの公式ドキュメントを参照してください。

Zipkin パーマリンク to "Zipkin"

JHipsterアプリケーションは、Spring Boot Actuator Tracingを通してZipkinと統合して、マイクロサービスアーキテクチャに分散トレースを提供できます。Zipkinトレースを有効にするには、zipkinのmaven/gradleプロファイルでアプリケーションをパッケージ化します。これにより、Zipkinサーバへのスパンレポートがトリガーされ、リクエストヘッダーとログに相関ID(TraceId、SpanId、ParentId)が追加されます。

Zipkinは、マイクロサービス間の依存関係を時間の経過とともに視覚化できるサービス依存性グラフ機能も提供します。

トレース情報をZipkinに報告するようにアプリケーションを設定する方法については、Spring Boot Production-ready Featuresを参照してください。