【问题标题】:Alerts based on Application error logs from AWS Cloudwatch log groups基于来自 AWS Cloudwatch 日志组的应用程序错误日志的警报
【发布时间】:2020-06-15 10:57:17
【问题描述】:

我有一个在 AWS EC2 中运行的 Ruby on Rails 应用程序,它将所有应用程序日志推送到 cloudwatchlog 组。 现在的任务是每天从 cloudwatch 日志中获取警报,报告一天产生了多少错误代码。

示例:

如果我的应用程序给出 10 个“500 内部服务器错误”、5 个“403 禁止错误”。 我应该收到一封来自 AWS 服务的电子邮件,“您的应用程序已生成 10 - 500 个错误代码 5 - 403 错误代码。”

我认为我们可以使用 lambda 函数和 AWS SNS 服务来实现这一点,但不知道如何编写我的 lambda 函数以这种方式工作。

我需要一个 lambda 函数代码来存储错误代码计数, 捕获数据后,我可以每天在特定时间运行 lambda 函数来发送电子邮件。

请帮忙。

在此先感谢 :)

【问题讨论】:

  • 我可以使用 lambda 函数触发 SNS 获取电子邮件,但是如何从日志中捕获错误代码。实现这一点的 lambda 函数代码将非常有帮助

标签: alert amazon-cloudwatch amazon-sns error-log


【解决方案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

请求这些指标可能比解析应用程序日志文件和计算结果更容易。

要使用 ruby​​ 的 aws-sdk 请求这些统计信息,下面的代码应该可以帮助您完成大部分工作。您需要根据自己的需要和设置对其进行调整,因此请参阅我在答案底部链接的文档:

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. 在您的 AWS 控制面板中转到 Cloudwatch 服务
  2. 从左侧选择指标
  3. 从 AWS 命名空间部分选择 ELB
  4. 按命名空间选择以同时获取所有负载均衡器信息,或按负载均衡器选择以缩小您的指标显示范围。
  5. 选择要显示的状态代码。

这是获取状态码计数的方法,并且可以构成每 30 天运行一次的 ruby​​ lambda 函数的基础。然后如何通过电子邮件将其发送给自己本身可能是一个完整的问题,但是网上有很多关于如何使用 Ruby 发送电子邮件的教程 - 从那里开始。

【讨论】:

  • 您好 Tom,感谢您的回答 :),是的,这似乎是另一种可能的选择,我正在使用 EC2 前面的 Application Load Balancer,您能否提供更多关于我们如何使用的详细信息可以通过它跟踪和发送电子邮件。
  • 我已经用一些示例代码更新了我的答案,以了解如何使用 ruby​​ 请求您想要的指标。查看一些教程,了解如何将其作为电子邮件发送。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-01
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多