#はじめに
本記事に記載している情報は2021/12/15時点での情報になります。
#概要
Auroraの拡張モニタリングによってCloudWatch Logsに保存されるようになったOSメトリクスの情報(主にプロセスの情報)をダッシュボードに表示したくて試行錯誤した備忘録
#欲しい情報
特定プロセスのメモリ使用状況を取得したい
「RDSOSMetrics」というロググループ内にログストリームが保存されている
ストリームのメッセージはJSON形式になっている
肝心のプロセス情報は「$.processList[]」でアクセス出来る
例:
{
"engine": "aurora-postgresql",
...
"processList": [
{
"vss": 12345,
"name": "OS processes",
"tgid": 0,
"parentID": 0,
"memoryUsedPc": 0.02,
"cpuUsedPc": 0.05,
"id": 0,
"rss": 12345,
"vmlimit": 0
},
{...}
}
#メトリクスフィルタを利用
利用したかったが、配列の子要素全体にアクセスする術が見つけられず断念
#Log Insightsを利用
こちらも配列の子要素全体にアクセスして特定プロセスのメモリ使用率を取得することは難しかったが、以下のコードで無理やり実現した
fields @logStream
| sort @timestamp desc
| limit 20
| filter @logStream="db-XXXXXXXXXXXXXXXXXXXXXXXXXX"
| parse @message "\"name\":\"[プロセス名]\",\"tgid\":*,\"parentID\":*,\"memoryUsedPc\":*," as tgid,parentID,mem_used
|stats avg( mem_used ) by bin(1m)
これをダッシュボードに登録すれば問題ないと思っていたのだが、料金体系の問題が発生した。
まず、Insightsの料金体系の前提としてInsightsは読み込んだデータ量によって課金が発生する。
そのため、クエリ実行時に読み込むデータの期間は必要最低限にとどめる必要がある。
続いてダッシュボードに持っていったInsightsの仕様だが、
"ダッシュボードに追加したクエリは、ダッシュボードをロードおよび更新するたびに再実行されます。"
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/CWL_ExportQueryResults.html
上記のとおり、ダッシュボードを表示する度にクエリが実行される仕様らしいので、データ量次第では大変な事になる可能性がある。
また、ダッシュボード上でのInsightsのデータ読み込み期間だが、 ダッシュボード上で指定した期間と同じ期間指定となる。
なので間違って1年とか指定した日にゃたまったもんじゃない…かもしれない。
ダッシュボードはポチポチ気軽に弄りたいので断念。
#今後
メトリクスフィルタでもう少し頑張ってみる。
それでも無理ならLambda辺りでデータ加工を実施する?正直未定。