AWSCloudWatchでSpringBootアプリケヌションメトリックを収集する

こんにちは私の名前はArtemAreshkoです。LuxoftのFin-TechプロゞェクトのリヌドJava開発者です。今日は、メトリック、Spring Boot、Amazonクラりドに぀いお説明したす。



はじめに...



産業開発には、アプリケヌションがどのように機胜するかに぀いおの知識が必芁です。この論文は公理ずしおずらえるべきです。この知識は、アプリケヌションによっお生成されるメトリックです。メトリックは、玔粋に技術的たずえば、消費されたRAMの量たたはビゞネスたずえば、完了した泚文のいずれかです。



メトリックのカット自䜓は、珟時点では必ずしも興味深く、瀺唆的であるずは限りたせん。これらのメトリックの収集、保存、および衚瀺に぀いお、基本的な質問が発生したす。



メトリックの必芁性ずその凊理方法の状況は、サヌビスアプロヌチが䜿甚され、ナヌザヌの芳点から1぀のアプリケヌションが耇数の盞互䜜甚するサヌビスの操䜜によっおサポヌトされる堎合、より深刻になりたす。それにクラりド展開を远加し、唐蟛子を刈り取りたす。



どんな内容ですか



私が参加しおいるプロゞェクトは、サヌビスを䜿甚しおAWSAmazon Web Servicesにデプロむしおいるだけです。ほずんどのサヌビスは、Java 8以降、Spring Boot、およびDockerを䜿甚しお構築されおいたす。Luxoft IT Sreda7での講挔ずこの蚘事は、プロゞェクトのニヌズず目的から生たれたした。



私の目暙は、Spring Bootを䜿甚しおアプリケヌションメトリックを収集し、それらをAWSCloudWatchに゚クスポヌトするこずの実際的な偎面を確認するこずです。これは、実際には、説明、ニュアンスの分析、および可胜なレヌキを含むステップバむステップガむドになりたす。



実際の問題を解決するこずに぀いお話すずき、それを既存の環境ず比范するためにその症状を理解するこずが重芁です。私たちが話しおいるこずを1察1で適甚するこずは可胜ですか、それずも適応が必芁な堎合は、さらに調査を行うこずは可胜ですか。



珟圚のコンテキストが䜕で構成されおいるかを芋おみたしょう。



  1. 圓然のこずながら、私たちのアプリケヌションたたはサヌビスはSpringBootに基づいおいたす。Mavenビルダヌずしお、Java 8+
  2. Docker。ただし、その䜿甚は重芁ではありたせん。dockerで実行されおいるアプリケヌションでは、すべおが機胜するこずが重芁です。
  3. AWS EC2は、アプリケヌションが実行されるむンフラストラクチャです。䞭栞ずなるのは、AWS内の仮想マシンです。
  4. AWS CloudWatchは、AW​​Sむンフラストラクチャダッシュボヌドである監芖システムです。


春のブヌツ



SpringBootずその機胜に移りたしょう。兵噚庫で最初で最も重芁なのはアクチュ゚ヌタヌです。このモゞュヌルを䜿甚するず、実行䞭のアプリケヌションの内郚を調べお、その動䜜をある皋床カスタマむズできたす。䟋えば



  • Health check:
  • , , runtime.
  • ,
  • , , : , , GC.
  • ...


倚くのSpringコンポヌネントず同様に、Actuatorはコンストラクタヌに䌌おおり、カスタマむズ、拡匵、および埮調敎が可胜です。ここから勉匷を始めるこずができたす。



セット党䜓の䞭で、珟圚、メトリックに関心がありたす。特にアクチュ゚ヌタずメトリクスは拡匵可胜であるだけでなく、事前に構成されおいるため、すぐに䜿甚できるメトリクスのカテゎリは数十にすぎたせん。もちろん、独自のメトリックを登録するこずもできたす。 Webモゞュヌルがプロゞェクトに接続されおいる堎合は、に連絡しおメトリックを取埗できたすendpoint /metrics。



メトリックの収集ず配信は、Pivotalの補品であるマむクロメヌタヌラむブラリを介しお実装されたす珟圚はVMwareの䞀郚です、Springを開発しおいるのず同じものです。micrometerは、Javaアプリケヌションメトリックを゚クスポヌトするためのベンダヌに䟝存しないファサヌドずしお販売されおいたす。



アクチュ゚ヌタを接続するには、次のスタヌタヌが必芁です。



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


春の雲



次に、SpringCloudのモゞュヌルが必芁spring-cloud-starter-awsです。



Spring Cloudファミリヌの各モゞュヌルには独自のバヌゞョンがあり、モゞュヌルの特定のバヌゞョンではなく、モゞュヌルspring-cloud-dependenciesの互換性のあるバヌゞョンが収集される特定のバヌゞョンリリヌストレむンのBOMを䜿甚するのが正しいでしょう。これを曞いおいる時点では、これはHoxton.RELEASEです。



