Как показать процент времени безотказной работы службы AWS на панели инструментов CloudWatch? - PullRequest
1 голос
/ 21 октября 2019

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

Поэтому я использовал boto3 get_metric_data для получения Environment Health Данные метрик CloudWatch и рассчитывают процент несерьезного времени моего обслуживания.

from datetime import datetime
import boto3

SEVERE = 25

client = boto3.client('cloudwatch')

metric_data_queries = [
    {
        'Id': 'healthStatus', 
        'MetricStat': {
            'Metric': {
                'Namespace': 'AWS/ElasticBeanstalk',
                'MetricName': 'EnvironmentHealth',
                'Dimensions': [
                    {
                        'Name': 'EnvironmentName', 
                        'Value': 'ServiceA'
                    }
                ]
            },
            'Period': 300,
            'Stat': 'Maximum'
        },
        'Label': 'EnvironmentHealth',
        'ReturnData': True
    }
]

response = client.get_metric_data(
    MetricDataQueries=metric_data_queries,
    StartTime=datetime(2019, 9, 1),
    EndTime=datetime(2019, 9, 30),
    ScanBy='TimestampAscending'
    )

health_data = response['MetricDataResults'][0]['Values']
total_times = len(health_data)
severe_times = health_data.count(SEVERE)
print(f'total_times: {total_times}')
print(f'severe_times: {severe_times}')
print(f'healthy percent: {1 - (severe_times/total_times)}')

Теперь мне интересно, как отобразить процент на панели мониторинга в CloudWatch. Я хочу показать что-то вроде следующего:

enter image description here

Кто-нибудь знает, как загрузить здоровый процент У меня естьрассчитывается на приборной панели CloudWatch?

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

1 Ответ

0 голосов
/ 22 октября 2019

Вы можете сделать математику с метриками 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...