Вы можете сделать математику с метриками CloudWatch: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html
Вы можете создать математическое выражение метрики с метриками, имеющимися в metric_data_queries
, и получить результат на графике. Метрическая математика также работает с API-интерфейсом GetMetricData, поэтому вы можете перенести вычисление, которое вы делаете, в MetricDataQuery и получить нужное число непосредственно из CloudWatch.
Похоже, вам нужно число, указывающее, какой процент точек данных за последний месяцзначение метрики равно 25.
Вы можете рассчитать его следующим образом (это источник графика, который можно использовать в консоли CloudWatch на вкладке источника, убедитесь, что регион соответствует вашему региону, а имя метрики соответствуетваша метрика):
{
"metrics": [
[
"AWS/ElasticBeanstalk",
"EnvironmentHealth",
"EnvironmentName",
"ServiceA",
{
"label": "metric",
"id": "m1",
"visible": false,
"stat": "Maximum"
}
],
[
{
"expression": "25",
"label": "Value for severe",
"id": "severe_c",
"visible": false
}
],
[
{
"expression": "m1*0",
"label": "Constant 0 time series",
"id": "zero_ts",
"visible": false
}
],
[
{
"expression": "1-AVG(CEIL(ABS(m1-severe_c)/MAX(m1)))",
"label": "Percentage of times value equals severe",
"id": "severe_pct",
"visible": false
}
],
[
{
"expression": "(zero_ts+severe_pct)*100",
"label": "Service Uptime",
"id": "e1"
}
]
],
"view": "singleValue",
"stacked": false,
"region": "eu-west-1",
"period": 300
}
Чтобы объяснить, что там происходит (какова цель каждого элемента выше, по id):
- m1 - Это ваша оригинальная метрика. Установка stat на
Maximum
. - strict_c - Константа, которую вы хотите использовать для значения SEVERE.
- zero_ts - Создание постоянного временного рядасо всеми значениями, равными нулю. Это необходимо, потому что константы не могут быть отображены, и окончательное значение будет постоянным. Таким образом, чтобы построить график, мы просто добавим константу к этому временному ряду нулей.
- strong_pct - здесь вы фактически вычисляете процент значения, равный SEVERE.
m1-severe_c
- устанавливает точки данных со значением, равным SEVERE, равным 0. ABS(m1-severe_c)
- делает все значения положительными, сохраняет точки данных SEVERE равными 0. ABS(m1-severe_c)/MAX(m1)
- деление на максимальное значение гарантирует, что все значения теперь находятся в диапазоне от 0 до 1. CEIL(ABS(m1-severe_c)/MAX(m1))
- фиксирует все значения, отличные от 0 до 1, сохраняет значение SEVERE равным 0. AVG(CEIL(ABS(m1-severe_c)/MAX(m1))
- Поскольку метрика теперь равна всем 1 и 0, где 0 означает SEVERE, взяв среднее, вы получите процент несерьезных точек данных. 1-AVG(CEIL(ABS(m1-severe_c)/MAX(m1)))
- наконец, вам нужен процент серьезных значений, и поскольку значенияВыражение из 1 дает вам необходимое число.
- e1 - Последнее выражение давало вам константу от 0 до 1. Вам нужновременной ряд от 0 до 100. Это выражение, которое дает вам, что:
(zero_ts+severe_pct)*100
. Не то чтобы это единственный результат, который вы возвращаете, все остальные выражения имеют "visible": false
.