1.はじめに
現在のマイクロサービスアーキテクチャのアプローチでは、サービスコールを介して相互に対話する、異なるマシン上で展開されたサービスの多くを持って、完全なビジネス・プロセスの途中では、その後、微細加工及び伝送サービスの数を通過します各サービスの健康状態を知るためにどのように特に重要です。
幸いにも春ブーツが監視モジュール春ブーツアクチュエータを提供してくれ、あなたと共有することになり、この記事では、春ブーツアクチュエータのいくつかの日常使用におけるマイクロ管理を監視するために、私たちのサービスで私たちを助けるために、いくつかの一般的な使用法を探求します。
春ブーツアクチュエータは、私たちはこのような状況、豆の荷重条件、環境変数、ログ情報、スレッド情報を監視、内部監視手続の動作を実現するのに役立ちます。
2.アクチュエータの使用
2.1プロジェクトが依存しています
春ブーツアクチュエータは、以下の依存関係を追加する必要があります使用します。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
注意:春ブーツアクチュエータに、我々は依存性に関連するセキュリティコントロールを追加することをお勧めセキュリティを保護するために、当社のサービスの詳細を公開するためspring-boot-starter-security
のアプリケーションの監視エンドポイントにアクセスするとき、そう、あなたは、認証情報を入力する必要があります。必要な依存関係は次のよう:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2.2プロジェクトの構成
次のようにapplication.ymlプロフィール:
リスト:春ブーツ・アクチュエータ/ srcに/メイン/リソース/ application.yml
***
server:
port: 8080
info:
app:
name: spring-boot-actuator
version: 1.0.0
spring:
security:
user:
name: admin
password: admin
今すぐアクセスにブラウザを開いて、プロジェクトを開始するためにします。http:// localhost:8080 /アクチュエータ、あなたはJSONの下に示されているページを見ることができます:
{
"_links":{
"self":{
"href":"http://localhost:8080/actuator",
"templated":false
},
"health":{
"href":"http://localhost:8080/actuator/health",
"templated":false
},
"health-component-instance":{
"href":"http://localhost:8080/actuator/health/{component}/{instance}",
"templated":true
},
"health-component":{
"href":"http://localhost:8080/actuator/health/{component}",
"templated":true
},
"info":{
"href":"http://localhost:8080/actuator/info",
"templated":false
}
}
}
これらのリンクは唯一、デフォルトでサポートされています。
/actuator
/actuator/health
/health/{component}/{instance}
/health/{component}
/actuator/info
私たちは、application.ymlより監視情報に開くように設定ファイルに割り当てを増やすことができます。
management:
endpoints:
web:
exposure:
include: '*'
# base-path: /monitor
endpoint:
health:
show-details: always
shutdown:
enabled: true
management.endpoints.web.exposure.include='*'
:すべての監視に代わってオープンした、もちろん、あなたもよう、監視するために開かれるように構成することができますmanagement.endpoints.web.exposure.include=beans,trace
。management.endpoint.health.show-details=always
健康エンドポイントを意味することは、ディスプレイ上のすべての詳細です。デフォルトでは、/アクチュエータ/健康が開示されており、詳細は表示されません。management.endpoints.web.base-path=/monitor
代表は春のブートアプリケーション、デフォルトのパスを監視するために、別のURLアドレスを有効にする/actuator/*
この開いた構成、アクセス・パスは、再起動後に再びなります場合は、/manage/*
。management.endpoint.shutdown.enabled=true
有効なインターフェイスには、春のブートを停止しました。
いくつかのビジネスシナリオでは、我々は情報取得の監視を横断しなければならないことがあり、春ブーツアクチュエータは、デフォルトでは、クロスドメインの呼び出しをサポートするために、関連するCORSに設定を提供し、CORSのサポートが無効になっている、唯一のセットmanagement.endpoints.web.cors.allowed-origins
にプロパティを有効。以下の構成から可能にhttps://www.geekdigging.com
GETとPOSTはドメインを呼び出します。
management:
endpoints:
web:
cors:
allowed-origins: https://www.geekdigging.com
allowed-methods: GET,POST
2.3 RESTインターフェース
春ブーツアクチュエータを使用すると、アプリケーションの内部状態は、それらを介して実行されて理解することができ、非常に豊かな監視インタフェースを提供してくれます。一方、アクチュエータは、ユーザが、彼らの実用的なアプリケーションの動作を監視することができ、いくつかの指標がに従い、より懸念している定義する、ユーザ定義の追加のエンドポイントをサポートします。
HTTPメソッド | パス | 説明 |
---|---|---|
取得する | /はAuditEvents | 情報の用途に現在の監査イベントを表示します |
取得する | /豆 | 春豆のすべてのアプリケーションの完全なリストを表示 |
取得する | /条件 | ステータス表示の設定と自動設定クラスのカテゴリ(設定および自動クラス)とその理由が適用されるか、適用されません |
取得する | / configprops | すべて@ConfigurationPropertiesのセットリストを表示 |
取得する | / ENV | ConfigurableEnvironmentから表示属性の春 |
取得する | /フライウェイ | ディスプレイのデータベース移行パスがあれば、 |
取得する | /健康 | 健康情報表示アプリケーション(アクセスへの非公認接続を使用している場合、すべての情報の詳細が表示されてアクセスするための認証された接続を使用し、シンプルな「状態」を表示します) |
取得する | /情報 | 任意のアプリケーションの情報を表示します |
取得する | / LiquiBaseを | もしあれば、任意のデータベース移行パスを表示LiquiBaseを |
取得する | /メトリック | 現在のアプリケーションに関する表示メトリクス情報 |
取得する | /マッピング | それは@RequestMappingのすべてのセットパスのリストを表示します |
取得する | /スケジュールされたタスク | ディスプレイ用途スケジュールされたタスク |
取得する | /セッション | 春のセッションは、セッションストアからのサポートを可能にし、削除(検索と削除)ユーザセッションを取得します。利用できない反応性のサポートWebアプリケーションの春のセッションを使用した場合。 |
役職 | /シャットダウン | アプリケーションは優雅な方法(デフォルトでは有効になっていません)でシャットダウンすることができます |
取得する | / threaddump | スレッドダンプを実行します |
あなたは、Webアプリケーション(Spring MVCの、春WebFlux、またはジャージー)を使用する場合は、次のインタフェースを使用することができます。
HTTPメソッド | パス | 説明 |
---|---|---|
取得する | / heapdump | gzipで圧縮されたのhprofヒープダンプファイルを返します。 |
取得する | / jolokia | (Jolokiaクラスパスは、使用できないWebFlux)HTTP JMX豆を介した暴露 |
取得する | /ログファイル | バックログファイルの内容(又はlogging.file logging.pathプロパティ設定されている場合)、受信ログファイルの情報コンテンツのHTTPのRangeヘッダ部を支持します |
取得する | /プロメテウス | 表示メトリクス情報は、フォーマットサーバプロメテウスを把握することができます |
3.詳細なインタフェース
3.1 /健康
健康は主に、我々は監視ポイントの最高周波数を使用するアプリケーションの動作状態を確認するために使用されます。このインタフェースは、一般的に我々のアプリケーションの状態を実行中のインスタンス、および理由データベース接続などの「健康」のアプリケーションではない、ディスク容量はそれほどでは十分ではありませんとを思い出させるために使用されています。
デフォルトでは、健康状態が訪問し、依存関係を追加した後、プロジェクトを開始することが開いてます。http:// localhost:8080 /アクチュエータ/健康アプリケーションの状態を確認します。
{
"status" : "UP"
}
デフォルトでは、春のブートアプリケーションの最終ステータスがHealthAggregator
作ら要約、アルゴリズムの概要は次のとおりです。
- ステータスコードシーケンスがされ
setStatusOrder(Status.DOWN, Status.OUT_OF_SERVICE, Status.UP, Status.UNKNOWN);
て:。 - フィルタリング認識できない状態コード。
- なしステータスコード場合は、全体の春ブートアプリケーションの状態は不明です。
- 1の順にソートされたすべての収集の状態コード。
- 全体春ブートアプリケーションの状態として、最初のステータスコードで秩序状態コードシーケンスを返します。
あなたのアプリケーションのためのいくつかの健康健康指標の合併による健康。春ブーツアクチュエータは、自動的に次の設定を行います。
名前 | 説明 |
---|---|
CassandraHealthIndicator | カサンドラデータベースが起動したかどうか確認してください。 |
CouchbaseHealthIndicator | Couchbaseのクラスタが開始されていることを確認してください。 |
DiskSpaceHealthIndicator | 低ディスクの空き容量を確認してください。 |
DataSourceHealthIndicator | あなたは、接続のデータソースを確立できるかどうかを確認してください。 |
ElasticsearchHealthIndicator | Elasticsearchクラスタが開始されていることを確認してください。 |
InfluxDbHealthIndicator | InfluxDBサーバーが開始されていることを確認してください。 |
JmsHealthIndicator | JMSブローカーが開始されたか確認してください。 |
MailHealthIndicator | メールサーバーが開始されていることを確認してください。 |
MongoHealthIndicator | Mongoのデータベースが開始されているかどうかを確認してください。 |
Neo4jHealthIndicator | Neo4jサーバーが開始されていることを確認してください。 |
RabbitHealthIndicator | ウサギのサーバが起動されているかどうかを確認してください。 |
RedisHealthIndicator | Redisのサーバーが起動しているか確認してください。 |
SolrHealthIndicator | Solrのサーバが起動しているか確認してください。 |
あなたが設定することができますmanagement.health.defaults.enabled
自分の財産のすべてを無効にします。
3.2 /情報
私たちは、サンプルプロジェクトで設定された情報の情報は、設定ファイルに、当社独自の設定で始まるメッセージです。
info:
app:
name: spring-boot-actuator
version: 1.0.0
プロジェクトを開始し、アクセスにブラウザを開く:http://localhost:8080/actuator/info
次の結果を:
{
"app":{
"name":"spring-boot-actuator",
"version":"1.0.0"
}
}
3.3 /豆
アクセスするには、ブラウザを開いて、プロジェクトを開始します。http://localhost:8080/actuator/beans
以下のように、結果の一部は以下のとおりです。
{
"contexts": {
"application": {
"beans": {
"endpointCachingOperationInvokerAdvisor": {
"aliases": [],
"scope": "singleton",
"type": "org.springframework.boot.actuate.endpoint.invoker.cache.CachingOperationInvokerAdvisor",
"resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfiguration.class]",
"dependencies": ["environment"]
},
"defaultServletHandlerMapping": {
"aliases": [],
"scope": "singleton",
"type": "org.springframework.web.servlet.HandlerMapping",
"resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
"dependencies": []
},
},
"parentId": null
}
}
}
从中可以看到,这个接口展现了 bean 的别名、类型、是否单例、类的地址、依赖等信息。
3.4 /conditions
启动工程,打开浏览器访问: http://localhost:8080/actuator/conditions
,部分结果如下:
{
"contexts": {
"application": {
"positiveMatches": {
"AuditAutoConfiguration#auditListener": [{
"condition": "OnBeanCondition",
"message": "@ConditionalOnMissingBean (types: org.springframework.boot.actuate.audit.listener.AbstractAuditListener; SearchStrategy: all) did not find any beans"
}],
"AuditAutoConfiguration#authenticationAuditListener": [{
"condition": "OnClassCondition",
"message": "@ConditionalOnClass found required class 'org.springframework.security.authentication.event.AbstractAuthenticationEvent'"
}, {
"condition": "OnBeanCondition",
"message": "@ConditionalOnMissingBean (types: org.springframework.boot.actuate.security.AbstractAuthenticationAuditListener; SearchStrategy: all) did not find any beans"
}],
},
}
}
}
是用这个接口可以看出应用运行时查看代码了某个配置在什么条件下生效,或者某个自动配置为什么没有生效。
3.5 /shutdown
这个接口首先需要在配置文件中配置开启此功能:
management.endpoint.shutdown.enabled=true
配置完成后,可以使用 curl 模拟 post 请求此接口:
curl -X POST "http://localhost:8080/actuator/shutdown"
显示结果为:
{
"message": "Shutting down, bye..."
}
注意:示例工程添加了 spring-boot-starter-security
,直接使用 post 访问此接口会响应 401 ,表示无权限访问,如需测试此接口,请暂时先关闭 spring-boot-starter-security
。
这时可以看到我们启动的示例工程已经关闭了。
3.6 /mappings
描述全部的 URI 路径,以及它们和控制器的映射关系
启动工程,打开浏览器访问: http://localhost:8080/actuator/mappings
,部分结果如下:
{
"handler": "Actuator web endpoint 'beans'",
"predicate": "{GET /actuator/beans, produces [application/vnd.spring-boot.actuator.v2+json || application/json]}",
"details": {
"handlerMethod": {
"className": "org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping.OperationHandler",
"name": "handle",
"descriptor": "(Ljavax/servlet/http/HttpServletRequest;Ljava/util/Map;)Ljava/lang/Object;"
},
"requestMappingConditions": {
"consumes": [],
"headers": [],
"methods": ["GET"],
"params": [],
"patterns": ["/actuator/beans"],
"produces": [{
"mediaType": "application/vnd.spring-boot.actuator.v2+json",
"negated": false
}, {
"mediaType": "application/json",
"negated": false
}]
}
}
}
3.7 /threaddump
/threaddump 接口会生成当前线程活动的快照。这个功能非常好,方便我们在日常定位问题的时候查看线程的情况。 主要展示了线程名、线程ID、线程的状态、是否等待锁资源等信息。
启动工程,打开浏览器访问: http://localhost:8080/actuator/threaddump
,部分结果如下:
{
"threads": [{
"threadName": "Reference Handler",
"threadId": 2,
"blockedTime": -1,
"blockedCount": 2,
"waitedTime": -1,
"waitedCount": 0,
"lockName": null,
"lockOwnerId": -1,
"lockOwnerName": null,
"daemon": true,
"inNative": false,
"suspended": false,
"threadState": "RUNNABLE",
"priority": 10,
"stackTrace": [{
"classLoaderName": null,
"moduleName": "java.base",
"moduleVersion": "11.0.4",
"methodName": "waitForReferencePendingList",
"fileName": "Reference.java",
"lineNumber": -2,
"className": "java.lang.ref.Reference",
"nativeMethod": true
}
...
"lockedMonitors": [],
"lockedSynchronizers": [{
"className": "java.util.concurrent.locks.ReentrantLock$NonfairSync",
"identityHashCode": 2060076420
}],
"lockInfo": null
...
{
"threadName": "DestroyJavaVM",
"threadId": 42,
"blockedTime": -1,
"blockedCount": 0,
"waitedTime": -1,
"waitedCount": 0,
"lockName": null,
"lockOwnerId": -1,
"lockOwnerName": null,
"daemon": false,
"inNative": false,
"suspended": false,
"threadState": "RUNNABLE",
"priority": 5,
"stackTrace": [],
"lockedMonitors": [],
"lockedSynchronizers": [],
"lockInfo": null
}]
}