Mackerel の AWS インテグレーション機能で DynamoDB と CloudFront を監視対象にした手順

Mackerel の AWS インテグレーション機能が DynamoDB と CloudFront に対応しました。既に AWS インテグレーション機能で監視している環境で同機能を有効にしたので、そのときの手順を説明します。
2018.10.30

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

はじめに

Mackerel をお使いのかたはご存じと思いますが、ここ 1ヶ月ほどの間に、AWS インテグレーションに二つも機能追加が行われました。

どちらもアイレット株式会社さまとの共同開発とのこと。これまでこれらのサービス監視を plugin で行っていたかたにとっては待望の機能追加ではないでしょうか。

監視を始めるために必要な情報はこちらのドキュメントに全てそろっています。

Mackerel を使っている環境で対応させる作業を行ったので、ここでは既に AWS インテグレーション機能を使って監視している環境で、どのような手順が追加で必要になるかをまとめてみました。

  1. 監視対象の AWS 側の設定
    • IAM ロール(ユーザ)の権限修正
    • 監視対象にタグを付与(オプション)
  2. Mackerel 側の設定
    • デフォルトロール用のサービス・ロールを作成(オプション)
    • AWS インテグレーションの設定
    • 管理名やメモの設定(オプション)
    • 監視項目の設定(オプション)

1. 監視対象の AWS 側の設定

IAM ロール(ユーザ)の権限修正

まず AWS インテグレーション機能が利用する IAM ロールに、必要な権限を付与する必要があります。こちらを対応します。もし IAM ユーザ(Access Key IDとSecret Access Key)を使われているなら適宜読み替えてください。

使用している IAM ロールの名前は、AWS インテグレーションの設定のところで確認できます(いちど「編集」をクリックしてください)。ヘルプ のままであれば MackerelAWSIntegrationRole となります。

AWS のマネジメントコンソールで、該当 IAM ロールに権限(管理ポリシー)を追加します。以下の表を参考に、必要な権限を付与してください。

監視したいサービス 付与する管理ポリシー
DynamoDB AmazonDynamoDBReadOnlyAccess
CloudFront CloudFrontReadOnlyAccess

該当のヘルプ では CloudWatchReadOnlyAccess についても言及されていますが、これはコメントのとおり、AWS インテグレーションで監視するサービスが CloudFront だけ の場合に必要になるものです。今回は「既に使っている」前提なので不要なのですが、もし該当する場合にはこちらも付与してください。

監視対象にタグを付与(オプション)

IAM ロールが設定できたら、監視したい DynamoDB テーブルや CloudFront ディストリビューションに監視用のタグを付けます。もし現在 AWS インテグレーションの監視をタグで制限していないのであれば、この手順は不要です。

タグで制限している場合、AWS インテグレーションの設定のところに記述があると思うのでそれを確認し、監視したいサービスにタグを付与します。

2. Mackerel 側の設定

続いて Mackerel 側の設定です。

デフォルトロール用のサービス・ロールを作成(オプション)

AWS インテグレーションには、新たに検出された AWS サービス(今回の場合は DynamoDB テーブルや CloudFront ディストリビューション)を自動的に特定の「サービス」と「ロール」に紐付ける機能があります(「デフォルトロール」設定)。Mackerel では監視閾値の設定や通知設定など、サービス・ロール単位で制御するものが多いので、この仕様はとてもありがたいです。

もちろん既存のサービス・ロールに紐付けたり、あるいは自動的には「紐付けない」という選択もありえます。これらは運用次第といえるのですが、もし新しくサービス・ロールを作成して割り当てようと思われているのでしたら、あらかじめ作成しておきましょう。

ここでは説明の都合上、既存の「AWS」サービスの下に「DynamoDB」と「CloudFront」というロールを作成します。

とはいえ AWS インテグレーションの設定はあとからいくらでも変更可能なので、とりあえず最初は紐付けずに運用し、必要に応じて作成・設定変更というやり方でもよいと思います。

AWS インテグレーションの設定

AWS インテグレーションの設定にて、該当サービスの監視を有効(チェックボックスに ✓ をいれる)にします。デフォルトロールの設定を行う場合はいっしょに設定してしまいましょう。

監視対象として検出されたサービスの数が表示されます。反映されるまでに少し時間がかかる場合もありますが、意図したとおりでなかったとしたら、IAM ロールの権限やタグ設定などが誤っている可能性があります。もう一度設定内容をチェックしてみてください。

そのまま「更新」すると作業完了です。グラフの自動更新を ON にしてしばらく(コーヒーでも飲みながら)待つと、ホストとして登録されてメトリックが収集され、グラフが表示されることでしょう。

管理名やメモの設定(オプション)

DynamoDB はともかく、CloudFront はホスト名としてディストリビューション ID ( EDFDVBD6EXAMPLE みたいなものです)が使われます。これでは直感的にわかるようになるまで人間側の習熟が必要になるので、分かりやすい管理名を付けてあげてください。

ホストの管理名は、ホスト名の右の歯車から設定することができます。運用上の注意をメモに書いておくのも良いですね!

監視項目の設定(オプション)

そのままでもグラフが生成されていくので、状況が確認したいだけであればそのままでも良いかと思います。

ですがそのうちに、例えば、CloudFront であれば 5xxErrorRate など、閾値を設定して異常時に警告をあげる設定はしたくなると思います。その場合には適宜監視項目を作成しサービス・ロールに紐付けてください。

* * *

以上で、DynamoDB テーブル / CloudFront ディストリビューションが監視できるようになりました!

ご注意

以下念のためなのですが、DynamoDB テーブルや CloudFront ディストリビューションも他のサービスと同様に「ホスト」としてカウントされます。これらは例え AWS 側で削除されたりしたとしても、Mackerel 上には残り続けます(EC2 には 自動退役 のためのチェックボックスがあります)。

これは意図せずグラフが消えたりしないという意味でありがたいのですが、うっかり消し忘れなどもありそうです。

AWS インテグレーションを使われているということは有料プランでお使いのことが多いと思いますので、意図しない課金が発生しないよう、努々お間違えないようご注意ください。