Terraform:将 SEARCH 表达式与 CloudWatch 警报结合使用
Posted
技术标签:
【中文标题】Terraform:将 SEARCH 表达式与 CloudWatch 警报结合使用【英文标题】:Terraform: Using SEARCH expressions with CloudWatch Alarms 【发布时间】:2021-01-10 16:25:33 【问题描述】:我查看了this 的问题,但没有太大帮助,所以就在这里......
我有一堆 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 不能为空”这句话似乎有问题,但是 according to the Terraform documentation 对此,当提供 metric_query
时,您可能没有指定期间...
我是否有一种具体的方法来限制每个环境(名称过滤器)过滤我的 Lambda 指标,而不是在整个账户中使用 Lambda 函数?
【问题讨论】:
如果使用简单(但有效)的数学表达式,它是否适用成功? 请您编辑您的问题以包含完整的错误输出吗?您是否尝试过导入您在控制台中创建的警报并查看 Terraform 想要在计划中将其更改为什么? 【参考方案1】:发生这种情况是因为 AWS Cloudwatch 不支持 SEARCH 指标警报。
https://github.com/terraform-providers/terraform-provider-aws/issues/11011 Creating a CloudWatch alarm based on a search expression【讨论】:
以上是关于Terraform:将 SEARCH 表达式与 CloudWatch 警报结合使用的主要内容,如果未能解决你的问题,请参考以下文章
将 azurerm_application_gateway 与 AKS 与 terraform 集成
C++11之常量表达式(const与constexpr的区别)