我已经查看了这个并没有太大帮助的问题,所以这里......
我有一堆 Lambda 函数,我想监控它们并在出现问题时触发 CloudWatch 警报。Lambda 函数实际上以环境名称为前缀,即env-1-function-1
,env-1-function-2
等env-2-function-1
。
这些环境是独立的,即 env1 的 cloudwatch 警报设置不应该与 env2 有任何关系。所以为了实现这一点,我开始研究SEARCH表达式。
这是我的警报:
resource "aws_cloudwatch_metric_alarm" "lambda_average_duration" {
alarm_name = "${local.env_prefix}-alarm-lambda_average_duration"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = "1"
threshold = "40000"
alarm_description = "This alarm monitors lambda average duration and triggers if the average of durations rise above 40 seconds."
alarm_actions = [aws_sns_topic.alarms_topic.arn]
metric_query {
id = "e1"
expression = "SEARCH('{AWS/Lambda,FunctionName} MetricName=\"Duration\" FunctionName=${local.env_prefix}', 'Maximum', 60000)"
label = "Function Name filter"
return_data = true
}
}
env_prefix
会在哪里env-1
。在绘制指标时,这在 AWS 控制台中工作得很好。
现在,当我运行 Terraform 时,“更新指标警报失败:ValidationError:Period 不能为空”这句话似乎有问题,但是根据关于此的 Terraform 文档,在提供时metric_query
您可能没有指定期间...
我是否有一种具体的方法来限制每个环境(名称过滤器)过滤我的 Lambda 指标,而不是在整个账户中使用 Lambda 函数?