こんにちは、SCSK株式会社の谷です。
前回、新たに私たちの部署に新入社員として加わった嶋谷さんが、
Mackerelを使ってAWS環境のDocker情報を可視化する方法と結果についての記事を掲載しました。
ご覧になっていない方は、ぜひ目を通してみてください。
Mackerel で Docker を監視してみた – TechHarmony
今回は、MackerelにてAWSのサーバーレスサービスを監視し可視化しました。
監視対象のシステムについて
今回の検証のため、AWSが提供しているハンズオンから簡易的なWebアプリを構築しました。
名前を入力しボタンを選択すると、「Hello from Lambda」で始まり入力したテキストが続くメッセージが表示されるWebアプリです。
Webアプリの構成は以下の図になります。
構成しているサービスの中で今回は以下を使用して検証をしました。
- Amazon DynamoDB 完全マネージド型の NoSQL データベースサービス
- Amazon API Gateway APIの作成および管理を簡単に行えるフルマネージドサービス
- AWS Lambda サーバーレスコンピューティングサービス
上記環境の構築手順について、この記事では説明を省略させていただきます。
詳しく知りたい方は、以下に詳細な構築手順が載っていますので、こちらをご覧ください。
AWS で基本的なウェブアプリケーションを構築する
Mackerelでの監視設定手順
ここではMackerelで各サービスを監視するための設定手順について記載しています。
設定手順の詳細につきましては、Mackerel公式ヘルプをご参照ください。
AWSインテグレーション – Mackerel ヘルプ
設定手順について興味のない方は、このパートはスキップして「Mackerel上で監視データの確認」のパートに飛んでください。
インテグレーション用のIAMロールの作成
(1) Mackerelの管理画面で「オーガニゼーション名」>「AWSインテグレーション」をクリックする。
(2)「新しいAWSインテグレーションを登録」というボタンが表示されるため、それをクリックする。
(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を触ってみようと思いますので、また何か気づきがありましたら記事を掲載します。
最後までお付き合いいただき、ありがとうございました。