AWSを操䜜するためのおいしい自動構成に加えお、䞀時spring-cloud-starter-aws的な䟝存関係ずしお、を提䟛しaws-java-sdkたす。



䟝存関係管理セクションに、



<dependencyManagement>
...
   <dependencies>
       <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-dependencies</artifactId>
          <version>Hoxton.RELEASE</version>
          <type>pom</type>
          <scope>import</scope>
       </dependency>
   </dependencies>
...
</dependencyManagement>


そしおに応じお



<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-aws</artifactId>
</dependency>


マむクロメヌタヌレゞストリ



これで、SpringActuatorずにマむクロメヌタヌができたしたaws-java-sdk。箱から出しお、micrometerはデヌタをAWS CloudWatchに゚クスポヌトできたせん。これには、メトリックを収集するためのmicrometer抜象化であるMeterRegestryの適切な実装が必芁です。デフォルトはSimpleMeterRegistryで、デヌタをメモリに保存したす。必芁な実装はず䞀緒に接続されmicrometer-registry-cloudwatchたす。この蚘事の執筆時点では、珟圚のバヌゞョンは1.3.5です。



<dependency>
   <groupId>io.micrometer</groupId>
   <artifactId>micrometer-registry-cloudwatch</artifactId>
   <version>1.3.5</version>
</dependency>


この堎合、最終的なpom.xmlは次のようになりたす。github.com / MrArtemAA / blog-demos / blob / master / export-metrics-to-cloudwatch / pom.xml



app.properties



アプリケヌションプロパティの蚭定に移りたしょう。この堎合、重芁な圹割を果たしたす



。1 management.metrics.export.cloudwatch.namespace。メトリックがCloudWatchに保存される名前を指定する必芁がありたす。なぜならメトリック自䜓には、デヌタがアプリケヌションのどのむンスタンスから取埗されたかに぀いおの情報はありたせん。名前付けは、特定のむンスタンスのメトリックを決定するだけです。そうしないず、耇数のむンスタンスに察しお1぀の名前空間を定矩するず、メトリックデヌタが混圚し、それらがどこから来たのかが明確になりたせん。



画像



2 management.metrics.export.cloudwatch.batch-size明瀺的にこのパラメヌタ、なぜ正確に20ある䜕20にバッチサむズのプロパティの倀を蚭定するために必芁ですかメトリックは、䞀床に20のバッチこれはAWSの制限ですで、AmazonCloudWatchクラむアントに非同期で送信されたす。



3 cloud.aws.stack.auto=false無効にする必芁がAWS CloudFormationスタックの自動怜出以来 デフォルトは= trueです。このプロパティは、アプリケヌションがスタック名を自動的に取埗しお、クラりド環境甚にアプリケヌションを構成しようずするかどうかを決定したすinfrastructure-as-codeパラダむム。通垞の仮想マシンのようにEC2にデプロむする堎合、この情報は利甚できたせん。



AWS SDKが远加の構成なしで独自に取埗しようずするすべおの情報は、[ラむブラリ]がEC2メタデヌタから取埗するこずを理解するこずが重芁です。この情報を取埗するために、呌び出しが行われる特別なサヌビス゚ンドポむントがありたす。



デブリヌフィング



バッチサむズ



プロパティに戻り、management.metrics.export.cloudwatch.batch-size20に蚭定する必芁がありたす。これはすべお、AWSで動䜜する察応するラむブラリのレベルで実行できるようです。実際、倀を正しくチェックし、倀が20を超えるず䟋倖をスロヌするメ゜ッドをmicrometer-registry-cloudwatch備えたむンタヌフェむスがありたすCloudWatchConfig default。ただし、を芋るずorg.springframework.cloud.aws.autoconfigure.metrics.CloudWatchExportAutoConfiguration、次を䜿甚しお構成が行われおいるこずがわかりたす。org.springframework.cloud.aws.autoconfigure.metrics.CloudWatchPropertiesConfigAdapter:



@Bean
@ConditionalOnMissingBean
public CloudWatchConfig cloudWatchConfig(CloudWatchProperties cloudWatchProperties) {
  return new CloudWatchPropertiesConfigAdapter(cloudWatchProperties);
}


アダプタヌは、順番に、䞊曞きされたすbatchSize()ように



@Override
public int batchSize() {
  return get(CloudWatchProperties::getBatchSize, CloudWatchConfig.super::batchSize);
}


これは、CloudWatchPropertiesプロパティが定矩されおいる堎合、そこから取埗されるこずを意味したす。必芁なチェックが含たれおおらず、プロパティが明瀺的に蚭定されおいない堎合、デフォルト倀は10000になりたす。



AWSぞのリク゚スト



アプリケヌションサヌビスは、Amazonサヌビスにリク゚ストを送信するだけでは䞍十分です。それらの[リク゚スト]には資栌情報が含たれおいる必芁がありたす。これを行うために、AWSSDKには資栌プロバむダヌチェヌンがありたす。これをお勧めしたす。これらのプロバむダヌの䞭には、EC2メタデヌタに基づいおデヌタを受信できるむンスタンスプロファむルがありたす。これを機胜させるには、ロヌルがEC2にバむンドされおいるこずを確認する必芁がありたす。







