Amazon DevOps Guru for RDS をさわってみました
はじめに
少しだけ自己紹介させてください。
HappyElements 株式会社 カカリアスタジオ(以下弊社)のインフラエンジニアのT.J.です。
弊社ではAWSを利用しており、各タイトルや公式サイトのほとんどがAWS上で動いていますので、AWS上での環境構築・運用が主な仕事です。
前職ではデータベースエンジニア(主にMySQL)でしたので、パフォーマンスチューニングやAmazon RDS for MySQL の構築・運用は経験としてありましたが、その他のAWSサービスについてはほとんど経験がありませんでした。
その上、ゲームを全くといってしない私がゲーム業界に転職してインフラエンジニアとしてやっていけるのかと思い、面接時に質問してみました。
私: ゲームを全くしないのですが大丈夫でしょうか...?
社長: インフラなんで大丈夫なんじゃない?
私: ...。(「なんと軽い...いや適当...でも...なんか楽しそうかも?」と思ったのを覚えています。)
入社した後は何とかなるもので、周りの方に助けてもらいながら立派に(?)成長したなーと自分では思ってます。
以上、自己紹介でした。
本記事について
前職でデータベースエンジニアだったということではないのですが、Amazon DevOps Guru for RDS をさわってみましたので、その内容を書きたいと思います。
Amazon DevOps Guru for RDS とは
概要
Amazon DevOps Guru for RDSは、Amazon DevOps Guruをデータベースサービスに適応させたもので、機械学習 (ML) を使用して
- Amazon RDS 関連の問題を検出
- 検出した問題を診断して解決策をレコメンド
してくれるサービスです。
仕組み
Performance Insights によって収集されたテレメトリデータを分析します。
DB 負荷は、平均アクティブセッション (AAS) の単位で測定され vCPUと比較し
- アクティブなセッション数の急激な増加
- 待機イベントや上位のSQLからボトルネックの要因
- CPU と I/O の競合
- メモリの問題
等を検出し分析します。
新機能 – Amazon DevOps Guru for RDS が ML を使用して Amazon Aurora 関連の問題を検出、診断、解決
制限事項
サポート対象
2022-12-03時点では下記のみサポートしています。[1]
- Amazon Aurora MySQL 互換エディション
- Amazon Aurora PostgreSQL 互換エディション
Performance insights
- Performance insightsを利用して分析するため有効にする必要があります
- Performance insights を有効化できるのは r5 / r6 / t4系のインスタンスのみです。( t3系のインスタンスクラスでは有効化できません。)
料金
リソースあたり 0.0042 USD/1時間
日本円へ換算するとリソースあたり約¥440 / 月 (¥140/$で計算)
参考: Amazon DevOps Guru の料金
検証
準備
-
Performance insightsの有効化
-
分析対象のリソースへのタグ付
- タグ名(キー)は Devops-guru- で始まる必要があります
- タグ名(キー)は大文字と小文字は区別されません(DevOps Guruの場合)
タグを使用して DevOps Guru アプリケーションを定義する
-
分析するリソースの選定
-
異常検知時の通知先の設定(SNS)
負荷シナリオ
負荷エミュレーションクライアント mysqlslapを利用します。
mysqlslap \
--user=xxxxxx \
--password=xxxxxxxxxxxxxxx \
--host=xxxxxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com \
--port=3306 \
--engine=innodb \
--auto-generate-sql \
--auto-generate-sql-load-type=mixed \
--auto-generate-sql-add-autoincrement \
--auto-generate-sql-unique-write-number=20000 \
--auto-generate-sql-unique-query-number=20000 \
--auto-generate-sql-write-number=10000 \
--number-char-cols=10 \
--number-int-cols=2 \
--number-of-queries=300000 \
--concurrency=30 \
--iterations=20;
結果
異常検知
異常を検知するとインサイト一覧に追加されます。
分析とレコメンデーション(推奨事項)
今回の場合、通常よりも12倍の負荷として検知されています。
トップSQL(Performance Insights)
大量のINSERT文がボトルネックになっていることが確認できます。
通知
{
"AccountId": "123456789012",
"Region": "ap-northeast-1",
"MessageType": "NEW_INSIGHT",
"InsightId": "AK3SSc0xrhuQq-JifgOp4DEAAAAAAAAAAjvheiEwkJI04Cf3mwTmVUzkqtTL5Tdb",
"InsightUrl": "https://ap-northeast-1.console.aws.amazon.com/devops-guru/#/insight/reactive/AK3SSc0xrhuQq-JifgOp4DEAAAAAAAAAAjvheiEwkJI04Cf3mwTmVUzkqtTL5Tdb",
"InsightType": "REACTIVE",
"InsightDescription": "RDS DB Load Anomalous",
"InsightSeverity": "medium",
"StartTime": 1654482900000,
"Anomalies": [
{
"Id": "ASxlMTAwMpZTjnsdfJvyXTvgpQ7BiAc1pEXrfFFdKeoCFGlrZTZdMDAwMDAwMDAw",
"StartTime": 1654482900000,
"Type": "CAUSAL",
"Description": "Unusually high DB load 12x above typical. Likely performance impact.",
"AnomalyResources": [
{
"Type": "AWS::RDS::DBInstance",
"Name": "db-instance-name"
}
],
...(略)
"ResourceCollection": {
"Tags": [
{
"AppBoundaryKey": "Devops-Guru-RDS",
"TagValues": [
"enable"
]
}
]
},
"awsInsightSource": "aws.devopsguru"
}
異常検知までの時間
今回の検証では、負荷シナリオ実行開始〜異常検知までの時間は約10分
負荷シナリオ実行開始日時 | 異常検知日時 |
---|---|
12:01:00 JST | 12:10:00 JST |
異常検知されないケース
あまり時間を空けずに同様の負荷をかけた場合は検知されないといったケースがありました。
AWSサポートへ問い合わせしましたが、以下の回答でしたので異常検知する場合としない場合を把握するのは厳しそうです。
AWSサポートからの回答
DevOps Guru は機械学習を用いて異常検出を行うという特性上、具体的な検出条件をご案内することは困難なものとなっております。
通知設定
- Chatbot を使用したSlack通知には未対応
- SNS Topic → Lambda を経由してSlack通知は可能
おわりに
HEKKではDatadogでCPU使用率やコネクション数を監視しています。
- 原因特定はPerformance Insights を利用することが多い
- DatadogでのAuroraに関しての検知は数分〜15分(タイミングによる)
といった点でAmazon DevOps Guru for RDSと併用して使い分けることで、パフォーマンスやオペレーション問題を解決する手助けになってくれそうです。
-
Amazon RDS データベースエンジンの追加サポートされる予定です。(時期に関しては未公開。) ↩︎
Discussion