kakakakakku blog

Weekly Tech Blog: Keep on Learning!

mkr plugin コマンドと mackerel-plugin-aws-ecs を試した

Mackerel で「ECS クラスタ」のメトリクスを取得する mackerel-plugin-aws-ecs を試した.ちなみに mackerel-plugin-aws-ecs を使うためには,去年11月にリリースされた「mkr プラグインインストーラー機能」も使う必要があり,この機能もまだキャッチアップできていなかったので合わせて試してみた.

mkr プラグインインストーラー機能

最初に「mkr プラグインインストーラー機能」をザッと紹介しておこうと思う.「mkr プラグインインストーラー機能」によって大きく変更されたことは,今までプラグインを一元管理していた mackerelio/mackerel-agent-plugins リポジトリに,今後新規のプラグインが入らなくなったことだと思う.今後は自分自身の GitHub リポジトリにプラグインを追加し,そのプラグインを「プラグインレジストリ」と呼ばれるリポジトリに登録することにより,幅広く活用してもらうことができる.なお,オレオレプラグインなど,限られたユースケースで使うような場合は,プラグインレジストリに登録する必要はなく,自分自身の GitHub リポジトリを参照して使うことができるけど,GitHub Releases の命名規則だけは合わせる必要がある.

github.com

他にも,Go 以外の好きな言語でプラグインを開発できるようになったりもしている.詳細な解説は以下の記事に載っている.

mackerel.io

mackerel-plugin-aws-ecs

プラグインレジストリの中に mackerel-plugin-aws-ecs がある.これは名前の通り ECS のメトリクスを取得するプラグインだけど,正確に言うと「ECS クラスタ」のメトリクスを取得する.「ECS コンテナインスタンス」や「ECS タスク」のメトリクスではないので,注意すること.さっそく試してみた.

github.com

インストール

mkr plugin install コマンドでインストールすることができる.基本的には最新版の GitHub Releases がインストールされるけど,特定のバージョンをインストールする場合は mkr plugin install mackerelio/mackerel-plugin-aws-ecs@v0.0.1 のように指定することもできる.また,プラグインを更新するときは --overwrite オプションを使う必要がある.今回は最新バージョンにした.

$ mkr --version
mkr version 0.24.1 (rev:102ee8d)

$ mkr plugin install mackerelio/mackerel-plugin-aws-ecs
           Downloading https://github.com/mackerelio/mackerel-plugin-aws-ecs/releases/download/v0.0.2/mackerel-plugin-aws-ecs_linux_386.zip
           Installing /opt/mackerel-agent/plugins/bin/mackerel-plugin-aws-ecs
           Successfully installed mackerelio/mackerel-plugin-aws-ecs

インストールしたプラグイン一覧

無意識に mkr plugin list と打ってみたけど list はサポートされていなかった.あれば良いのにー!今回は /opt/mackerel-agent/plugins/bin/ を ls して確認した.

$ mkr plugin list
No help topic for 'list'

$ ls -1 /opt/mackerel-agent/plugins/bin/
mackerel-plugin-aws-ecs

実行と設定

必要なオプションは複数あるけど,クレデンシャル関連は IAM Role で解決をしているため使わず,以下のようなコマンドにした.なお,メトリクスの値は仮で 0 にしている.あとオプションに付けるハイフンは,単語の場合は - じゃなくて -- 派なので,そうしている.

$ /opt/mackerel-agent/plugins/bin/mackerel-plugin-aws-ecs --metric-key-prefix ecs.kakakakakku-cluster --cluster-name kakakakakku-cluster --region ap-northeast-1
ecs.kakakakakku-cluster.CPUReservation.CPUReservationAverage    0  1515567018
ecs.kakakakakku-cluster.CPUReservation.CPUReservationMinimum    0  1515567018
ecs.kakakakakku-cluster.CPUReservation.CPUReservationMaximum    0  1515567018
ecs.kakakakakku-cluster.CPUUtilization.CPUUtilizationAverage    0  1515567018
ecs.kakakakakku-cluster.CPUUtilization.CPUUtilizationMinimum    0  1515567018
ecs.kakakakakku-cluster.CPUUtilization.CPUUtilizationMaximum    0  1515567018
ecs.kakakakakku-cluster.MemoryReservation.MemoryReservationAverage  0  1515567018
ecs.kakakakakku-cluster.MemoryReservation.MemoryReservationMinimum  0  1515567018
ecs.kakakakakku-cluster.MemoryReservation.MemoryReservationMaximum  0  1515567018
ecs.kakakakakku-cluster.MemoryUtilization.MemoryUtilizationAverage  0  1515567018
ecs.kakakakakku-cluster.MemoryUtilization.MemoryUtilizationMinimum  0  1515567018
ecs.kakakakakku-cluster.MemoryUtilization.MemoryUtilizationMaximum  0  1515567018

あとは /etc/mackerel-agent/mackerel-agent.conf に以下の設定を追加する.

[plugin.metrics.aws-ecs]
command = "/opt/mackerel-agent/plugins/bin/mackerel-plugin-aws-ecs --metric-key-prefix ecs.kakakakakku-cluster --cluster-name kakakakakku-cluster --region ap-northeast-1"

1日様子を見てみて,正常にメトリクスが取得できていた.

f:id:kakku22:20180111172255p:plain

(検証環境で取得した CPUUtilization と MemoryUtilization)

メトリクス

既に書いた通り,mackerel-plugin-aws-ecs で取得できるメトリクスは「ECS クラスタ」のメトリクスで,以下の計12種類となっている.

  • CPUReservation
    • Average
    • Minimum
    • Maximum
  • CPUUtilization
    • Average
    • Minimum
    • Maximum
  • MemoryReservation
    • Average
    • Minimum
    • Maximum
  • MemoryUtilization
    • Average
    • Minimum
    • Maximum

詳細は以下のドキュメントに載っているけど,CPUReservation など,コンテナインスタンスのオートスケールに活用できるメトリクスを取得することができる.なお,CloudWatch だと「3ヶ月間」のメトリクスしか残らない(ドキュメント「2週間」と書いてあったけど,確認したら「3ヶ月間」残っていた)けど,Mackerel なら「400日間」残せるため,メトリクスの長期的な傾向を知るためには Mackerel にメリットがある.

docs.aws.amazon.com

まとめ

  • 去年11月にリリースされた「mkr プラグインインストーラー機能」を試してみた
  • mkr plugin install でインストールできる mackerel-plugin-aws-ecs を導入してみた
  • 「ECS クラスタ」のメトリクスが取得できて便利だった(AWS インテグレーションに追加されたらまた話は変わりそう)
  • ECS 関連のアラート設定を Mackerel で管理できるので,運用も楽になる

typo 警察

mackerel-plugin-aws-ecs の README を読んでいたら,コマンド名が間違っていたので,修正しておいた.

github.com

mkr plugin で気になったこと

最後に mkr plugin で気になったこと(もしくは,僕の認識が間違っているかも)を箇条書きにしておこうと思う.

  • バイナリ(例えば /opt/mackerel-agent/plugins/bin/mackerel-plugin-aws-ecs など)からバージョンを確認できなかった
    • プラグインに問題があったときなど,バージョンを確認できないと不安になる
    • Chef でプラグインをプロビジョニングする場合,冪等性が保証できなくなる
  • mkr plugin list のような,プラグインを一覧するサブコマンドがなかった
  • Mackerel 関連のプロビジョニングは,全て cookbook-mackerel-agent で管理しているので,attributes にプラグイン名とバージョンを書けると助かる

github.com