Документы верны, 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"
}
Результатом будет такой график:
![поисковое выражение](https://i.stack.imgur.com/4EBfm.png)
Минусы этого подхода:
- Выражения ограничены 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 мс:
![введите описание изображения здесь](https://i.stack.imgur.com/F4Kul.png)
Объединение всего этого с помощью встроенного формата 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