Оповещения на основе журналов ошибок приложений из групп журналов AWS Cloudwatch

У меня есть приложение Ruby on Rails, работающее внутри AWS EC2, которое отправляет все журналы приложений в группы cloudwatchlog. теперь задача состоит в том, чтобы ежедневно получать оповещения из журналов cloudwatch, сообщающие о том, сколько кодов ошибок создается за день.

пример:

если мое приложение выдает 10 "500 внутренних ошибок сервера", 5 "403 запрещенных ошибки". Я должен получить электронное письмо от сервисов AWS о том, что «ваше приложение сгенерировало 10–500 кодов ошибок, 5–403 кода ошибок».

Я думаю, что мы можем добиться этого с помощью лямбда-функции и службы AWS SNS, но не знаю, как закодировать мою лямбда-функцию, чтобы она работала таким образом.

Мне нужен код лямбда-функции для хранения счетчиков кодов ошибок. После сбора данных я могу запускать лямбда-функцию ежедневно в определенное время для отправки электронного письма.

Пожалуйста, помогите.

Заранее спасибо :)


person Bala krishna    schedule 15.06.2020    source источник
comment
Я могу использовать лямбда-функцию, чтобы активировать SNS для получения электронной почты, но как получить код ошибки из журналов. код лямбда-функции для достижения этого будет очень полезен   -  person Bala krishna    schedule 15.06.2020


Ответы (1)


Какой у вас балансировщик нагрузки перед EC2; если есть?

Cloudwatch уже содержит следующие показатели балансировщика нагрузки:

HTTPCode_Target_2XX_Count, HTTPCode_Target_3XX_Count, HTTPCode_Target_4XX_Count, HTTPCode_Target_5XX_Count См. https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html

Запрос этих метрик может быть проще, чем анализ файлов журналов приложений и подсчет результатов.

Чтобы запросить эту статистику с помощью aws-sdk для ruby, приведенный ниже код должен помочь вам в большинстве случаев. Вам нужно будет адаптировать его к вашим потребностям и настройкам, поэтому посмотрите документы, которые я связал внизу ответа:

metric = Aws::CloudWatch::Metric.new 'AWS/ApplicationELB', 'HTTPCode_ELB_4XX_Count'

stats = metric.get_statistics({
  dimensions: [
    {
      name: "LoadBalancerName",
      value: "'YOUR_ALB_NAME'",
    },
  ],
  start_time: Time.now - 3600 * 24 * 30,
  end_time: Time.now,
  period: 3600 * 24 * 30,
  unit: "Seconds", # accepts Seconds, Microseconds, Milliseconds, Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes, Bits, Kilobits, Megabits, Gigabits, Terabits, Percent, Count, Bytes/Second, Kilobytes/Second, Megabytes/Second, Gigabytes/Second, Terabytes/Second, Bits/Second, Kilobits/Second, Megabits/Second, Gigabits/Second, Terabits/Second, Count/Second, None
  statistics: ["Average"], # accepts SampleCount, Average, Sum, Minimum, Maximum
})

См. https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html для получения подробной статистики, которую вы можете запросить.

и https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/CloudWatch/Metric.html для использования ruby ​​SDK

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

  1. Перейдите к сервису Cloudwatch на панели инструментов AWS.
  2. Выберите Метрики слева
  3. Выберите ELB в разделе пространств имен AWS.
  4. Выберите по пространству имен, чтобы получить всю информацию о балансировщике нагрузки одновременно, или выберите по балансировщику нагрузки, чтобы сузить отображение метрик.
  5. Выберите код состояния, который вы хотите визуализировать.

Вот как можно получить количество кодов состояния, и это может стать основой лямбда-функции ruby, которая может выполняться каждые 30 дней. Как отправить это самому себе по электронной почте, может быть целым вопросом, но в Интернете есть множество руководств по отправке электронной почты с помощью Ruby — начните с них.

person Tom Harvey    schedule 15.06.2020
comment
Привет, Том, спасибо за ответ :), да, это кажется еще одним возможным вариантом, я использую Application Load Balancer перед EC2, не могли бы вы предоставить мне более подробную информацию о том, как мы можем отслеживать и отправлять электронное письмо через это . - person Bala krishna; 16.06.2020
comment
Я обновил свой ответ некоторым примером кода того, как запросить нужную метрику с помощью ruby. Взгляните на некоторые учебные пособия о том, как отправить это по электронной почте. - person Tom Harvey; 16.06.2020