春ブートサービスの監視、ヘルスチェック、スレッド情報、JVMのヒープ情報、メトリック収集のための記事、動作を監視!...

著者|  Richard_Yi

 Zebian |徐ヴェイロン

原稿|ナゲッツ

カバー写真| CSDNはダウンロード視覚的な中国を

この記事では、あなたの参考のために、著者の個人的な経験です。

昨年は、遷移マイクロサービスアーキテクチャ1.0でプロジェクトをやったが、このサービスの監視は追いついていません。これは、最近、私はあなたがすべて一緒に私たちのコアマイクロ監視アプリケーションにサービスを提供するタスクを割り当てられたものではありません。当社のマイクロサービスアプリケーションはSpringBootアプリケーションであるため、自然にアクチュエータを春ブートモジュールを考えます。

私はこの仕事の注文を完了した後Benpianは、春ブーツアクチュエータモジュールのための学習アプリケーションをまとめます。この記事では、することを学ぶことができます。

1.の春ブーツアクチュエータ使って素早く入門
2、の春ブーツアクチュエータ導入の重要なエンドポイントの一部
、3を現在のアクチュエータモジュールによって適用されるリアルタイムスレッドダンプ情報を表示する方法を
、4のアクチュエータモジュールによりリアルタイムで現在のアプリケーションについてのヒープの情報を表示する方法
、5現在のリアルタイムの変化のログレベルを印刷する方法アクチュエータモジュールによって適用され
、6 ...

そして、私がご紹介します:

TODO:SpringBootマイクロサービスアプリケーション統合アラームのモニタリングプロメテウス+ Grafanaを達成するために

春ブーツアクチュエータとは何ですか

春ブーツアクチュエータモジュールは、健康診断、監査、メトリクスの収集、HTTP追跡など、生産レベルの機能、私たちは春のブートアプリケーション、豆の荷重条件、環境変数、ログ情報、スレッド情報、JVMのヒープ情報を監視および管理ヘルプを提供します。このモジュールは、アプリケーションモジュール内の情報の収集は、外部に露出され、上述した機能は、HTTPとJMXを介してアクセスすることができます。

内部情報の露光特性ので、アクチュエータはまた、いくつかの外部アプリケーション監視およびシステム統合(プロメテウス、グラファイト、DataDog、流入波面、新しいレリック、等)とすることができます。これらの監視システムは、統一されたユーザーフレンドリーなインターフェース、モニターを通してあなたを助け、あなたのアプリケーションを管理するための優れたダッシュボード、グラフ、分析およびアラートを提供しています。

アクチュエータシステムを監視し、これらの外部アプリケーションとのマイクロメータの統合を使用。その結果、少しの設定で簡単に外部監視システムを統合することができます。

マイクロメータのみ収集パフォーマンスメトリックにマイクロメータ共通APIを使用する必要があるアプリケーションをすることができ、Javaプラットフォーム上で収集パフォーマンスデータに共通のAPIを提供します。マイクロメータは、異なる監視システムへの適応の作業を完了するための責任を負うことになります。これは、スイッチの監視システムが容易になります。

JavaのロガーにあるコントラストSLF4J。

クイックスタート、春ブーツアクチュエータのデモを作成します

のは、デモアプリケーションを作成してみましょう。

あなたは春ブーツCLIで作成することができます。

spring init -d=web,actuator -n=actuator-demo actuator-demo

それとも春Initializrで作成します。

Mavenの依存関係を対応します:

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

Gradleの依存関係を対応します:

dependencies {
    compile("org.springframework.boot:spring-boot-starter-actuator")
}

エンドポイントの紹介

春ブーツは、外部への応用にアクセスし、対話する、いわゆるエンドポイント(以下、エンドポイントの翻訳)を提供します。

アナロジーは、/healthエンドポイントは、アプリケーションの健全性に関するいくつかの基本的な情報を提供します。metricsエンドポイントは、いくつかの有用なアプリケーションインデックス(JVMメモリ使用量、CPU使用率システム、等)を提供します。

これらのアクチュエータモジュールは、すでに私たちは、主要評価項目を呼び出すエンドポイントを持っています。エンドポイントの役割によると、我々は3つのカテゴリに分けることができます。

アプリケーションの設定クラス:設定情報のカテゴリを取得するには密接なアプリケーション設定、環境変数、自動化されたコンフィギュレーションレポートをロードする春ブートアプリケーションのアプリケーションに関連しています。

メトリックカテゴリ:メモリ情報、スレッド・プール情報、HTTPリクエストの統計:取得アプリケーションは、次のような監視メトリックのために実行されています。

