AWSインテグレーション

AWSインテグレーションを用いると、AWSクラウド製品をMackerelのホストとして管理し、メトリックを監視することができます。本機能はTrialプランとStandardプランのみの提供となります。

AWSのクラウド製品1台が、Mackerelで1ホストとして登録され、Mackerelの課金対象のホスト数としてカウントされます。 また、5分ごとに取得対象となるメトリックの数だけAWSのAPIをコールして値を取得します。そのため、Amazon CloudWatch API利用の料金が発生する場合がありますのでご注意ください。

AWSインテグレーションは現在は以下のAWSクラウド製品に対応しています。取得メトリックなどについてはそれぞれのドキュメントを参照ください。

EC2ELB (CLB)ALBRDSElastiCacheRedshiftLambda

連携方法

AWSインテグレーションの連携方法には2つの方法があります。

  • MackerelのシステムのAWSアカウントからのアクセスのみを許可するIAMロールを設定し、AssumeRoleで認証する方法
  • Access Key IDとSecret Access Keyを設定する方法

セキュリティー保全の観点から、IAMロールで設定する方法を強く推奨します。

IAMロールを設定する方法

1. IAM Management Consoleにてロールを作成する

IAM Management Consoleにて新しいロールを作成します。 MackerelAWSIntegrationRole のようにMackerelのAWSインテグレーションで使用していることが分かりやすい名前を付けることを推奨します。

Mackerelの AWSアカウントによるアクセスを許可します。Role for Cross-Account Accessの Allows IAM users from a 3rd party AWS account to access the account. を選択します。

許可するAccount IDには 217452466226 、External IDには Mackerel-AWS-Integration と入力して下さい。Mackerelのシステムがユーザーのロールにアクセスするアカウントです。この設定により、作成されたロールにはMackerelのアカウントしかアクセスできない状態になります。Require MFA はチェックせずにロールを作成して下さい。

2. ポリシーを付与する

作成したロールに、以下のポリシーを付与します。 FullAccess権限を付与しないようにご注意ください。

  • AmazonRedshiftReadOnlyAccess
  • AmazonEC2ReadOnlyAccess
  • AmazonElastiCacheReadOnlyAccess
  • AmazonRDSReadOnlyAccess
  • AWSLambdaReadOnlyAccess

3. ロールARNをMackerelに登録する

ロールARNを、Mackerelに登録します。 登録するオーガニゼーションを間違えないようにご注意ください。

4. ホストを確認する

しばらくすると、ご利用のAWSクラウド製品がMackerelにホストとして登録され、メトリックが投稿されます。 監視ルールを作成し、アラートを通知することもできます。 詳しくは監視・通知を設定するをご覧ください。

Access Key IDとSecret Access Keyを設定する方法

以下の方法はセキュリティー保全の観点から推奨しておりません。

1. IAM Management Consoleにてユーザーを作成する

IAM Management Consoleにて新しいユーザーを作成します。 MackerelAWSIntegrationUser のようにMackerelのAWSインテグレーションで使用していることが分かりやすい名前を付けることを推奨します。

2. アクセスキーをMackerelに登録する

作成時の画面に表示されるAccess Key IDとSecret Access Keyを、Mackerelに登録します。 登録するオーガニゼーションを間違えないようにご注意ください。

3. ポリシーを付与する

作成したユーザーに、以下のポリシーを付与します。 FullAccess権限を付与しないようにご注意ください。

  • AmazonRedshiftReadOnlyAccess
  • AmazonEC2ReadOnlyAccess
  • AmazonElastiCacheReadOnlyAccess
  • AmazonRDSReadOnlyAccess
  • AWSLambdaReadOnlyAccess

4. ホストを確認する

しばらくすると、ご利用のAWSクラウド製品がMackerelにホストとして登録され、メトリックが投稿されます。 監視ルールを作成し、アラートを通知することもできます。 詳しくは監視・通知を設定するをご覧ください。

