Shell 脚本 - 根据 ISO 8601 UTC 格式的 "Timestamp" 属性 值对 'AWS cloudwatch metrics' json 数组进行排序
Shell script - Sorting 'AWS cloudwatch metrics' json array based on the "Timestamp" property value which comes in ISO 8601 UTC format
我有一个 Amazon cloudwatch ELB 延迟 指标,如下所示。
{
"Datapoints": [
{
"Timestamp": "2016-10-18T12:11:00Z",
"Average": 0.25880099632013942,
"Minimum": 0.00071811676025390625,
"Maximum": 3.2039437294006352,
"Unit": "Seconds"
},
{
"Timestamp": "2016-10-18T12:10:00Z",
"Average": 0.25197337517680762,
"Minimum": 0.00063610076904296875,
"Maximum": 2.839790821075439,
"Unit": "Seconds"
},
{
"Timestamp": "2016-10-18T12:19:00Z",
"Average": 0.2287127116954388,
"Minimum": 0.00061678886413574219,
"Maximum": 1.416410446166992,
"Unit": "Seconds"
}
]
}
我 运行 'awscli' 在 shell 脚本中获取这个,但是数据不是按时间顺序返回的,时间戳是 ISO 8601 UTC 格式。我需要根据时间戳对这个数组进行排序,以按时间顺序获取数据。
我的目标:
我还有一个来自 ELB RequestCount 指标的 cloudwatch 指标数据,如下所示。
{
"Datapoints": [
{
"Timestamp": "2016-10-18T12:11:00Z",
"Sum": 217732.0,
"Unit": "Count"
},
{
"Timestamp": "2016-10-18T12:15:00Z",
"Sum": 227120.0,
"Unit": "Count"
},
]
}
我希望根据时间戳对这些指标进行排序,并在每个时间戳的延迟和请求数量之间创建匹配。
此外,我必须计算开始时间和结束时间之间的时差,这可能无法根据此处接收的格式计算。
我正在使用 shell 脚本,但无法找到解决此问题的方法。任何帮助将非常感激。 TIA
JMESPATH 有一个 sort_by 方法可用于此 - 这里只是一个例子
aws cloudwatch get-metric-statistics \
--metric-name CPUUtilization \
--start-time 2016-10-01T23:18:00 --end-time 2016-10-19T23:18:00 --period 3600 \
--namespace AWS/EC2 --statistics Maximum \
--dimensions Name=InstanceId,Value=<YOURINSTANCE> \
--query 'sort_by(Datapoints,&Timestamp)[*]'
如果想使用 jq,您将使用 jq 的 sort_by
方法,如下所示
aws cloudwatch get-metric-statistics \
--metric-name CPUUtilization \
--start-time 2016-10-01T23:18:00 --end-time 2016-10-19T23:18:00 --period 3600 \
--namespace AWS/EC2 --statistics Maximum \
--dimensions Name=InstanceId,Value=<YOURINSTANCE> \
| jq -r '.Datapoints | sort_by(.Timestamp)[]'
如果您是 bash 人,可以使用 linux 排序命令
aws cloudwatch get-metric-statistics \
--metric-name CPUUtilization \
--start-time 2016-10-01T23:18:00 --end-time 2016-10-19T23:18:00 --period 3600 \
--namespace AWS/EC2 --statistics Maximum \
--dimensions Name=InstanceId,Value=<YOURINSTANCE> \
--output text \
| sort -k 3
日期在第 3 列,因此您将对这一列进行排序(-k 3
)
我有一个 Amazon cloudwatch ELB 延迟 指标,如下所示。
{
"Datapoints": [
{
"Timestamp": "2016-10-18T12:11:00Z",
"Average": 0.25880099632013942,
"Minimum": 0.00071811676025390625,
"Maximum": 3.2039437294006352,
"Unit": "Seconds"
},
{
"Timestamp": "2016-10-18T12:10:00Z",
"Average": 0.25197337517680762,
"Minimum": 0.00063610076904296875,
"Maximum": 2.839790821075439,
"Unit": "Seconds"
},
{
"Timestamp": "2016-10-18T12:19:00Z",
"Average": 0.2287127116954388,
"Minimum": 0.00061678886413574219,
"Maximum": 1.416410446166992,
"Unit": "Seconds"
}
]
}
我 运行 'awscli' 在 shell 脚本中获取这个,但是数据不是按时间顺序返回的,时间戳是 ISO 8601 UTC 格式。我需要根据时间戳对这个数组进行排序,以按时间顺序获取数据。
我的目标: 我还有一个来自 ELB RequestCount 指标的 cloudwatch 指标数据,如下所示。
{
"Datapoints": [
{
"Timestamp": "2016-10-18T12:11:00Z",
"Sum": 217732.0,
"Unit": "Count"
},
{
"Timestamp": "2016-10-18T12:15:00Z",
"Sum": 227120.0,
"Unit": "Count"
},
]
}
我希望根据时间戳对这些指标进行排序,并在每个时间戳的延迟和请求数量之间创建匹配。 此外,我必须计算开始时间和结束时间之间的时差,这可能无法根据此处接收的格式计算。
我正在使用 shell 脚本,但无法找到解决此问题的方法。任何帮助将非常感激。 TIA
JMESPATH 有一个 sort_by 方法可用于此 - 这里只是一个例子
aws cloudwatch get-metric-statistics \
--metric-name CPUUtilization \
--start-time 2016-10-01T23:18:00 --end-time 2016-10-19T23:18:00 --period 3600 \
--namespace AWS/EC2 --statistics Maximum \
--dimensions Name=InstanceId,Value=<YOURINSTANCE> \
--query 'sort_by(Datapoints,&Timestamp)[*]'
如果想使用 jq,您将使用 jq 的 sort_by
方法,如下所示
aws cloudwatch get-metric-statistics \
--metric-name CPUUtilization \
--start-time 2016-10-01T23:18:00 --end-time 2016-10-19T23:18:00 --period 3600 \
--namespace AWS/EC2 --statistics Maximum \
--dimensions Name=InstanceId,Value=<YOURINSTANCE> \
| jq -r '.Datapoints | sort_by(.Timestamp)[]'
如果您是 bash 人,可以使用 linux 排序命令
aws cloudwatch get-metric-statistics \
--metric-name CPUUtilization \
--start-time 2016-10-01T23:18:00 --end-time 2016-10-19T23:18:00 --period 3600 \
--namespace AWS/EC2 --statistics Maximum \
--dimensions Name=InstanceId,Value=<YOURINSTANCE> \
--output text \
| sort -k 3
日期在第 3 列,因此您将对这一列进行排序(-k 3
)