動作制御クラス:アプリケーションや他の操作に基づく機能のクローズを提供します。

詳細ネイティブエンドポイントの説明には、スペースを招いここではそれらを繰り返さない、勝つの公式ウェブサイトをご参照ください。

これは、ことに留意すべきです。

図1に示すように、各エンドポイントは、個別に無効に設定するかによって開始することができます

2、アクチュエータ1.xから異なるが、ほとんどのエンドポイントアクチュエータ2.xのデフォルト・スワップは禁止しますデフォルトのエンドポイントアクチュエータ2.xが増加/actuatorプレフィックスを。デフォルトにさらされる2つのエンドポイント/actuator/health/actuator/info


公開設定をエンドポイント

私たちは、configure HTTP JMXとエンドポイントを介して公開に以下の構成を介しすることができます。

プロパティ デフォルト
management.endpoints.jmx.exposure.exclude
management.endpoints.jmx.exposure.include *
management.endpoints.web.exposure.exclude
management.endpoints.web.exposure.include info,healt

これは、すべての監視ポイントを開くことができます

management.endpoints.web.exposure.include=*

複数のエンドポイントは別の「」を指定した場合、セクションはまた、「*」すべてのエンドポイントが露出表し、開くように選択することができます

management.endpoints.web.exposure.exclude=beans,trace

すべての監視ポイントであるアクチュエータデフォルトのパスは、/actuator/*このパスが必要とされている場合、当然のことながら、また、カスタムサポートしています。

management.endpoints.web.base-path=/minitor

再起動を設定した後、再びアクセス可能なアドレスになり/minitor/*

次のように私たちは今、設定さ:

# "*" 代表暴露所有的端点 如果指定多个端点,用","分开
management.endpoints.web.exposure.include=*
# 赋值规则同上
management.endpoints.web.exposure.exclude=

DEMO Startプログラム、訪問http://localhost:8080/actuatorビューエンドポイントにさらされ、:


そのような上記に示した理由JSONハンドルクロムブラウザプラグインがインストール、実際には、戻りJSONの大部分であります

以下は、私はもっと重要なエンドポイントのいくつかを強調表示します。

重要なエンドポイントの解決

5.1  /healthエンドポイント

/healthエンドポイントの健康指標は、プログラムの健全性を確認するようにプログラムを重合します。エンドポイントの公衆衛生情報アプリケーションが依存します:

management.endpoint.health.show-details=always

この属性は、次のいずれかの値を使用するように設定することができます。

名前 説明
never 、アップまたはダウン状態、デフォルトの設定を、詳細情報が表示されません
when-authorized 詳細は、認証を介してユーザに提示されます。役割の承認をすることができます  management.endpoint.health.roles構成されました
always すべてのユーザーのための暴露の詳細

構成された上記構成によれば、alwaysその後、私たちは、へのアクセスプロジェクトを開始したhttp://localhost:8080/actuator/healthポートを、あなたはこの情報を見ることができます:

健康情報は、ビット少ないように感じていないですか?私たちは、デモプロジェクトのほとんどのための基礎を作成しているので、それは、心配しないでくださいない多数のコンポーネントに依存します。

/healthエンドポイントのヘルス・インディケーターの多くの自動設定があります:Redisの、RabbitMQの、DBおよびその他のコンポーネントとして。あなたは、ヘルス・インディケーターが自動的に組み立てられたときに対応する構成要素の依存項目、および取得に対応した、情報を持っている場合。ディスクスペース上記のようにノード情報があるDiskSpaceHealthIndicator仕事で。

上のスクリーンショットは、公式文書から取られます

これは、私の別のプロジェクトである/healthエンドポイント情報。

上記アセンブリは、ダウンアプリケーションおよびサービスの全体の状態である異常状態を有する場合。また、構成によって部品のヘルスモニタリングを無効にすることができます。

management.health.mongo.enabled: false

またはすべての自動コンフィギュレーション・保健指標を無効にします。

management.health.defaults.enabled: false

⭐カスタムヘルス・インディケーター

もちろん、あなたはまた、ヘルス・インディケーターをカスタマイズすることができ、唯一の実装する必要があるHealthIndicatorインターフェイスを拡張するか、AbstractHealthIndicatorクラスを。

/**
 * @author Richard_yyf
 * @version 1.0 2020/1/16
 */
