CloudWatch не агрегирует ваши специальные показатели по размерам.

Читая документы, я увидел это утверждение;

CloudWatch не агрегирует ваши специальные показатели по размерам.

Это кажется ОГРОМНЫМ ограничением, верно? По моей оценке, это сделало бы пользовательские метрики бесполезными, поэтому я хочу подтвердить, что понимаю это.

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


person red888    schedule 25.01.2018    source источник
comment
Я довольно долго пытался сгруппировать показатели по размерам и уже начал думать, что либо я тупой, либо ... Вы подтвердили мое последнее подозрение. AWS продолжает меня разочаровывать практически везде, похоже, пора рассмотреть и других провайдеров. Отсутствия такой базовой статистической функции мне как раз достаточно.   -  person Slava Fomin II    schedule 25.06.2021


Ответы (1)


Документы верны, CloudWatch не будет агрегировать по измерениям для ваших пользовательских метрик (он будет делать это для некоторых метрик, опубликованных другими сервисами, такими как EC2).

Эта функция может показаться полезной и понятной для вашего варианта использования, но неясно, как такая агрегация будет вести себя в общем случае. CloudWatch допускает до 10 измерений, поэтому агрегирование всех их комбинаций может привести к появлению множества бесполезных показателей, за все из которых вам будет выставлен счет. Люди могут использовать измерения для разделения своих показателей, например, между Test и Prod стеками, которые полностью разделены, и их агрегирование не имеет смысла.

CloudWatch обрабатывает имя метрики и полный набор измерений как уникальный идентификатор метрики. В вашем случае это означает, что вам необходимо публиковать свои наблюдения для каждой метрики, в которую вы хотите внести свой вклад, отдельно.

Допустим, у вас есть показатель с именем Latency, и вы помещаете имя хоста в измерение с именем Server. Если у вас три сервера, это создаст три метрики:

  • Latency, Server=server1
  • Latency, Server=server2
  • Latency, Server=server3

Таким образом, подход, который вы упомянули в своем вопросе, будет работать. Если вам также нужна метрика, показывающая данные по всем серверам, каждый сервер необходимо будет публиковать в отдельной метрике, что было бы лучше всего сделать, используя новое общее значение для измерения Server, например AllServers. В результате у вас будет 4 показателя, например:

  • Latency, Server=server1 ‹- только данные server1
  • Latency, Server=server2 ‹- только данные server2
  • Latency, Server=server3 ‹- только данные server3
  • Latency, Server=AllServers ‹- данные со всех 3-х серверов

Обновление 2019-12-17

Использование метрической математической функции ПОИСК: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html

Это даст вам задержку для каждого сервера и задержку на всех серверах без публикации отдельной AllServers метрики, и если появится новый сервер, он будет автоматически выбран выражением:

Источник графика:

{
    "metrics": [
        [ { "expression": "SEARCH('{SomeNamespace,Server} MetricName=\"Latency\"', 'Average', 60)", "id": "e1", "region": "eu-west-1" } ],
        [ { "expression": "AVG(e1)", "id": "e2", "region": "eu-west-1", "label": "All servers", "yAxis": "right" } ]
    ],
    "view": "timeSeries",
    "stacked": false,
    "region": "eu-west-1"

}

Результатом будет такой график:

поисковое выражение

Минусы этого подхода:

  • Выражения ограничены 100 показателями.
  • Общее агрегирование ограничено доступными математическими функциями метрик, что означает, что процентили недоступны с 17.12.2019.

Использование Contributor Insights (открытая предварительная версия от 17.12.2019): https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContributorInsights.html

Если вы публикуете свои журналы в CloudWatch Logs в формате JSON или Common Log Format (CLF), вы можете создавать правила, отслеживающие основных участников. Например, правило, отслеживающее серверы с задержкой более 400 мс, будет выглядеть примерно так:

{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "AggregateOn": "Count",
    "Contribution": {
        "Filters": [
            {
                "Match": "$.Latency",
                "GreaterThan": 400
            }
        ],
        "Keys": [
            "$.Server"
        ],
        "ValueOf": "$.Latency"
    },
    "LogFormat": "JSON",
    "LogGroupNames": [
        "/aws/lambda/emf-test"
    ]
}

Результатом является список серверов с большинством точек данных более 400 мс:

введите описание изображения здесь

Объединение всего этого с помощью встроенного формата CloudWatch: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format.html

Если вы публикуете свои данные во встроенном формате CloudWatch, вы можете:

  • Легко настраивайте параметры, так что вы можете иметь показатели для каждого сервера и общие показатели, если хотите.
  • Используйте CloudWatch Logs Insights для запроса и визуализации журналов.
  • Используйте Contributor Insights, чтобы привлечь лучших участников.
person Dejan Peretin    schedule 26.01.2018
comment
может привести к появлению множества бесполезных показателей, за каждую из которых вам будет выставлен счет. Если бы CloudWatch поддерживал оперативную математику на стороне сервера для агрегирования, не было бы необходимости в дополнительных показателях и дополнительных затратах. То, что вы описываете, является хорошим обходным путем. Но рассмотрим общий случай, когда, скажем, 3 измерения с каждыми 10 значениями = 30 метриками. Чтобы иметь специальную гибкость, мне нужно было бы хранить 3 * 10 * 10 = 300 метрик (все комбинации из 2 тусклых с 1 Все для третьего). Это в 10 раз, поэтому мои затраты увеличиваются в 10 раз. - person Max; 24.05.2018
comment
CloudWatch недавно запустил функцию Metric Math: docs.aws.amazon .com / AmazonCloudWatch / latest / monitoring / Это можно использовать для агрегирования показателей на стороне сервера в GET. Подстановочные знаки не поддерживаются, поэтому вам все равно нужно указать все показатели, которые вы хотите агрегировать, но вам больше не нужно выполнять двойную публикацию. - person Dejan Peretin; 25.05.2018
comment
^ возможно, следует добавить второй / обновленный ответ? - person red888; 05.12.2019
comment
CloudWatch также запустил ПОИСК с метрической математикой, поэтому теперь можно использовать подстановочные знаки. Я обновлю ответ, чтобы отразить текущее состояние вопроса. - person Dejan Peretin; 05.12.2019
comment
Сделать это несложно - и если клиенты этого хотят, CW должен это поддерживать. Рассмотрение {метрика + измерения} как уникальный идентификатор, а не агрегирование по измерениям, делает размерность почти бессмысленной. Зачем беспокоиться? Вот отличный вариант использования: я хочу создать метрику сбоев для алгоритма с размером X. Я хочу предупреждать о любых сбоях. Тем не менее, я хочу, чтобы операторы могли глубоко погрузиться в то, какой алгоритм алгоритма X вызвал сбой. Я НЕ хочу, чтобы мой стек CFN обновлялся каждый раз, когда кто-то добавляет новый алгоритм (или, что еще хуже, скажем, значение измерения динамическое). - person Jmoney38; 17.12.2019
comment
Обновил ответ с учетом текущего положения вещей. - person Dejan Peretin; 17.12.2019