AWS DevOps Monitoring Dashboard を使ってみました

2021.05.19

いわさです。

2021年3月に AWS DevOps Monitoring Dashboardが一般提供されました。
DevOpsが好きなので試してみたいと思っていたのですがなかなか触れず…ようやく試すことが出来ました。

AWS DevOps Monitoring Dashboard とは

新規AWSサービスの提供が開始されたわけではありません。
これは、AWSソリューションライブラリより提供されるソリューションテンプレートです。

実体はCloudFormationテンプレートで、以下の構成をテンプレートから作成することが可能です。

本テンプレートでは、CI/CDパイプライン自体は作成してくれません。
また、QuickSight部分はネストされた別テンプレートから作成してくれますが、Synthetics Canaryについては別で追加が必要です。(テンプレート用意されています)

これらを使うことでDevOpsチームのサイクルに必要なデータを可視化出来ますよ、というソリューションになっています。

試してみた

先程のソリューションページからテンプレートの起動を行ってください。
ダッシュボードを使う場合は、事前にQuickSightのサブスクライブを済ませて、ADMINユーザーのARNを取得しておく必要があります。

前述のとおりCI/CDパイプライン自体はこのテンプレートでは作成してくれません。 気軽に試したい方はCodeStarで新規アプリケーションのデプロイをしてみてください。

CI/CDパイプラインの作成はテンプレート実施前でも実施後でも構いませんが、 アクティビティデータの集計はテンプレートでリソースが作成された後から開始されます。

Code Change Volume

誰がどの程度プロダクトコードにコミットしているか、各リポジトリのアクティブ度合いなどが可視化されます。
こちらの情報はCodeCommitのイベントが可視化されています。
EventBrdgeでデータ収集しているため、EventBridgeへ連携出来れば例えばGitHubのリポジトリデータも収集出来ます。
GitHub Actionsやサードパーティのインテグレーションツールの導入も検討してみてください。

Deployment

こちらはCodeDeployのデータを収集します。
CodePipelineで外部リポジトリが指定されている場合でEventBridgeへのリポジトリアクティビティが連携されていない場合でもデプロイ情報については収集可能です。
逆に、CodeDeployを使用していない場合はデプロイメントデータは活用出来ません。

Change Failure Rate

失敗したデプロイデータが集計されます。
簡単なところだと、appspec.yamlに問題があり、デプロイセットアップに失敗する場合などが考えられます。 他にはデプロイ先のCodeDeployエージェントが失敗していた場合、サービスで異常が発生していた場合などもこのダッシュボードで集計されるでしょう。

Mean Time to Recover

こちらは CloudWatch Synthetics CanaryでWebサービスを監視し、アラートの検知と復旧のイベントデータをトラッキング・可視化を行います。
これによって CI/CDサイクルがどの程度サービスを停止させたか、サイクルがどの程度改善されたかが可視化されます。

構築過程で発生した問題

CloudFormationテンプレートの実行のみだと動作しませんでした。
いくつかセットアップや手動設定が必要な箇所がありましたので記しておきます。

QuickSightでエラー

データベースでSQL例外が生成されました。このエラーは、クエリのタイムアウト、リソース制約、クエリ前またはクエリ中の予期しないDDL操作などのデータベースエラーが原因で発生します。データベース設定とクエリを確認して、もう一度試してください。詳細はこちら

[Simba]AthenaJDBC An error has been thrown from the AWS Athena client. com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: BTSYR003ZDZVGFS0; S3 Extended Request ID: ojChFTAVCPawKOipJtaAstwdkoZkx1hHavVcNt9hFXAlDNnbQ77SwfG4eUeSQvYBj/Ft57S8Tyo=; Proxy: null), S3 Extended Request ID: ojChFTAVCPawKOipJtaAstwdkoZkx1hHavVcNt9hFXAlDNnbQ77SwfG4eUeSQvYBj/Ft57S8Tyo= (Path: s3://aws-devops-metrics-cb7acac0-0524-44d1-9d87-91668271bc01/DevopsEvents/created_at=2021-05-18) [Execution ID: 0ec006d3-d49e-4a2c-b186-68b06c2e1f07]

このエラーは、QuickSightサービスからテンプレートで作成されたS3バケットへのアクセス権限が設定されていない場合に発生します。
QuickSight管理画面から権限追加メニューを開き、S3バケットの読み込みと書き込みを許可してください。

MTTRタブのデータが表示されない

Cloudwatch で Synthetics Canary を作成してください。

そして、HTTP500エラーが返却されるような実装をするなど、Canaryが失敗するようにしてください。 失敗するだけだとダッシュボードには表示されません。

ALARM → OK になったデータを抽出して可視化するようになっているので復旧まで行って初めてダッシュボードに表示されます。

まとめ

このソリューションでまずはどの程度の頻度でプロダクトコードが更新されてるか、デプロイされているか、デプロイ後の失敗状況とその復旧スピードが確認出来ます。
DevOpsダッシュボードのためのデフォルトテンプレートと考えると良いと思います。
ここから例えば、機能のリードタイム、アクティブユーザー数など、チームに必要な指標をダッシュボードに追加するのが良いと思いました。

テンプレート実行後にすぐ使い始めることが出来るので、まずは何らかの可視化から、というチームであれば是非導入してみてください。
CI/CDパイプラインからは疎になっているので、すぐに止めることも可能です。