インスタンスが多いので、Cloudwatchのスクリーンショットを自動的に取得したいと思います。
しかし、aws cliコマンドツールでget-metric-widget-imageを実行しようとすると、常にエラーが発生します。
GetMetricWidgetImage操作を呼び出すときにエラーが発生しました(ValidationError):MetricWidgetプロパティ 'metricWidget'のJSONコンテンツが正しくありません。
私を助けてくれる人はいますか?ありがとう。
Awsdocから例を見つけることができませんでした。以下のリンクに正確な例はありません。 https://docs.aws.Amazon.com/AmazonCloudWatch/latest/APIReference/CloudWatch-Metric-Widget-Structure.html
私の命令はこんな感じです。
aws cloudwatch get-metric-widget-image --metric-widget "{ "width":600,"height":395,"metrics":[["AWS/EC2","CPUUtilization","InstanceId","i-01234567890123456",{"stat":"Average"}]],"period":300,"start":"-P30D","end":"PT0H","stacked":false,"yAxis":{"left":{"min":0.1,"max":1},"right":{"min":0}},"title":"CPU","annotations":{"horizontal":[{"color":"#ff6961","label":"Troublethresholdstart","fill":"above","value":0.5}], "vertical":[{"visible":true, "color":"#9467bd","label":"Bugfixdeployed","value":"2018-11-19T07:25:26Z","fill":"after"}]}}}" --output-format "png"
これは、毎日同じ指標の画像をダウンロードするために使用するスクリプトです。このスクリプトは、可変引数を使用してaws cloudwatch get-metric-widget-image
を呼び出し、出力をpngファイルに変換する方法を示しています。
function getDbDailyMetricImage
{
local date=$1
local dbId=$2
local metric=${3:-'CPUUtilization'}
local metricMin=$4
local metricMax=$5
local dateF=$(date --date="$date" +%F)
local start="${dateF}T00:00:00.000Z"
local end="${dateF}T23:59:59.999Z"
echo "Downloading image for $dbId $metric [$metricMin .. $metricMax]" \
"and Time [$start .. $end]"
aws --region us-east-1 cloudwatch get-metric-widget-image --metric-widget \
'{
"metrics": [
[ "AWS/RDS", "'$metric'", "DBInstanceIdentifier", "'$dbId'",
{ "period": 300, "yAxis": "left" } ]
],
"yAxis": {
"left": {
"min": '$metricMin',
"max": '$metricMax'
}
},
"title": "'"$dateF $metric of $dbId vs Time UTC"'",
"legend": {
"position": "hidden"
},
"view": "timeSeries",
"stacked": true,
"period": 300,
"width": 1200,
"height": 800,
"start": "'$start'",
"end": "'$end'"
}' \
--output-format png --output text | base64 --decode > $metric-$dbId-$dateF.png
}
for daysAgo in {0..30}
do
getDbDailyMetricImage $(date --date="$daysAgo days ago" +%F) mydb1 CPUUtilization 0 100
getDbDailyMetricImage $(date --date="$daysAgo days ago" +%F) mydb1 ReadIOPS 0 10000
done
imageMagick convert -compose Multiplyを使用して、すべてまたは一部のグラフを1つに結合するために使用するもう1つの便利な分析ツール。例えば、
convert ReadIOPS-mydb1-2019-0*.png -compose Multiply -layers flatten ReadIOPS-mydb1-2019-composite.png