AWSインテグレーション

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

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

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

EC2ELB (CLB)ALBNLBRDSElastiCacheRedshiftLambdaSQSDynamoDBCloudFrontAPI GatewayKinesisS3ESECSSESStep FunctionsEFSKinesis Data Firehose

連携方法

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

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

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

IAMロールを設定する方法

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

IAM Management Consoleにて新しいロールを作成します。 ロールのタイプを選択する画面では「別のAWSアカウント」 (Another AWS account) を選択します。

MackerelのAWSインテグレーション設定のページから作成ボタンを押して、External IDを取得してください。許可するAccount IDには 217452466226 を入力してください。また、Require external ID のオプションを選択した上で、External IDにはMackerelの設定作成ページで取得したExternal IDを指定して下さい。このアカウントはMackerelのシステムがユーザーのロールにアクセスする際に利用するアカウントです。この設定により、作成されたロールにはMackerelのアカウントしかアクセスできない状態になります。Require MFA はチェックせずに次の設定ページに移動してください。

ロールには以下のポリシーを付与します。 FullAccess権限を付与しないようにご注意ください。また、ひとつのIAMロールに対してアタッチ可能なポリシーの上限は10個に制限されており、これはAWSの仕様です。必要に応じて、AWSに対して上限緩和申請をおこなってください。

  • AmazonRedshiftReadOnlyAccess
  • AmazonEC2ReadOnlyAccess
  • AmazonElastiCacheReadOnlyAccess
  • AmazonRDSReadOnlyAccess
  • AWSLambdaReadOnlyAccess
  • AmazonSQSReadOnlyAccess
  • AmazonDynamoDBReadOnlyAccess
  • CloudFrontReadOnlyAccess
  • apigateway:GET
    • リソースポリシーは arn:aws:apigateway:ap-northeast-1::/* などのように指定します。リソースポリシーで対象を制限することはできません。
  • AmazonKinesisReadOnlyAccess
  • AmazonS3ReadOnlyAccess
  • AmazonESReadOnlyAccess
  • ecs:Describe* / ecs:List*
  • AmazonSESReadOnlyAccess / ses:Describe*
  • AWSStepFunctionsReadOnlyAccess
  • AmazonElasticFileSystemReadOnlyAccess
  • AmazonKinesisFirehoseReadOnlyAccess
  • CloudWatchReadOnlyAccess(CloudFrontのみ、API Gatewayのみ、Kinesisのみ、S3のみ、ESのみ、ECSのみ、SESのみ、Step Functionsのみ、EFSのみ、またはFirehoseのみを設定する場合)

また、AWSインテグレーションでは後述するようにタグによって絞り込みを行うことが出来ますが、ElastiCacheやSQSでタグによる絞り込みを行う場合は追加のポリシーを付与する必要があります。 詳しくはタグで絞り込む の項目を参照してください。

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

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

ロールARNを、先程External IDを取得したMackerelの画面で登録します。

3. ホストを確認する

しばらくすると、ご利用の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権限を付与しないようにご注意ください。また、ひとつのIAMユーザーに対してアタッチ可能なポリシーの上限は10個に制限されており、これはAWSの仕様です。必要に応じて、AWSに対して上限緩和申請をおこなってください。

  • AmazonRedshiftReadOnlyAccess
  • AmazonEC2ReadOnlyAccess
  • AmazonElastiCacheReadOnlyAccess
  • AmazonRDSReadOnlyAccess
  • AWSLambdaReadOnlyAccess
  • AmazonSQSReadOnlyAccess
  • AmazonDynamoDBReadOnlyAccess
  • CloudFrontReadOnlyAccess
  • apigateway:GET
    • リソースポリシーは arn:aws:apigateway:ap-northeast-1::/* などのように指定します。リソースポリシーで対象を制限することはできません。
  • AmazonKinesisReadOnlyAccess
  • AmazonS3ReadOnlyAccess
  • AmazonESReadOnlyAccess
  • ecs:Describe* / ecs:List*
  • AmazonSESReadOnlyAccess / ses:Describe*
  • AWSStepFunctionsReadOnlyAccess
  • AmazonElasticFileSystemReadOnlyAccess
  • AmazonKinesisFirehoseReadOnlyAccess
  • CloudWatchReadOnlyAccess(CloudFrontのみ、API Gatewayのみ、Kinesisのみ、S3のみ、ESのみ、ECSのみ、SESのみ、Step Functionsのみ、EFSのみ、またはFirehoseのみを設定する場合)

また、AWSインテグレーションでは後述するようにタグによって絞り込みを行うことが出来ますが、ElastiCacheやSQSでタグによる絞り込みを行う場合は追加のポリシーを付与する必要があります。 詳しくはタグで絞り込む の項目を参照してください。

4. ホストを確認する

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

タグで絞り込む

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

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

AWSのタグで絞り込むには、AWSインテグレーションの設定のために付与したポリシー以外に、以下のアクションに対する権限が追加で必要になります。

  • elasticache:ListTagsForResource
  • sqs:ListQueueTags
  • states:ListTagsForResource

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

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

これらのポリシーの付与は、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 の場合はそのエンドポイントが、ELB の場合は DNS Name が、それぞれ custom_identifier 文字列となります。

利用例

以下にふたつの利用例を紹介します。いずれの場合も、mackerel-agent の設定ファイルへの追記後はエージェントの再起動が必要です。

ひとつめの例は、Amazon RDS に対する mackerel-plugin-mysql プラグインを用いた MySQL 監視です。mackerel-agent.conf の設定に以下のように custom_identifier を含むプラグイン設定を追加することで、プラグインで取得したメトリックをRDSホストのカスタムメトリックとして集約できます。

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

ふたつめの例は、 Amazon Elasticsearch Service と check-elasticsearch プラグインを用いた Elasticsearch 監視です。mackerel-agent.conf の設定に以下のように custom_identifier を含むプラグイン設定を追加することで、 Elasticsearch Service クラスターのヘルスチェックを Elasticsearch Service ホストのチェック監視として集約できます。

[plugin.checks.elasticsearch]
command = ["check-elasticsearch", "-s", "https", "-H", "Elasticsearch Service のエンドポイント", "-p", "443"]
custom_identifier = "Elasticsearch Service の ARN"