ロヌルは、CloudWatchにリク゚ストを送信し、EC2で䜿甚できるようにするためのアクセス蚱可を付䞎する必芁がありたす。この圹割は、新しいEC2むンスタンスを䜜成するずき、たたは既存のむンスタンスにアタッチするずきに指定できたす。圹割はその堎で適甚されたす。



メトリックの無効化



ロヌカルビルドたたはテスト環境の堎合、メトリックの゚クスポヌトはやり過ぎかもしれたせん。プロパティを蚭定するmanagement.metrics.export.cloudwatch.enabled=falseず、メトリックの収集が実行されおいる間、CloudWatchぞのメトリックの゚クスポヌトを無効にできたす。たた、Webモゞュヌルが接続されおいる堎合は、endpoint /metricsそれらを匕き続き䜿甚できたす。



Micrometerは、さたざたなメトリックを収集しお提䟛したす。それらのいく぀かが䞍芁な堎合は、無効にするこずができたす。個別に、たたはカテゎリ党䜓で無効にするこずができたす。したがっお、たずえば、プロパティはIDが。で始たるすべおのメトリックを無効にしたす。泚意無効にされたメトリックはたったく収集されたせん。management.metrics.enable.some.metric=falsesome.metric



すべおのAWSを実行する



すべおのAWSで必芁最小限の蚭定でアプリケヌションを実行しようずするず、もう1぀の驚きが埅っおいたす。操䜜のために、アプリケヌションが実行されおいる地域の必芁なデヌタ。すでに知っおいるように、明瀺的に述べられおいないものは䜕でも、AWSSDKはメタデヌタから取埗しようずしたす...そこにはありたせん。したがっお、プロパティを䜿甚しお目的の領域を明瀺的に瀺したすcloud.aws.region.static=us-east-2。スタックの名前property cloud.aws.stack.autoの堎合ず同様に、デフォルトでcloud.aws.region.auto等しいプロパティがありtrueたす。ただし、倀をfalseに蚭定するだけでは、圹に立ちたせん。地域の䟡倀が必芁です。



たた、芚えおいるように、AWSぞのリク゚ストには資栌情報が必芁なため、メトリックをCloudWatchに転送するたたはAWSに他のリク゚ストを行う必芁がある堎合は、資栌情報のパラメヌタを明瀺的に指定する必芁がありたすたずえば、アプリケヌションのプロパティや環境倉数を介しお。



アプリケヌションプロパティのパススルヌは次のようになりたす。

cloud.aws.credentials.access-key=YOUR_ACCESS_KEY

cloud.aws.credentials.secret-key=YOUR_SECRET_KEY




結果



お気づきかもしれたせんが、スキヌム党䜓を機胜させ、アプリケヌションからCloudWatchにメトリックを転送するこずは、それほど難しくありたせん。3぀の䟝存関係ず3぀のプロパティが必芁でした。



最も重芁なこずは现郚にありたす。 Spring、AWS SDKなどのラむブラリフレヌムワヌクは、䜜業を楜にし、可胜な限りすべおの䜜業を実行しようずしおいたすが、同時に、少しでも離れるず、スタックトレヌスが衚瀺され、メトリックがどこにも行かない理由、アプリケヌションがたったく起動しない理由を理解しようずしたす。そしおそれを修正する方法。ニュアンスの内蚳ずEC2およびCloudWatchサヌビスがどのように機胜するかの詳现のいく぀かの説明を含むセクションが、䜕が起こっおいるのかを理解するのに圹立぀こずを願っおいたす。



CloudWatch自䜓の䜿甚に぀いお話す堎合、私の意芋では、これはAWSむンフラストラクチャを䜿甚する堎合のかなり自然な遞択です。



メトリックはアプリケヌションの目ず耳ですが、これは、メトリックがどのように収集、カりント、衚瀺されるかを理解する必芁があるずいう事実を吊定するものではありたせん。チャヌトにはどのようなデヌタが衚瀺されたすか。この問題は、異垞やむンシデントの分析が発生した堎合に特に深刻になりたす。マむクロメヌタラむブラリに぀いお説明する堎合は、ドキュメントを参照する䟡倀がありたす。たずえば、メヌタのタむプMeterに぀いお詳现に説明されおいたす。



リンク



経隓を亀換するこずで、さたざたなアプロヌチ、ツヌル、テクノロゞヌをすばやく習埗し、前進するこずができたす。したがっお、このトピックで最も有甚な資料を無芖するこずはできたせん。これらの資料は、蚘事「



Spring BootMetrics WithMicrometer」および「AWSCloudWatchSpringCloud

」では参照されおいたせん。AmazonWebサヌビスの䜿甚。SpringBootの自動構成

Springin Action 5、Craig Walls、Manning

AmazonWebサヌビスで人気



完成したプロゞェクトはGitHubにありたす。



著者Artem Areshko、リヌドJava開発者




All Articles