@Component
publicclassCustomHealthIndicatorextendsAbstractHealthIndicator{
@Override
protectedvoid doHealthCheck(Health.Builder builder) throwsException{
// 使用 builder 来创建健康状态信息
// 如果你throw 了一个 exception,那么status 就会被置为DOWN,异常信息会被记录下来
        builder.up()
.withDetail("app", "这个项目很健康")
.withDetail("error", "Nothing, I'm very good");
}
}

正味の効果:

5.2  /metricsエンドポイント

/metricsメモリ情報、スレッド情報、ガベージコレクション情報、Tomcatの、データベース接続プール:エンドポイントは、以下のような重要なメトリックの現在の適用範囲を返すために使用されます。

{
"names": [
"tomcat.threads.busy",
"jvm.threads.states",
"jdbc.connections.active",
"jvm.gc.memory.promoted",
"http.server.requests",
"hikaricp.connections.max",
"hikaricp.connections.min",
"jvm.memory.used",
"jvm.gc.max.data.size",
"jdbc.connections.max",
....
]
}

1.xから異なる、アクチュエータは、このインタフェースの特定のターゲット情報を見ることができない、ちょうど指標のリストが表示されます。特定のインデックスに関する詳細な情報を得るために、我々はこのように、特定のターゲットの情報を要求することができます。

http://localhost:8080/actuator/metrics/{MetricName}

例えば、私が訪問し/actuator/metrics/jvm.memory.max、次のように、リターン情報は以下のとおりです。

あなたはまた、別の領域を表示するには、クエリのparamの方法を使用することができます。たとえば、/actuator/metrics/jvm.memory.max?tag=id:Metaspaceにアクセスすることができます。結果は次のとおりです。

5.3  /loggersエンドポイント

/loggersエンドポイントは、私たちの内部手続きロガー構成のすべての情報を公開します。私たちは訪問/actuator/loggers、あなたが見ることができます

あなたはまた、次のように単一ロガーにアクセスすることができます

http://localhost:8080/actuator/loggers/{name}

例えば、私は今、訪問rootロガーを、http://localhost:8080/actuator/loggers/root

{
"configuredLevel": "INFO",
"effectiveLevel": "INFO"
}

実行時にログレベルを変更⭐

/loggers私はほとんどのエンドポイントは、この機能で、あなたが動的にログレベルを変更することができます言及したいと思います。

たとえば、我々は次のように変更することができますrootロガーのログレベルを。私達はちょうどのためのURLを開始する必要が要求次のように、POSTメッセージは次のとおりです。http://localhost:8080/actuator/loggers/rootPOST

{
"configuredLevel":
"DEBUG"
}

この機能は非常に便利ではない、それについて考えてみよう。本番環境では、あなたがあなたの中に、いくつかの異常を診断するために、いくつかの情報のアプリケーションのデバッグ出力をしたい場合は、アプリケーションを再起動することなく、前述したように、あなたは、あなただけ変更する必要があります。

デフォルトにリセットしたい場合は、値の変更 null

5.4  /infoエンドポイント

/infoエンドポイントは、あなたのプログラムについての情報を表示するために使用することができます。私は、以上のプログラムの基本的な情報のいくつかのことを理解しています。そして、あなたは、設定ファイルに自分たちのニーズに従うことができますapplication.properties(デフォルトでは、エンドポイントは、空のJSONコンテンツを返します)カスタマイズした構成に:

info.app.name=actuator-test-demo
info.app.encoding=UTF-8
info.app.java.source=1.8
info.app.java.target=1.8
# 在 maven 项目中你可以直接用下列方式引用 maven properties的值
# [email protected]@
# [email protected]@
# [email protected]@

プロジェクトを開始し、訪問http://localhost:8080/actuator/info

{
"app": {
"encoding": "UTF-8",
"java": {
"source": "1.8.0_131",
"target": "1.8.0_131"
},
"name": "actuator-test-demo"
}
}

5.5  /beansエンドポイント

/beansスプリングターミナルリターン全て豆容器別名、タイプ、単一の実施形態、依存情報か。

訪問はhttp://localhost:8080/actuator/beans、次の値を返します。

5.6  /heapdump エンドポイント

アクセス:http://localhost:8080/actuator/heapdump自動的heapdumpのファイルJVMヒープを生成します。私たちは、メモリのスナップショットを表示するには、このファイルを開いて、JVM監視ツールVisualVMのが付属してJDKを使用することができます

5.7  /threaddump エンドポイント