タグで絞り込む

ホストとして登録してメトリックを取得するAWSクラウド製品を、AWSで付与しているタグで絞り込むことができます。

1. タグを取得するための権限を付与する

AWSのタグで絞り込むには、各サービスのタグを取得するAPIに対する権限が必要になります。 ポリシーを確認し、以下のアクションを行えるかどうか確認してください。

  • ec2:DescribeTags
  • elasticloadbalancing:DescribeTags
  • rds:ListTagsForResource
  • elasticache:ListTagsForResource
  • redshift:DescribeTags
  • lambda:ListTags

Access Key IDとSecret Access Keyを用いた設定を行っている場合は、以下のアクションに対する権限も必要になります。IAMロールによる設定の場合は不要です。

  • 連携ユーザーに対する iam:GetUser

特に、AWS管理ポリシーである AmazonElastiCacheReadOnlyAccess では elasticache:ListTagsForResource アクションを行うことができませんので、ElastiCacheをタグで絞り込む場合はポリシーを付与する必要があります。

ポリシーの付与は、Inline Policiesにて行ってください。

2. タグで絞り込む設定を行う

Mackerelの設定画面でタグを指定します。連携ホスト数を確認し、保存してください。

タグをservice:foo, service:barのように指定すると、キーがserviceで値がfooまたはキーがserviceで値がbarであるタグが付与されているインスタンスが対象となります。 キーや値にコロン : やカンマ , などを含む場合は、クォート (" または ') で囲ってください。例えば、キーがservice:roleで値がfoo,barである場合は、"service:role": "foo,bar"のように指定します。

FAQ

アクセスキーの権限チェックと CreateInternetGateway に関して

ユーザーが登録したアクセスキーが不必要に強い権限を持っていないかのチェックのために、AWSインテグレーションは定期的に CreateInternetGateway API を dry-run にて実行しています。アクセスキーが必要以上の権限を持っていた場合には、メトリックの収集と投稿は行われませんのでご注意ください。チェックを登録後にも定期的におこなう理由は、アクセスキーに対してポリシーが追加され、権限が強くなってしまう可能性があるためです。

AWSインテグレーションにより連携したホストの退役について

上記の連携設定を行うことで、対象サービスとタグ条件に合致した AWS クラウド製品は自動的に Mackerel と連携されホストとして登録されます。一方で、AWS 側でインスタンスの削除などを行っただけでは、Mackerel 側のホストは削除(退役)されません。AWSインテグレーションにより連携したホストを Mackerel の監視対象から外すには、別途退役の作業を実施する必要があります。

mackerel.io

仮に退役作業をしない場合でも、ホスト情報が残り続けるだけで、メトリック投稿のないホストは課金対象にはなりません。

プラグインにより取得したカスタムメトリックの連携ホストへの集約に関して

mackerel-agent の plugin 設定には、custom_identifier を指定することができます。custom_identifier とは、ホストの識別子としてユーザー独自の identifier を付与するための仕組みです。これを利用して、別のマシンにインストールした mackerel-agent から投稿されたメトリックを、AWSインテグレーション連携ホストのメトリックとして集約することができます。custom_identifier は、カスタムメトリックを投稿するためのプラグイン設定に指定します。

例として、Amazon RDS と mackerel-plugin-mysql プラグインを利用している場合、mackerel-agent.conf のプラグイン設定に、以下のように custom_identifier の記述を追加することで、プラグインで取得したメトリックをRDSホストのカスタムメトリックとして集約することができます。

[plugin.metrics.mysql]
command = "mackerel-plugin-mysql -host=<RDSのエンドポイント> -username=user -password=pass"
custom_identifier = "<RDSのエンドポイント>"

Amazon RDS の場合はそのエンドポイントが、ELB の場合は DNS Name が、それぞれ custom_identifier 文字列となります。

conf ファイルへの追記後は、エージェントの再起動が必要です。