Mackerel で AWS のサーバーレスサービスを監視してみた

こんにちは、SCSK株式会社の谷です。

前回、新たに私たちの部署に新入社員として加わった嶋谷さんが、
Mackerelを使ってAWS環境のDocker情報を可視化する方法と結果についての記事を掲載しました。

ご覧になっていない方は、ぜひ目を通してみてください。
Mackerel で Docker を監視してみた – TechHarmony

今回は、MackerelにてAWSのサーバーレスサービスを監視し可視化しました。

監視対象のシステムについて

今回の検証のため、AWSが提供しているハンズオンから簡易的なWebアプリを構築しました。
名前を入力しボタンを選択すると、「Hello from Lambda」で始まり入力したテキストが続くメッセージが表示されるWebアプリです。

Webアプリの構成は以下の図になります。

 

構成しているサービスの中で今回は以下を使用して検証をしました。

  1. Amazon DynamoDB   完全マネージド型の NoSQL データベースサービス
  2. Amazon API Gateway  APIの作成および管理を簡単に行えるフルマネージドサービス
  3. AWS Lambda       サーバーレスコンピューティングサービス

上記環境の構築手順について、この記事では説明を省略させていただきます。
詳しく知りたい方は、以下に詳細な構築手順が載っていますので、こちらをご覧ください。
AWS で基本的なウェブアプリケーションを構築する

Mackerelでの監視設定手順

ここではMackerelで各サービスを監視するための設定手順について記載しています。
設定手順の詳細につきましては、Mackerel公式ヘルプをご参照ください。
AWSインテグレーション – Mackerel ヘルプ

設定手順について興味のない方は、このパートはスキップして「Mackerel上で監視データの確認」のパートに飛んでください。

インテグレーション用のIAMロールの作成

(1) Mackerelの管理画面で「オーガニゼーション名」>「AWSインテグレーション」をクリックする。
(2)「新しいAWSインテグレーションを登録」というボタンが表示されるため、それをクリックする。

(3) 基本設定>AWSアカウント 外部IDをコピーする。

(4) AWSのコンソールにログインし、左上の検索バーで「IAM」と入力し、エンターを押す。
(5) 左側のタブからロールを選択し、「ロールを作成」をクリックする。

(6) 以下に沿って入力し、すべて入力後、「次へ」をクリックする。
信頼されたエンティティタイプ : AWSアカウント
AWSアカウント         : 別のAWSアカウント
アカウントID                        : 217452466226(共通)
オプション          : 外部IDを要求する

(7) 今回はLambda、API Gateway、DynamoDBを監視したいため、それらに関するReadOnlyロールを選択し、「次へ」をクリックする。
(8) ロール名と説明を適宜入力し、「ロールを作成」をクリックする。

(9) 作成したロールの詳細画面で表示される、ARNをコピーする。

AWSインテグレーションの作成

(1) Mackerelの管理画面に戻り、先ほど開いた「新しいAWSインテグレーションを登録」画面を開く。
  そこで、名前の入力とリージョンの選択を行い、ロールARNの欄に先ほどコピーしたARNを貼り付ける。

(2) メトリックを収集するサービスで、Lambda、API Gateway、DynamoDBを選択する。
  他の取得可能なサービスにつきましては以下の公式ヘルプの「対応しているクラウド製品」を参照ください。
     AWSインテグレーション – Mackerel ヘルプ

(3) 「タグを指定して登録するホストを絞り込む」にて連携したいリソースのタグ、除外したいタグを入力する。

(4)「作成」をクリックする。

これで、インテグレーションが作成できました!

連携確認

以上で設定は完了です。
ここからは、監視設定を入れたサービスの状態を見てみましょう。
ここまでの手順が完了すると、Mackerelの管理画面の「ホスト」のところですぐに確認することができます。このように、Lambda、API Gateway、DynamoDBの3つのデータが取れていることがわかります。

Mackerel上で監視データの確認

設定作業はいかがでしたか?

思っていたより簡単に監視ができると感じた方が多いのではないでしょうか。

では、ここからはAWSから連携された監視データがどのように見えているかを、サービスごとに一部抜粋してお見せしたいと思います。

API Gateway

MackerelではリソースごとにAPI Gatewayを監視することができます。
API Gatewayでは、基本的に以下のメトリックを取得できます。
詳細はMackerel公式ヘルプをご参照ください。
AWSインテグレーション – API Gateway – Mackerel ヘルプ

