#bash #sed #aws-cli #jq
#bash #sed #aws-cli #jq
Вопрос:
У меня есть показатели задержки 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’ внутри сценария оболочки, но данные не возвращаются в хронологическом порядке, а временная метка находится в формате ISO 8601 UTC. Мне нужно отсортировать этот массив на основе метки времени, чтобы получить данные в хронологическом порядке.
Моя цель: у меня есть еще один показатель cloudwatch из ELB-метрик RequestCount, как показано ниже.
{
"Datapoints": [
{
"Timestamp": "2016-10-18T12:11:00Z",
"Sum": 217732.0,
"Unit": "Count"
},
{
"Timestamp": "2016-10-18T12:15:00Z",
"Sum": 227120.0,
"Unit": "Count"
},
]
}
Я хотел отсортировать эти показатели на основе метки времени и создать соответствие между задержкой и количеством запросов в каждой метке времени. Кроме того, я должен вычислить разницу во времени между временем начала и окончания, что может быть невозможно из формата, который получен здесь.
Я использую сценарий оболочки и не могу найти способ сделать это. Любая помощь была бы действительно оценена. TIA
Ответ №1:
В 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,amp;Timestamp)[*]'
Если вместо этого вы хотите использовать jq, вы будете использовать sort_by
метод jq следующим образом
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
)
Комментарии:
1. Невероятное решение!!