春ブーツ(IX):サービス春ブーツアクチュエータのコメントを監視マイクロアプリケーション

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.comGETと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作ら要約、アルゴリズムの概要は次のとおりです。

  1. ステータスコードシーケンスがされsetStatusOrder(Status.DOWN, Status.OUT_OF_SERVICE, Status.UP, Status.UNKNOWN);て:
  2. フィルタリング認識できない状態コード。
  3. なしステータスコード場合は、全体の春ブートアプリケーションの状態は不明です。
  4. 1の順にソートされたすべての収集の状態コード。
  5. 全体春ブートアプリケーションの状態として、最初のステータスコードで秩序状態コードシーケンスを返します。

あなたのアプリケーションのためのいくつかの健康健康指標の合併による健康。春ブーツアクチュエータは、自動的に次の設定を行います。

名前 説明
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
    }]
}

4. 示例代码

示例代码-Github

示例代码-Gitee

5. 参考:

使用 Spring Boot Actuator 监控应用

Spring Boot 官方文档之 Actuator

おすすめ

転載: www.cnblogs.com/babycomeon/p/11639361.html