Сценарий оболочки — сортировка массива JSON «метрик AWS cloudwatch» на основе значения свойства Timestamp, которое представлено в формате ISO 8601 UTC.

У меня есть показатели Latency 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"
    },
  ]

}

Я хотел отсортировать эти показатели на основе метки времени и создать соответствие между задержкой и количеством запросов для каждой метки времени. Кроме того, я должен рассчитать разницу во времени между временем начала и временем окончания, что может быть невозможно из полученного здесь формата.

Я использую сценарий оболочки и не могу понять, как это сделать. Любая помощь могла бы быть полезна. ТИА


person user7047177    schedule 20.10.2016    source источник


Ответы (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,&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)

person Frederic Henri    schedule 20.10.2016
comment
Невероятное решение!! - person Foreever; 15.03.2017