グラフ名 メトリック 説明
Requests Count 指定期間内のAPIリクエストの合計数
Errors 4XXError クライアント側のエラー数
5XXError サーバー側のエラー数
Cache CacheHitCount APIキャッシュから提供されたリクエストの数
CacheMissCount バックエンドから提供されたリクエストの数
Latency Latency クライアントからリクエストを受け取ってからレスポンスを返すまでの時間
IntegrationLatency バックエンドにリクエストを中継してからレスポンスを受け取るまでの時間

今回は、この中のRequestsのグラフをお見せします。
こちらのグラフは、APIのリクエスト数を可視化したグラフになります。

このデータを見れば、どのタイミングでリクエスト数が増えているかを視覚的に確認することができます。

DynamoDB

MackerelではDBリソースごとにをDynamoDBを監視することができます。
DynamoDBでは、基本的に以下のメトリックを取得できます。
詳細はMackerel公式ヘルプをご参照ください。
AWSインテグレーション – DynamoDB – Mackerel ヘルプ

グラフ名 メトリック 説明
ReadCapacityUnits ProvisionedReadCapacityUnits プロビジョンドされた読み取りキャパシティユニットの数
ConsumedReadCapacityUnits 読み取り操作で消費されたキャパシティユニットの数
WriteCapacityUnits ProvisionedWriteCapacityUnits プロビジョンドされた書き込みキャパシティユニットの数。
ConsumedWriteCapacityUnits 書き込み操作で消費されたキャパシティユニットの数
Requests ConditionalCheckFailedRequests 条件付き書き込みや更新操作が失敗したリクエストの数
SuccessfulRequestLatency 成功したリクエストのレイテンシー
ThrottledRequests スロットルされたリクエストの総数
UserErrors ユーザーによって引き起こされたエラーの数
SystemErrors DynamoDB内部で発生したシステムエラーの数
ThrottleEvents ReadThrottleEvents 読み取り操作がスロットルされた回数
WriteThrottleEvents 書き込み操作がスロットルされた回数
TimeToLiveDeletedItemCount TimeToLiveDeletedItemCount TTL機能によって削除されたアイテムの数
SuccessfulRequestLatency SuccessfulRequestLatency 成功したリクエストのレイテンシー
ReturnedItemCount ReturnedItemCount クエリやスキャン操作で返されたアイテムの数
RequestCount ReturnedItemCount クエリやスキャン操作で返されたアイテムの数
TransactionConflict TransactionConflict トランザクションの競合が発生した回数

今回は、この中のWriteCapacityUnitsグラフをお見せします。
こちらのグラフは、DynamoDBへの書き込みで消費されたキャパシティユニット数を示したグラフになっています。

このデータを見ることで、キャパシティを超えるような書き込みが行われていないかを視覚的に確認することができます。

Lambda

Mackerelでは関数単位ごとにLambdaを監視することができます。
Lambdaでは、基本的に以下のメトリックを取得できます。
詳細はMackerel公式ヘルプをご参照ください。
AWSインテグレーション – Lambda – Mackerel ヘルプ

グラフ名 メトリック 説明
Count Invocations 関数が呼び出された回数
Errors 関数の実行中に発生したエラーの数
DeadLetterErrors デッドレターキューへの送信失敗回数
Throttles スロットルされた呼び出しの数
Duration [ms] Duration 関数の実行時間
Iterator Age [ms] IteratorAge ストリームイベントの処理遅延時間

 

今回はエラーが分かりやすいようにCountグラフをお見せします。
こちらのグラフは、Lambdaの実行回数(invocations)とエラー回数(errors)を示したグラフになっています。
エラーをグラフ上に表示させるため、14:15頃からLambdaからDynamoDBへの書き込み権限ロールを一時的に削除しました

このデータを見れば、いつどのタイミングでエラーが発生し始めたのかを視覚的に確認することができます。

今回ご紹介したグラフはそれぞれ1つずつでしたが、かんたんなカスタムをすれば様々なグラフを作成することも可能です。
興味がある方はぜひ調べてみてください。

終わりに

記事の内容は以上になります。いかがでしたでしょうか。
今回初めてMackerelにて監視設定をいれたのですが、UIも直感的で操作しやすくスムーズに設定を入れることができました!
また、公式ドキュメントも豊富でしたので、疑問点や不明点を解決しやすいところも非常にやりやすかったです。

また、Amazon CloudWatchだと少し手間だと感じていましたが、設定したいメトリクスを簡単に複数まとめて設定できるところがMackerelの優れている点だと今回設定してみて感じました。

もう少しMackerelを触ってみようと思いますので、また何か気づきがありましたら記事を掲載します。
最後までお付き合いいただき、ありがとうございました。

タイトルとURLをコピーしました