私は個人的にこのエンドポイントは便利、特に有用であることを感じ、私たちは、スレッド毎日ポジショニングの問題を参照してください。そのようなスレッドスタック情報としてロックリソース、待機するかどうかをメインショーのスレッド名、スレッドIDの状態、スレッド、。あまり直感的に見ることが可能です。アクセスは、http://localhost:8080/actuator/threaddump次の値を返します。

5.8  /shutdownエンドポイント

エンドポイントは、動作制御ベースのエンドポイント、優雅に近い春ブートアプリケーションに属します。あなたが最初のコンフィギュレーション・ファイルを開く必要があり、この機能を使用するには:

management.endpoint.shutdown.enabled=true

以来、シャットダウンインターフェイスのデフォルトはPOSTリクエストのみをサポートするために、我々は、デモプロジェクトがする、起動http://localhost:8080/actuator/shutdown開始POST要求を。リターン情報:

{
"message": "Shutting down, bye..."
}

その後、アプリケーションが閉じられています。

アプリケーション自体のオープンクローズ操作によるものであり、非常に危険なもの、本物のオンライン使用して、我々は彼らのようないくつかの保護メカニズム、参加する必要があります。セキュリティチェックのために春のセキュリティを統合したカスタムパスアクチュエータエンドポイント、およびその上に。(特に必要はない、このエンドポイントを開けないでください)

エンドポイントセキュリティチェックのための春のセキュリティ統合

情報は、対話エンドポイントによって生成されているので外部からの不正アクセスを防止する必要性に非常に敏感です。あなたのアプリケーションが存在する場合に春のセキュリティデフォルト使用した場合、依存関係のHTTPベースの認証フォーム保護エンドポイントにします。

ない場合は、単にに対応する依存関係を追加します。

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

添加した後、私たちは春のセキュリティのデフォルト設定を上書きするセキュリティ検証ルールを定義する必要があります。

ここで私は、テンプレート設定の2つのバージョンを与えます:

import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest;
import org.springframework.boot.actuate.context.ShutdownEndpoint;
import org.springframework.boot.autoconfigure.security.servlet.PathRequest;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
 * @author Richard_yyf
 */
@Configuration
publicclassActuatorSecurityConfigextendsWebSecurityConfigurerAdapter{
/*
     * version1:
     * 1. 限制 '/shutdown'端点的访问,只允许ACTUATOR_ADMIN访问
     * 2. 允许外部访问其他的端点
     * 3. 允许外部访问静态资源
     * 4. 允许外部访问 '/'
     * 5. 其他的访问需要被校验
     * version2:
     * 1. 限制所有端点的访问,只允许ACTUATOR_ADMIN访问
     * 2. 允许外部访问静态资源
     * 3. 允许外部访问 '/'
     * 4. 其他的访问需要被校验
     */
@Override
protectedvoid configure(HttpSecurity http) throwsException{
// version1
//        http
//                .authorizeRequests()
//                    .requestMatchers(EndpointRequest.to(ShutdownEndpoint.class))
//                        .hasRole("ACTUATOR_ADMIN")
//                .requestMatchers(EndpointRequest.toAnyEndpoint())
//                    .permitAll()
//                .requestMatchers(PathRequest.toStaticResources().atCommonLocations())
//                    .permitAll()
//                .antMatchers("/")
//                    .permitAll()
//                .antMatchers("/**")
//                    .authenticated()
//                .and()
//                .httpBasic();
// version2
        http
.authorizeRequests()
.requestMatchers(EndpointRequest.toAnyEndpoint())
.hasRole("ACTUATOR_ADMIN")
.requestMatchers(PathRequest.toStaticResources().atCommonLocations())
.permitAll()
.antMatchers("/")
.permitAll()
.antMatchers("/**")
.authenticated()
.and()
.httpBasic();
}
}

application.properties以下のような構成は以下のとおりです。

# Spring Security Default user name and password
spring.security.user.name=actuator
spring.security.user.password=actuator
spring.security.user.roles=ACTUATOR_ADMIN

オリジナルリンク:

https://juejin.im/post/5e2179def265da3e152d2561

推荐阅读:从零单排HBase 02:全面认识HBase架构(建议收藏)
11 国股市熔断,“祸及”程序员?!
云原生就一定安全吗?
和黑客斗争的 6 天!
用 3 个“鸽子”,告诉你闪电网络是怎样改变加密消息传递方式的!
想成为一个数据科学家却不知道从何下手?这份路线图带你打开数据科学大门!
真香,朕在看了!
公開された280元の記事 ウォンの賞賛1245 ビュー118万+

おすすめ

転載: blog.csdn.net/FL63Zv9Zou86950w/article/details/104890016