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分
異常検知されないケース
あまり時間を空けずに同様の負荷をかけた場合は検知されないといったケースがありました。
AWSサポートへ問い合わせしましたが、以下の回答でしたので異常検知する場合としない場合を把握するのは厳しそうです。
AWSサポートからの回答
通知設定
Chatbot を使用したSlack通知には未対応
SNS Topic → Lambda を経由してSlack通知は可能
おわりに
弊社ではDatadogでCPU使用率やコネクション数を監視しています。
原因特定はPerformance Insights を利用することが多い
DatadogでのAuroraに関しての検知は数分〜15分(タイミングによる)
といった点でAmazon DevOps Guru for RDSと併用して使い分けることで、パフォーマンスやオペレーション問題を解決する手助けになってくれそうです。
※1.Amazon RDS データベースエンジンの追加サポートされる予定です。(時期に関しては未公開。)
Happy Elements株式会社 カカリアスタジオでは
いっしょに「熱狂的に愛されるコンテンツ」をつくっていただけるメンバーを大募集中です!
もし弊社にご興味持っていただけましたら、是非一度
下記採用サイトをご覧ください!