Вы получаете эту ошибку, потому что вы не указываете какие-либо метрические данные. Вы только устанавливаете имя метрики и метку времени. Вам также необходимо отправить некоторые значения для метрики.
Допустим, ваше приложение измеряет задержку запросов, и вы наблюдали 5 запросов с задержками 100 мс, 500 мс, 200 мс, 200 мс и 400 мс. У вас есть несколько вариантов получения этих данных в CloudWatch (отсюда и ошибка At least one of the parameters must be specified.
).
- Вы можете публиковать эти 5 значений по одному, установив
Value
в метрическом объекте данных. Это самый простой способ сделать это. CloudWatch выполняет всю агрегацию за вас, и вы получаете процентили по своим показателям. Я бы не рекомендовал такой подход, если вам нужно опубликовать много замечаний. Эта опция приведет к тому, что большинство запросов к CloudWatch будет выполнено, что может привести к большому счету или ограничению со стороны CloudWatch, если вы начнете публиковать слишком много наблюдений.
Например:
MetricData: [{
MetricName:'first',
Timestamp: new Date(),
Value: 100
}]
- Вы можете объединять данные самостоятельно, создавать и публиковать
StatisticValues
. Это сложнее с вашей стороны, но приводит к наименьшему количеству запросов к CloudWatch. Например, вы можете агрегировать за минуту и выполнять 1 ставку на метрику каждую минуту. Это не даст вам процентили (поскольку вы собираете данные на своей стороне, CloudWatch не знает точных значений, которые вы наблюдали). Я бы порекомендовал это, если вам не нужны процентили.
Например:
MetricData: [{
MetricName:'first',
Timestamp: new Date(),
StatisticValues: {
Maximum: 500,
Minimum: 100,
SampleCount: 5,
Sum: 1400
}
}]
- Вы можете сосчитать наблюдения и опубликовать
Values
и Counts
. Это своего рода лучшее из обоих миров. С вашей стороны есть некоторая сложность, но подсчет, возможно, проще, чем агрегирование в StatisticValues. Вы по-прежнему отправляете каждое наблюдение, поэтому CloudWatch выполнит агрегацию за вас, и вы получите процентили. Формат также позволяет отправлять больше данных, чем в варианте 1. Я бы порекомендовал это, если вам нужны процентили.
Например:
MetricData: [{
MetricName:'first',
Timestamp: new Date(),
Values: [100, 200, 400, 500],
Counts: [1, 2, 1, 1]
}]
Смотрите здесь для более подробной информации для каждого варианта: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudWatch.html#putMetricData-property