Cloudwatch 指标过滤器看到事件,但没有触发警报
Posted
技术标签:
【中文标题】Cloudwatch 指标过滤器看到事件,但没有触发警报【英文标题】:Cloudwatch metric filter sees event, but alarm doesn't fire 【发布时间】:2021-10-22 01:42:48 【问题描述】:我已设置 Cloudwatch Metric 来监视日志文件:
resource "aws_cloudwatch_log_metric_filter" "log_errors"
name = "$local.fullname-log-errors"
log_group_name = "/aws/lambda/$local.fullname"
pattern = " $._logLevel = \"error\" "
metric_transformation
name = "$local.fullname-error-count"
namespace = "MyApp"
value = "1"
我可以看到该指标正在运行 - 请注意下面 13:15 的点(我手动创建了一个日志条目进行测试):
如果指标在一分钟内报告 1 个或多个事件,则会触发警报:
resource "aws_cloudwatch_metric_alarm" "log_errors_alarm"
alarm_name = "$local.fullname-log-errors"
alarm_description = "log.error() count for MyApp lambda $local.fullname"
metric_name = "$local.fullname-error-count"
threshold = "0"
statistic = "Sum"
unit = "Count"
comparison_operator = "GreaterThanThreshold"
datapoints_to_alarm = "1"
evaluation_periods = "1"
period = "60"
namespace = "MyApp"
treat_missing_data = "notBreaching"
alarm_actions = [data.aws_ssm_parameter.sns_topic_arn.value]
ok_actions = [data.aws_ssm_parameter.sns_topic_arn.value]
但尽管指标有一个事件(如上所述),但警报永远不会触发:
我不确定如何调试它,因为所有 AWS 资源都已成功创建,我手动创建的错误将传递给指标,并且我在其他 lambdas 中成功使用了非常相似的警报配置,它会抛出警报。
为什么我的指标有效但我的警报没有警报?
【问题讨论】:
【参考方案1】:我会把钱放在 metric_alarm
和 metric_filter
之间不一致的单元上。
您将metric_alarm
上的unit
设置为Count
,但您没有在metric_filter
的metric_transformation
上设置unit
,因此metric_transformation
将默认到None
。
尝试将警报中的unit
设置为None
或完全删除unit
。
【讨论】:
谢谢@Dejan,这正是问题的原因——删除unit
(所以值是一致的)会使警报触发。抱歉等待 - 我正在度假,无法测试它。我已经稍微编辑了您的答案以使其更清楚,希望没问题。【参考方案2】:
我有一些非常相似的设置正在运行并且会尝试这个。更新:仔细观察,我相信你应该使用comparison_operator = "GreaterThanOrEqualToThreshold"
而不是comparison_operator = "GreaterThanThreshold"
metric_transformation
name = "$local.fullname-error-count"
namespace = "MyApp"
value = "1"
default_value = "0"
和
resource "aws_cloudwatch_metric_alarm" "log_errors_alarm"
alarm_name = "$local.fullname-log-errors"
alarm_description = "log.error() count for MyApp lambda $local.fullname"
metric_name = "$local.fullname-error-count"
threshold = "1"
statistic = "Sum"
#unit = "Count"
comparison_operator = "GreaterThanOrEqualToThreshold"
#datapoints_to_alarm = "1"
evaluation_periods = "1"
period = "60"
namespace = "MyApp"
treat_missing_data = "notBreaching"
alarm_actions = [data.aws_ssm_parameter.sns_topic_arn.value]
ok_actions = [data.aws_ssm_parameter.sns_topic_arn.value]
unit
和 datapoint_to_alarm
都是可选参数。尝试排除那些。我假设cloudwatch_log_metric_filter
和aws_cloudwatch_metric_alarm
两种资源都使用相同的局部变量。由于您没有发布所有 cloudwatch_log_metric_filter
参数,我想您的 pattern = ""
应该是这样的。
【讨论】:
但是threshold
在我的配置中是0
- GreaterThanThreshold
应该意味着任何高于 0 的值都会触发警报。
有效点。在这种情况下尝试将阈值设置为 1,仅用于比较目的(如果有的话)。我在示例中更新了阈值以正确反映这一点。以上是关于Cloudwatch 指标过滤器看到事件,但没有触发警报的主要内容,如果未能解决你的问题,请参考以下文章
AWS CloudWatch 中的指标、日志和事件之间有啥区别? [关闭]
用于检查 JSON 密钥的 CloudWatch 指标筛选器是不是存在
如何将 AWS Cloudwatch 资源指标数据点保存在其他数据库中