AWS CloudWatch MetricMath报错排查:MetricWidget项数超限问题
CloudWatch Metric Widget 调试:解决
MetricWidget/metrics/1 should not have more than 1 item错误 我是CloudWatch MatchExpression新手,想绘制5xx错误占比。用Ruby构建了带数学表达式的Metric Widget,嵌入wiki时出现错误:MetricWidget/metrics/1 should not have more than 1 item。以下是Ruby生成的Widget代码和AWS CloudWatch控制台导出的配置,求帮忙调试。
Ruby构建的Widget代码
{:title=>"5xx Errors", :view=>"timeSeries", :stacked=>false, :start=>"-P7D", :period=>300, :yAxis=>{"left"=>{:min=>0, :max=>100}}, :annotations=>{:horizontal=>[{:color=>"#ff7f00", :label=>"10", :value=>10}, {:color=>"#ff0000", :label=>"50", :value=>50}]}, :metrics=>[[{"id"=>"percent_5xx_error", "expression"=>"100*(5xx/(2xx+3xx+4xx+5xx))", "label"=>"IAD", "accountId"=>"967992492170", "region"=>"us-east-1"}], ["TangerineBox", "StatusCode2xx", "ConsoleName", "fsx-console", {"accountId"=>"967992492170", "region"=>"us-east-1", "label"=>"IAD", "id"=>"2xx", "stat"=>"Sum", "visible"=>false}], ["TangerineBox", "StatusCode3xx", "ConsoleName", "fsx-console", {"accountId"=>"967992492170", "region"=>"us-east-1", "label"=>"IAD", "id"=>"3xx", "stat"=>"Sum", "visible"=>false}], ["TangerineBox", "StatusCode4xx", "ConsoleName", "fsx-console", {"accountId"=>"967992492170", "region"=>"us-east-1", "label"=>"IAD", "id"=>"4xx", "stat"=>"Sum", "visible"=>false}], ["TangerineBox", "StatusCode5xx", "ConsoleName", "fsx-console", {"accountId"=>"967992492170", "region"=>"us-east-1", "label"=>"IAD", "id"=>"5xx", "stat"=>"Sum", "visible"=>false}]]}
AWS CloudWatch控制台导出的配置
{ "title": "5xx Errors", "view": "timeSeries", "stacked": false, "period": 300, "yAxis": { "left": { "min": 0, "max": 100 } }, "annotations": { "horizontal": [ { "color": "#ff7f00", "label": "10", "value": 10 }, { "color": "#ff0000", "label": "50", "value": 50 } ] }, "metrics": [ [ { "id": "percent_5xx_error", "expression": "100*(5xx/(2xx+3xx+4xx+5xx))", "label": "IAD", "accountId": "967992492170", "region": "us-east-1" } ], [ "TangerineBox", "StatusCode2xx", "ConsoleName", "fsx-console", { "accountId": "967992492170", "label": "IAD", "id": "2xx", "stat": "Sum", "visible": false } ], [ ".", "StatusCode3xx", ".", ".", { "accountId": "967992492170", "label": "IAD", "id": "3xx", "stat": "Sum", "visible": false } ], [ ".", "StatusCode4xx", ".", ".", { "accountId": "967992492170", "label": "IAD", "id": "4xx", "stat": "Sum", "visible": false } ], [ ".", "StatusCode5xx", ".", ".", { "accountId": "967992492170", "label": "IAD", "id": "5xx", "stat": "Sum", "visible": false } ] ], "width": 1401, "height": 754, "region": "us-east-1" }
问题原因及修复方案
错误原因
报错指向表达式类型的metric项格式错误。CloudWatch Metric Widget规则明确:表达式metric必须是单个对象,不能嵌套在数组里。
你Ruby代码里的第一个metrics项把表达式对象包裹在了数组[ {...} ]中,这违反了格式要求,而控制台导出的嵌套数组写法是兼容格式,嵌入wiki时需要严格遵循API规范。
修复后的Ruby代码
将metrics数组里的第一个表达式项从嵌套数组改为直接的对象:
{:title=>"5xx Errors", :view=>"timeSeries", :stacked=>false, :start=>"-P7D", :period=>300, :yAxis=>{"left"=>{:min=>0, :max=>100}}, :annotations=>{:horizontal=>[{:color=>"#ff7f00", :label=>"10", :value=>10}, {:color=>"#ff0000", :label=>"50", :value=>50}]}, :metrics=>[ {"id"=>"percent_5xx_error", "expression"=>"100*(5xx/(2xx+3xx+4xx+5xx))", "label"=>"IAD", "accountId"=>"967992492170", "region"=>"us-east-1"}, ["TangerineBox", "StatusCode2xx", "ConsoleName", "fsx-console", {"accountId"=>"967992492170", "region"=>"us-east-1", "label"=>"IAD", "id"=>"2xx", "stat"=>"Sum", "visible"=>false}], ["TangerineBox", "StatusCode3xx", "ConsoleName", "fsx-console", {"accountId"=>"967992492170", "region"=>"us-east-1", "label"=>"IAD", "id"=>"3xx", "stat"=>"Sum", "visible"=>false}], ["TangerineBox", "StatusCode4xx", "ConsoleName", "fsx-console", {"accountId"=>"967992492170", "region"=>"us-east-1", "label"=>"IAD", "id"=>"4xx", "stat"=>"Sum", "visible"=>false}], ["TangerineBox", "StatusCode5xx", "ConsoleName", "fsx-console", {"accountId"=>"967992492170", "region"=>"us-east-1", "label"=>"IAD", "id"=>"5xx", "stat"=>"Sum", "visible"=>false}] ]}
额外优化
可以借鉴控制台写法,用.复用前一个metric的命名空间、维度等属性,减少重复代码:
["TangerineBox", "StatusCode2xx", "ConsoleName", "fsx-console", {"accountId"=>"967992492170", "region"=>"us-east-1", "label"=>"IAD", "id"=>"2xx", "stat"=>"Sum", "visible"=>false}], [".", "StatusCode3xx", ".", ".", {"accountId"=>"967992492170", "label"=>"IAD", "id"=>"3xx", "stat"=>"Sum", "visible"=>false}], [".", "StatusCode4xx", ".", ".", {"accountId"=>"967992492170", "label"=>"IAD", "id"=>"4xx", "stat"=>"Sum", "visible"=>false}], [".", "StatusCode5xx", ".", ".", {"accountId"=>"967992492170", "label"=>"IAD", "id"=>"5xx", "stat"=>"Sum", "visible"=>false}]
内容的提问来源于stack exchange,提问作者user2284140
相关产品推荐
相关产品推荐

