tsalakh ain sus noam Huyah ol guf

勉強会のメモ。その他備忘録。参考にさせて頂いたサイトや資料はリンクさせて頂いていますが不都合があればご連絡ください。

【技術メモ】Micrometerで取得してCloudWatchに送る

Micrometerで取得してCloudWatchに送る

概要

SpringBootで、Micrometerで取得したメトリクスをCloudWatchに送るメモ。なにしろ、Prometheus連携の記事は大量にあるがCloudWatchはほぼない(需要がないのか?)

公式を見ると、なんとCloudWatchだけドキュメントがない。。。

micrometer.io

英語はよくわからないが、作ってくださろうとしているそうなので、公開されたらそちらを参照で。

stackoverflow.com

詳細

前提として、

  • Actuatorが入ったSpringBootアプリがあること(過去記事参照)
  • AWSアカウントはとっていること(CloudWatchが見れること)
  • 検証環境は、Mac Sierra 13.10.6 + Eclipse Oxygen
  • SpringBoot 2.1.2

流れ

  1. CloudWatchにメトリクスを送る用のロールをつくる
  2. SpringBootにCloudWatch連携ライブラリを追加する
  3. CloudWatch連携を実装
  4. CloudWatch連携実行
  5. ダッシュボードを作る

メトリクスを送る用のロール作成

AWSコンソールのIAMからロールの作成。

  • ユーザ名:cloudWatchSubscriber(任意でOK)
  • アクセスの種類:プログラムによるアクセス(コンソールは不要)
  • アクセス許可の設定:ユーザーをグループに追加
  • グループ :cloudWatchAccessGroup(任意でOK)
  • アタッチされたポリシー:CloudWatchFullAccess(もっと絞った方がいいかも)
  • タグの追加 (オプション):いったんなし

成功したら、アクセスキー ID、シークレットアクセスキーがあとで必要になるので、.csv のダウンロードをしておく。

CloudWatch連携ライブラリの追加

pom.xmlに以下を追加。(Actuatorはすでに入ってる前提。)

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

CloudWatch連携を実装

定期実行をどうしようかと思ったけど、とりあえずSpringBootのメインクラスで起動時に呼ぶのがいいか。 (@Scheduledで定期実行させたら、非同期のスレッドが大量にあがってしまった)

    private static void monitoringByMicrometer() throws Exception {
        CloudWatchMeterRegistry registry = new CloudWatchMeterRegistry(config, clock, cloudWatch);

        // io.micrometer.core.instrument.binder.* に定義されているBinderをBindする
        new ClassLoaderMetrics().bindTo(registry);
        new JvmGcMetrics().bindTo(registry);
        new JvmMemoryMetrics().bindTo(registry);
        new JvmThreadMetrics().bindTo(registry);

        IntStream.range(1, 20).forEach(n -> new Thread(sleep).run());

        Thread.sleep(60000);
    }

CloudWatch連携実行

SpringBootアプリ実行時に環境変数を設定

Eclipseの場合、以下で実行時の環境変数を設定できる

プロジェクト名右クリック > [Run As] > [Run Configurations...] > [Environment]

ダッシュボード作成

AWSコンソールからCloudWatchを選択、右メニューのメトリクスを見ると値が届いている(はず)

メトリクスでアドホックにグラフを作ってみてもいいし

右メニューのダッシュボードからグラフを並べることもできる

f:id:chamc:20190227024244p:plain

ホストが違うのをどうやって出し分けるんだろう・・・

参考リンク