マイクロサービスの特性は、機能モジュールの展開が分布していることを決定します。ほとんどの機能的モジュールは、さまざまなマシンで実行され、サービスコールを通じて相互作用します。正面およびバックオフィスでのビジネスフローは、多くのマイクロサービスによって処理され、渡されます。例外をすばやく見つける方法は?どのリンクに問題がありますか?
このフレームワークでは、マイクロサービスの監視が特に重要です。この記事では、主にSpring Boot Actuatorを組み合わせて、Microservice Spring Boot Actuatorの一般的な使用法を共有して、日常生活のマイクロサービスを監視および管理できるようにします。
アクチュエータの監視
Spring Bootは、「構成よりも優れた習慣」の概念を使用し、パッケージスキャンと自動構成メカニズムを使用して、瓶に依存するスプリングビーンをロードします。すべてのスプリング構成を実装するためにXML構成は必要ありません。これを行うとコードが非常に簡潔になりますが、アプリケーション全体のインスタンスの作成や依存関係などの情報は、さまざまな構成クラスの注釈に個別のものであるため、アプリケーション全体のリソースとインスタンスのさまざまな関係を分析することが非常に困難です。
アクチュエータは、Spring Bootが提供するアプリケーションシステムの内省と監視の統合機能です。自動構成情報、作成されたスプリングビーンズ、およびいくつかの環境特性など、アプリケーション構成の詳細情報を表示できます。
アクチュエータの監視は、次の依存関係を追加することで実行できます
<Dependencies> <Dependency> <GroupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> </dependency> <dependency> <groupid> org.springframework.boot </groupid> <deprency-startertartertartertarter-aptifatid> <gripid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-security </artifactid> </dependency> </dependencies>
アクチュエーターによって公開された監視インターフェイスのセキュリティを確保するために、セキュリティ制御依存関係を追加する必要があります。アプリケーション監視エンドポイントにアクセスする場合、検証情報が必要です。セキュリティの依存関係では、セキュリティを追加または管理しないように選択できますが、推奨されません。
アクチュエータのレストインターフェース
アクチュエーターの監視は、ネイティブエンドポイントとユーザー定義のエンドポイントの2つのカテゴリに分けられます。カスタムエンドポイントは、主にスケーラビリティを参照しています。ユーザーは、実際のアプリケーションに基づいて、より懸念される指標を定義し、ランタイム中にそれらを監視できます。
ネイティブのエンドポイントは、アプリケーションランタイムの内部状態を理解するために、アプリケーションで多数のWebインターフェイスを提供します。ネイティブのエンドポイントは、3つのカテゴリに分類できます。
アクチュエータは、次の表に示すように、13のインターフェイスを提供します。
| HTTPメソッド | パス | 説明する |
|---|---|---|
| 得る | /autoconfig | 自動構成レポートが提供され、どの自動構成条件が渡され、どの自動構成条件が渡されていないかを記録します。 |
| 得る | /configProps | 構成プロパティを使用してBeanを注入する方法を説明する(デフォルト値を含む) |
| 得る | /豆 | アプリケーションのコンテキストとその関係ですべての豆を説明してください |
| 得る | /ごみ | スレッドアクティビティのスナップショットを取得します |
| 得る | /env | すべての環境属性を取得します |
| 得る | /env/{name} | 名前に基づいて特定の環境属性値を取得します |
| 得る | /健康 | ヘルスメトリックをレポートアプリケーションのために、これらの値はHealthIndicatorの実装クラスによって提供されます |
| 得る | /情報 | アプリケーションのカスタム情報を取得します。これは、情報が率いる属性によって提供されます |
| 得る | /マッピング | すべてのURIパスとコントローラーとのマッピング関係を説明してください(アクチュエータのエンドポイントを含む) |
| 得る | /メトリック | メモリ使用量やHTTP要求カウントなど、さまざまなアプリケーションメトリックを報告します |
| 得る | /metrics/{name} | 指定された名前のアプリケーションメトリック値を報告します |
| 役職 | /シャットダウン | アプリケーションを閉じて、endpoints.shutdown.Enabledを要求する必要があります。 |
| 得る | /トレース | 基本的なHTTP要求追跡情報(タイムスタンプ、HTTPヘッダーなど)を提供する |
すぐに始めましょう
関連する構成
プロジェクトの依存関係
<Dependencies> <Dependency> <GroupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> </dependency> <dependency> <groupid> org.springframework.boot </groupid> spring-boot-startertartertarter-aTifiduator
構成ファイル
server: port: 8080management: security: enabled: false #Switch off security authentication port: 8088 #Admin port is adjusted to 8088 context-path: /monitor #actuator access path endpoints: shutdown: enabled: trueinfo: app: name: spring-boot-actuator version: 1.0.0
構成が完了した後、プロジェクトを開始でき、さまざまな監視機能の検証を続けることができます。
コマンドの詳細な説明
autoconfig
Spring Bootの自動構成関数は非常に便利ですが、問題がある場合に特定の原因を見つけることが困難であることもあります。 AutoConfigを使用して、アプリケーションランタイム中に特定の構成が有効になる条件、または自動構成が有効になっていない理由を表示します。
サンプルプロジェクトを開始して、http:// localhost:8088/monitor/autoconfigにアクセスしてください。情報の返品部分は次のとおりです。
{"positivematches":{"devtoolsdatasourceautoconfiguration":{"notmatched":[{"条件": "devtoolsdatasourceautoconfiguration.devtoolsdatasourceondition"、 "messed" wand "mated on" ond devtoolsdatasource ":" ]}、 "Remotedevtoolsautoconfiguration":{"notmatched":[{"条件": "onpropertycondition"、 "message": "@conditionalonproperty(spring.devtools.remote.secret)は財産を見つけませんでした。 「@conditionalonclassは、必要なクラス「javax.servlet.filter」、「org.springframework.server.server.serverhttprequest」を見つけました。configProps
構成ファイルに設定されたプロパティのコンテンツと、一部の構成プロパティのデフォルト値を表示します。
サンプルプロジェクトを開始して、http:// localhost:8088/monitor/configpropsにアクセスしてください。情報の返品部分は次のとおりです。
{... "EnvironmentEndPoint":{"prefix": "endpoints.env"、 "Properties":{"id": "env"、 "sensitive":true、 "enabled":spring.http.multipart-org.springframework.boot.autoconfigure.web.multipartproperties "" "" "" "": 「spring.http.multipart "、" Properties ":{" maxrequestsize ":" 10mb "、" filesizethReshold ":" 0 "、" null、 "maxfilesize": "1MB"、 "enabled":true、 "resolvelazily":false} {"id": "info"、 "sensitive":false、 "enabled":true}} ...}豆
この例から、Beanのエイリアス、タイプ、シングルトン、クラスのアドレス、依存関係、その他の情報が表示されていることがわかります。
サンプルプロジェクトを開始して、http:// localhost:8088/monitor/beansにアクセスしてください。情報の返品部分は次のとおりです。
[{"Context": "Application:8080:Management"、 "parent": "application:8080"、 "Beans":[{"Bean": "embeddedservletcontainerfactory"、 "airases":[]、 "scope": "singleton"、 "type": "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory", "resource": "null", "dependencies": [ ] }, { "bean": "endpointWebMvcChildContextConfiguration", "aliases": [ ], "scope": "singleton", "type": "org.springframework.boot.actuate.autoconfigure.endpointwebmvcchildcontextconfiguration $$ enthancerbyspringcglib $$ a4a10f9d"、 "resource": "null"、 "依存関係":[]}}]ごみ
/ダンプインターフェイスは、現在のスレッドアクティビティのスナップショットを生成します。この機能は非常に優れているため、日常生活で問題を見つけているときにスレッドの状況を確認するのが便利です。主に、ロックリソースを待つかどうか、スレッド名、スレッドID、スレッドステータスなどの情報を表示します。
サンプルプロジェクトを開始して、http:// localhost:8088/monitor/dumpにアクセスしてください。情報の返品部分は次のとおりです。
[{"ThreadName": "http-nio-8088-exec-6"、 "threadid":49、blockedtime ":-1、" blockedcount ":0、" waited-time ":-1、" waitedcount ":2、" lockname ": "Java.util.concurrent.locks.abstractuedsynchronizer$conditionobject@1630a501"、 "lockownerid":-1、 "lockownername":null、 "nunative":false、false、false、suspended ":fals、" threadstate ":" waiting "、" "" filename ":" "" "fifename": "" "fifename": "" "fifename": "Unsafe.java"、 "linenumber":-2、 "classname": "sun.misc.unsafe"、 "nativemethod":true}、{"methodname": "park"、 "filename": "locksupport.java"、 "linenumber": "classname" 「nativemethod」:false}、{"methodname": "await"、 "filename": "abstractqueuedsynchronizer.java"、 "linenumber":2039、 "classname": "java.util.concurrent.locks.abstracteuedsynchronizer 「gettask」、 "filename": "threadpoolexecutor.java"、 "linenumber":1067、 "classname": "java.util.concurrent.threadpoolexecutor"、 "nativemethod":false}、{"methodname": "runworker"、 "filenamurcuor": "filname" " "className": "java.util.concurrent.threadpoolexecutor"、 "nativemethod":false}、{"methodname": "run"、 "fileName": "swreetpoolexecutor.java"、 "linenumber":617、 "classname" "Nativemethod":false}、{"methodname": "run"、 "filename": "taskthread.java"、 "lineNumber":61、 "classname": "org.apache.tomcat.util.threads.taskthread $ $ wrappingrunnamable"、 "filen": "file": "filen":file ":file":file ":file" "filmet "Stread.java"、 "linenumber":745、 "classname": "java.lang.thread"、 "nativemethod":false}]、 "lockedmonitors":[]、 "lockedsynchronizers":[]、 "lockinfo":{"classname": "Java.util.concurrent.locks.abstractqueuedsynchronizer $ condryobject"、 "IdentityHashCode":372286721}} ...]env
使用する環境変数、JVMプロパティ、コマンドラインパラメーター、プロジェクトで使用されるJARパッケージなど、システム環境変数の構成情報を表示します。configPropsとは異なり、configPropsは構成情報に焦点を当て、envは環境情報に焦点を当てます。
サンプルプロジェクトを開始して、http:// localhost:8088/monitor/env。情報の返品部分は次のとおりです。
{"profiles":[]、 "server.ports":{"local.management.port":8088、 "local.server.port":8080}、 "servletcontextinitparams":{}、 "systemproperties":{"com.sun.management.jmxremote.authicate": ":" "": ""、 ""” "have.rung. 「Java(TM)SEランタイム環境」、「Spring.Output.ansi.Enabled」: "Always"、 "sun.boot.library.path": "c://プログラムファイル// java // jdk1.8.0_101 // jre // bin"、bin "、" java.vm.version ":" 25.101-b13 " 「Java.vendor.url ":" http://java.oracle.com/ "、" java.rmi.server.randomids ":" true "、" path.separator ":"; "、" java.vm.name ":" "user.country": "cn"、 "user.script": "" "、" sun.java.launcher ":" sun_standard "、" sun.os.patch.level ":" "、" pid ":" 5268 "、" com.sun.management.jmxremote.port "マシンSPE/envにさらされる機密情報を回避するために、パスワード、シークレット、キーという名前のすべての属性(または名前の最後の段落)が「*」で /envに追加されます。たとえば、プロパティ名Database.passwordがある場合、 /envの表示効果は次のようなものです。
「database.password」:「******」
/env /{name}の使用法
つまり、env拡張機能は、http:// localhost:8088/monitor/env/java.vm.version、return:{"java.vm.version": "25.101-b13"}などの指定された構成情報を取得できます。
健康
HealthEndPointが、ディスク検出やデータベース検出など、デフォルトの監視結果を提供することがわかります。
サンプルプロジェクトを開始して、http:// localhost:8088/monitor/health情報の一部にアクセスしてください。アプリケーションの全体的な健康状態を説明すると、UPはアプリケーションが健全であることを示します。ディスクスペースは、総ディスクスペース、残りのディスクスペース、および最小しきい値について説明します。 Application.Propertiesのしきい値は設定可能です
{"status": "up"、 "diskspace":{"status": "up"、 "total":209715195904、 "free":183253909504、 "threshold":10485760} "db":{"status": "up": "mysql": "" ""実際、Spring Boot-Actuatorのソースコードを見ると、HealthEndPointが提供する情報はこれに限定されないことがわかります。 org.springframework.boot.actuate.healthパッケージの下には、elasticsearchhealthindicator、redishealthindicator、rabbithealthindicatorなどがあります。
情報
情報は、情報から始まる構成ファイルで構成する構成情報です。たとえば、プロジェクトのサンプルの構成は次のとおりです。
情報:アプリ:名前:Spring-Boot-Actuatorバージョン:1.0.0
サンプルプロジェクトを開始して、http:// localhost:8088/monitor/infore情報の返品部分は次のとおりです。
{"app":{"name": "spring-boot-actuator"、 "バージョン": "1.0.0"}}マッピング
すべてのURIパスとコントローラーとのマッピング関係を説明してください
サンプルプロジェクトを開始して、http:// localhost:8088/Monitor/Mappingsにアクセスしてください。情報の返品部分は次のとおりです。
{"/**/favicon.ico":{"bean": "faviconhandlermapping"}、 "{[/hello]}":{"bean": "requestmappinghandlermapping"、 "method": "public java.lang.string com.neo.controller.hellocontroller. "Bean": "RequestMappingHandLermapping"、 "method": "public org.springframework.http.responseentity <java.util.map <java.lang.string、java.lang.object >> org.springframework.boot.autoconfigure.web.basicerrorcontroller.error(javax.servlet.http.httpservletrequest) "}}}メトリック
最も重要な監視コンテンツの1つは、主にJVMコンテンツの使用、GCの状況、クラスの読み込み情報などの監視です。
サンプルプロジェクトを開始して、http:// localhost:8088/monitor/metricsにアクセスしてください。情報の返品部分は次のとおりです。
{"mem":337132、 "mem.free":183380、 "processors":4、 "instance.uptime":254552、 "uptime":259702、 "systemload.average":-1.0、 "heap.committed":292864、 ":129024、" ":129024、" ":129024、" 「ヒープ」:1827840、「nonheap.committed」:45248、 "nonheap.init":2496、 "nonheap.used":44269、 "nonheap":0、 "threads.peak":63、 "threads.daemon":43、 "swreetsed":83、 "46、":63、 ":63、":63、 "classes.unloaded":6357、 "classes.unloaded":0、 "gc.ps_scavenge.count":8、 "gc.ps_scavenge.time":99、 "gc.ps_marksweep.count":1、 "gc.ps_marksweep.time":43、 "httpsesions.max": "-1" "httsions.max。 0}/Metricsインターフェイスによって提供される情報は、次のように単純に分類されます。
| 分類 | プレフィックス | レポートコンテンツ |
|---|---|---|
| ゴミコレクター | gc。* | 発生したゴミコレクションの数とゴミコレクションに費やされた時間は、マーククリーニングガベージコレクターと並行したゴミコレクターに適しています(java.lang.management。garbagecollectormxbeanに由来するデータ) |
| メモリ | mem。* | アプリケーションに割り当てられたメモリの量と自由メモリの量(java.lang。Runtimeに由来するデータ) |
| ヒープ | ヒープ。* | 現在のメモリ使用(java.lang.management.memoryusageに由来するデータ) |
| クラスローダー | クラス。* | JVMクラスローダーによってロードおよびアンロードされたクラスの数(java.lang。management.classloadingmxbeanに由来するデータ) |
| システム | プロセッサ、Instance.Uptime、uptime、systemload.average | プロセッサの数(java.lang.runtimeに由来するデータ)、ランタイム(java.lang.management.runtimemxbeanに由来するデータ)などのシステム情報、負荷平均(java.lang.management.operatingsingsystemmxbeanに由来するデータ) |
| スレッドプール | 糸。* | JVMスタートアップ後のスレッド、デーモンスレッド、およびスレッドのピーク数(java.lang.management.threadmxbeanに由来するデータ) |
| データソース | DataSource。* | データソース接続の数(データソースからのメタデータ、SpringアプリケーションコンテキストにDataSource Beanが存在する場合のみ) |
| トムキャットセッション | httpsessions。* | Tomcatのアクティブなセッション番号と最大セッション番号(データは、埋め込まれたTomcatサーバーを使用してアプリケーションを実行するときにのみ利用可能な埋め込まれたTomcatの豆からのものです) |
| http | Counter.Status。、Gauge.Response。 | さまざまなアプリケーションサービスのHTTP要求の測定とカウンター |
説明:
シャットダウン
インターフェイスをオンにし、Spring Bootアプリケーションをエレガントに閉じます。この関数を使用するには、最初に構成ファイルで有効にする必要があります。
エンドポイント:シャットダウン:有効:true
構成が完了したら、サンプルプロジェクトを開始して、http:// localhost:8088/shutdown return return fort in frowsは次のとおりです。
{「メッセージ」:「シャットダウン、さようなら...」}この時点で、アプリケーションが閉鎖されていることがわかります。
トレース
/TRACEインターフェイスは、要求方法、パス、タイムスタンプ、リクエストおよび応答ヘッダー情報など、すべてのWeb要求の詳細情報を報告し、各リクエストの詳細情報を記録できます。
サンプルプロジェクトを開始し、最初にそれをご覧ください:http:// localhost:8080/hello、次にブラウザで実行します:http:// localhost:8088/monitor/trace返品情報を表示します:
[{"Timestamp":1516780334777、 "info":{"method": "get"、 "path": "/hello"、 "headers":{"request":{"hosthost:" localhost:8080 "、" connection ":" kep-alive "、" cache-control ":" max-age = "" "" "max-age" "" "max-age" NT 10.0; win64; 「テキスト/html、アプリケーション/xhtml+xml、application/xml; q = 0.9、image/webp、image/apng、*/*; q = 0.8 "、" accept-encoding ":" gzip、deflate、br "、" accept-language ":" zh-cn、zh; q = 0.9 "、" cookie "、 "UM_DISTINCTID = 16053BA344F1CD-0DC220C44CC94-B7A103E-13C680-16053BA3450751; HM_LVT_0FB30C642C5F6453F17D881F529A1141 = 1513076406,1514961720,1515649377 HM_LVT_6D8E8BB59814010152D98507A18AD229 = 1515247964,151515296008,1515672972,1516086283 "}、「応答」:{" x-application-contestext " 「Text/HTML; charset = utf-8 "、" content-length ":" 11 "、" date ":" wed、2018年1月24日07:52:14 GMT "、" status ":" 200 "}}、" timetaken ":" 4 "}}]上記の情報は、 /helloリクエストの詳細を示しています。
その他の構成
機密情報へのアクセスの制限
上記の表によれば、認証が偽の場合、それはそれが鈍感であり、自由にアクセスできることを意味します。それ以外の場合は、保護され、自由にアクセスできません。
endpoints.mappings.sensitive = false
これには、それぞれをセットアップする必要があります。これはより厄介です。機密性の高い方法では、ユーザーがデフォルトでアクチュエータの役割を持たせる必要があるため、OFFにセキュリティ制限を設定することもできます。
management.security.enabled = false
または、細粒の制御のためにSpring Securityと協力します。
インターフェイスを有効にして無効にします
アクチュエーターのインターフェイスは有用ですが、必ずしもすべてを必要とするとは限りません。デフォルトでは、すべてのインターフェイス( /シャットダウンを除く)が有効になっています。たとえば、 /Metricsインターフェイスを無効にするには、次のように設定できます。
endpoints.metrics.enabled = false
1つまたは2つのインターフェイスのみを開きたい場合は、最初にすべてのインターフェイスを無効にしてから、必要な少数のインターフェイスを有効にします。これはより便利です。
endpoints.Enabled = falseEndpoints.metrics.Enabled = true
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。