Y_Yamashitaのブログ

勉強したことのアウトプット・メモ中心。たまに日記とか。

「AWSの基礎を学ぼう 特別編 最新サービスをみんなで触ってみる DevOps Guru」参加メモ

はじめに

6/19(土)に実施された「AWSの基礎を学ぼう 特別編 最新サービスをみんなで触ってみる DevOps Guru」に参加した。

awsbasics.connpass.com

学習したことを忘れないようにメモを残す。

DevOps Guruとは?

機械学習によって通常の運用パターンから逸脱した動作を検出し、考えられる原因と解決案の提示などをしてくれるサービス。

特徴

将来の予測もしてくれる

例えば、ストレージへのデータ書き込みが日に日に増えている状態を検知した場合、「このままのペースで増え続ければ1週間後にはリソースが枯渇する」といった予測をして通知を上げてくれる。

考えられる原因を提示してくれる

異常に関連がありそうなイベントの表示が可能。例えば、監視対象のCloudFormationがいつ作られたのか等。CloudTrailのログへのリンクの表示等が可能。

解決案を提案してくれる(レコメンデーション)

異常の内容を分析した結果、解決に繋がりそうなAWSドキュメントのリンクを表示したり、設定のカスタマイズの提案をしてくれる。

レコメンデーションはアップデートされる

レコメンデーションはAWSのドキュメント等を参考にして提示されている。そのため、AWSドキュメントが更新されれば、それに合わせてレコメンデーションもアップデートされる。(ただし、リアルタイムに反映されているわけではない)

注意点

複数リージョンにまたがった監視はできない

現時点では、DevOps Guruを稼働させているリージョンのサービスのみが監視対象となる。

特定のAWSリソースのみ監視対象とすることはできない

現時点では、「現在のAWS アカウントのすべてのAWSリソース」か、もしくは「指定されたCloudFormationスタックのすべてのAWSリソース」が対象となる。

f:id:YuY_83:20210620214322p:plain
DevOps Guru監視対象

すべてのAWSリソースが監視対象になっているわけではない

上記で「すべてのAWSリソース」と記載があるが、実際にはGuruに対応しているAWSリソースはまだ一部のみなので、「Guruに対応しているすべてのAWSリソースが監視対象」というのが正しい。対象は以下を参照。

aws.amazon.com

監視対象がアップデートされると料金が上がるかも

上述のように、監視するリソースを選べず、現時点で対応しているすべてのリソースが対象となるので、サービスがアップデートされて監視対象が増えると、気づかないうちに請求額が上がっている、なんて事態になるかも。サービスのアップデート情報は常にキャッチアップが必要。

監視を開始する前に2時間の「学習期間」が必要

「正常な状態」(ベースラインというらしい)を学習するために2時間必要なので、すぐに監視を開始できるわけではない。

ちなみに、ベースラインを再度学習しなおしたい場合、設定→DevOps Guru 分析カバレッジで「このリージョンのリソースを分析しない」を選択し、一度分析をやめてから、再度分析するリソースを選びなおす必要がある。(選びなおした後に、再度2時間の学習期間が必要)

f:id:YuY_83:20210620232551p:plain
ベースラインを再学習するには、一度分析を解除する。

学習期間に起きていたことを「正常状態」として学習する

Guruはエラーを検知するサービスではなく、あくまで「学習した正常状態との乖離を通知する」サービスなので、例えば、学習期間に特定のエラーが頻発していた場合、それを「正常」として学習してしまい、その後に同様のエラーが出てもスルーする可能性がある。

検知の厳しさのチューニングはできない

「ベースラインからどの程度かけ離れたら異常と判断するか」の厳しさについては、現時点ではチューニングすることができない。

実際に異常通知を出してみる(ハンズオン概要)

今回のハンズオンでは、読み込みキャパシティが「1」のDynamoDBを作成し、そこにスクリプトで連続リクエストを出して500系エラーを起こすことで、異常状態を発生させた。(スクリプトの内容や手順は、ハンズオン当日のみパスが公開されていた事を考慮して、ここでは割愛する)

まずはスクリプト実行前のGuruの状態。何のエラーも出ていない。

f:id:YuY_83:20210620232945p:plain
まだ何も起きていない平和な状態

ここから、Cloud9上でスクリプトを実行し、リクエストを大量投下する。複数のターミナルでスクリプトを同時実行する。ちなみに、CloudShellだとこのようなスクリプトの複数同時実行は出来ない模様。(シングルスレッドのため)

f:id:YuY_83:20210620234004p:plain
Cloud9上で、スクリプトを複数ターミナルで同時実行

5~10分くらい待つと、Guruに異常通知が表示された。

f:id:YuY_83:20210620234756p:plain
異常発生
なお、「事後的インサイト」とは既に発生している異常で、「予測的インサイト」とは今後発生し得る異常のこと。

「継続中の事後的インサイト」の数字をクリックし、事後的インサイトの中身を見てみる。
f:id:YuY_83:20210621000610p:plain
事後的インサイト
影響を受けるリソースや、重要度、異常が継続中かどうか等が表示されている。名前をクリックすると更に詳細が表示される。
f:id:YuY_83:20210621000810p:plain
集約されたメトリクス
集約されたメトリクスでは、異常と関連があると判断されたメトリクスが、発生時刻とともに表示されている。

また、「集約されたメトリクス」の隣にある「グラフ化された異常」タブでは、異常と関連のありそうな値(レイテンシなど)がグラフで表示されている。
f:id:YuY_83:20210621001010p:plain
グラフ化された異常
さらに、レコメンデーションでは解決に役立ちそうなAWSドキュメントのリンクや、解決につながりそうな設定のカスタマイズが提案されている。
f:id:YuY_83:20210621001516p:plain
レコメンデーション
このように、異常に対して複合的な観点で分析を行い、最適と思われる解決策を提示してくれる。

おわりに

単に通知が出るだけでなく、色々な分析結果と解決案の提示があるのが面白かった。実際には、複雑な本番環境の運用で、AIの判定を全面的に信頼して対応できるようになるにはもう少し時間がかかるのかもしれないが、今後の展開に期待したいサービスだった。