MackerelのAWSインテグレーションで簡単にインスタンスを監視してみた

2016.09.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちわ。MSといえばジェガン好きの市田です。
今回は、監視サービスMackerelのAWSインテグレーションという機能を使ってみたいと思います。

AWSインテグレーションとは

Mackerelのサービスの一つで、監視エージェントをインストールせずにEC2などのAWSリソースをモニタリングできるサービスです。
監視エージェントをインストールすると更に詳細な情報を取得することができます。 詳細は下記の公式サイトをご確認ください。

AWSインテグレーション - Mackerel ヘルプ

何が見れるのか

AWSインテグレーションは、監視エージェントをインストールしない代わりに、AWSのAPIをコールしてメトリックを監視できるというものです。 つまり、CloudWatchと見れるものと同等のものが見れるということになります。

監視エージェントをインストールすると、メモリ使用量やロードアベレージを監視できるようになります。

手順の流れ

  1. AWS側でIAMユーザーを作成する
  2. 作成したIAMユーザにポリシーを付与する
  3. IAMユーザのアクセスキーをMackerelに登録する
  4. EC2のタグで登録対象を絞り込む

基本的には、上記のMackerelの公式ページにある手順に沿って作業を行ってみたいと思います。

IAMユーザーの作成

まずAWS側でMackerel用のIAMユーザを作成します。

IAM

今回は公式の手順の通り「MackerelAWSIntegrationUser」というユーザ名で作成します。
他のユーザ名でも構いません。

make iam

作成できたら、必ず認証情報のファイルをダウンロードしておきましょう。 後でダウンロードすることはできません。

download iam

IAMユーザのポリシー付与

次に、作成したIAMユーザに対して、Mackerelで必要なポリシーを設定します。

アタッチするポリシーは以下です。

  • AmazonEC2ReadOnlyAccess
  • AmazonElastiCacheReadOnlyAccess
  • AmazonRDSReadOnlyAccess

「ポリシーのアタッチ」をクリックします。

attach policy

「AmazonEC2ReadOnlyAccess」で検索して該当するポリシーにチェックを入れます。

AmazonEC2ReadOnlyAccess

チェックをいれたら、検索窓のキーワードを消して「AmazonElastiCacheReadOnlyAccess」で再度検索します。 検索で出てきたポリシーにチェックをいれます。

AmazonElastiCacheReadOnlyAccess

同様に「AmazonRDSReadOnlyAccess」についても検索してチェックを入れます。

AmazonRDSReadOnlyAccess

下記のように3つ全てにチェックが入っていれば、「ポリシーのアタッチ」をクリックしてアタッチします。

3policy

これで「MackerelAWSIntegrationUser」ユーザに3つのポリシーが適用されました。

policy

IAMユーザのアクセスキーをMackerelに登録

上記で作成した「MackerelAWSIntegrationUser」ユーザのキー情報をMackerelに登録します。 Mackerlの管理画面にログインして、登録画面を開きます。

  1. Mackrelの画面左上からトップページに移動します。
  2. トップページの「AWSインテグレーション」タブを開きます。
  3. 「新しいAWSアクセスIDを登録」をクリックします。

top

先ほどIAMユーザを登録した際にダウンロードした認証情報のファイルから、アクセスキー、シークレットアクセスキーを入力します。
リージョンは、今回東京リージョンなので「ap-northeast-1」を選択しています。

registry-awsinteg1

メトリックを収集したいサービスにチェックを入れます。
サービスとロールは作成していたら、希望のものを選択してください。今回は未指定のままにします。

metric

下にスクロールして、収集対象にしたいインスタンスにつけるタグを設定します。
ここでいうタグとは、AWS側でEC2に設定するタグのことです。このタグの有無で収集対象を識別することができます。

今回は、タグ名「mackerel」の内容が「true」であれば監視対象になるように設定します。 基本設定は、任意の名前で構いません。

macktag

最後に「作成」をクリックして、下記のような画面になっていればOKです

mackerel-aws

タグによる絞り込み

次に先ほど作成したタグで監視を絞り込む設定を行います。

タグで絞込むためには各サービスのタグを取得するAPIに対する権限が必要になります。
先ほどIAMユーザに設定したポリシーに下記のアクションが許可されているかを確認します。

  • ec2:DescribeTags
  • elasticloadbalancing:DescribeTags
  • rds:ListTagsForResource
  • elasticache:ListTagsForResource

今回は、EC2だけ監視対象にしているので、ec2:DescribeTagsのアクションがアタッチしたポリシーAmazonEC2ReadOnlyAccessで許可されているか確認します。

amazonec2readonly

下記にあるように「ec2:Describe*」となっているのでec2:DescribeTagsが許可されていることが分かります。

ec2describe.png

次に連携ユーザーに対する iam:GetUserも許可します。
こちらはIAMのインラインポリシーで作成します。

inlinepolicy

ポリシージェネレーターで作成します。

policygenerator

AWSサービスは「AWS Identify and Access Management(IAM)」を選択します。
アクションは「GetUser」だけ選択します。

makepolicy1

Amazonリソースネーム(ARN)は「arn:aws:iam::account-id:user/user-name」の形式で指定します。
account-idの部分は監視したいAWSアカウントのIDを入れてください。user-nameは作成済みのIAMユーザ「MackerelAWSIntegrationUser」を指定します。
ARNの入力ができたら「ステートメントを追加」をクリックします。

makepolicy2

次の画面では、そのまま「次のステップ」をクリック。

makepolicy3

次の画面も、そのまま「ポリシーの適用」をクリック。

makepolicy4

これでiam:GetUserの追加が完了しました。

makepolicy5

EC2にタグを設定する

次にEC2にタグ設定を行います。
設定の内容は、Mackerelで指定したものを設定します。こうすることで、Mackerlで設定したタグが指定の内容になっているインスタンスのみ監視対象にすることができます。

下記の通り、mackerelタグがtrueになっているインスタンスが監視対象になります。

mackerel

Mackerelの確認

この状態でMackerel側の確認をして、タグを設定した2つのEC2インスタンスが表示されていればOKです。

mackerel-hosts

上記に表れているホスト名のうち、インスタンスIDになっているものとデフォルトのホスト名になっているものの違いは、監視エージェントの有無によるものです。
インスタンスIDになっている方には監視エージェントがインストールされていないものになります。

インスタンスをクリックするとグラフを見ることができます。

ec2metrics

ちなみに、監視エージェントを入れると下記のようにメモリ使用量のグラフなどを見ることができます。

agentmetrics

最後に

今回はEC2だけを対象にAWSインテグレーションを設定してみました。
公式サイトにあるように、他のリソース情報を収集・監視したい場合は、IAM設定を追加しなければいけない場合があります。

以上です。