使用 Terraform 的 CloudWatch 指标警报
Posted
技术标签:
【中文标题】使用 Terraform 的 CloudWatch 指标警报【英文标题】:CloudWatch metric alarm using Terraform 【发布时间】:2019-12-26 20:08:31 【问题描述】:由于某种原因尝试使用 Terraform 设置一些 CloudWatch 警报时,它找不到指标并且警报仍然卡在数据不足的情况下。 Terraform 不会输出任何错误,如果我在 AWS 中手动搜索,我可以找到指标。我在这里错过了什么?
一个简单的健康主机警报指向目标组的例子:
#healthy host alarm
resource "aws_cloudwatch_metric_alarm" "health"
alarm_name = "$var.tag_app_healthy_host"
comparison_operator = "LessThanThreshold"
evaluation_periods = "1"
metric_name = "HealthyHostCount"
namespace = "AWS/ApplicationELB"
period = "60"
statistic = "Maximum"
threshold = "1"
alarm_description = "Healthy host count for EC2 machine"
alarm_actions = ["$data.aws_sns_topic.blabla.arn"]
ok_actions = ["$data.aws_sns_topic.blabla.arn"]
dimensions =
TargetGroup = "$aws_lb_target_group.alb_target.arn_suffix"
当我选择另一个资源(EC2、RDS)和另一个指标时,我会收到指向正确指标的 CloudWatch 警报,并且不会因为数据不足而卡住。
【问题讨论】:
【参考方案1】:HealthyHostCount
metric 仅在TargetGroup, LoadBalancer
维度或TargetGroup, AvailabilityZone, LoadBalancer
下可用,因此您至少还需要添加LoadBalancer
维度才能访问此指标。
所以你的 Terraform 代码应该是:
#healthy host alarm
resource "aws_cloudwatch_metric_alarm" "health"
alarm_name = "$var.tag_app_healthy_host"
comparison_operator = "LessThanThreshold"
evaluation_periods = "1"
metric_name = "HealthyHostCount"
namespace = "AWS/ApplicationELB"
period = "60"
statistic = "Maximum"
threshold = "1"
alarm_description = "Healthy host count for EC2 machine"
alarm_actions = ["$data.aws_sns_topic.blabla.arn"]
ok_actions = ["$data.aws_sns_topic.blabla.arn"]
dimensions =
LoadBalancer = "$aws_lb.example.arn_suffix"
TargetGroup = "$aws_lb_target_group.alb_target.arn_suffix"
【讨论】:
你怎么知道哪些指标需要哪些维度? 这真的应该作为一个单独的问题来问。以上是关于使用 Terraform 的 CloudWatch 指标警报的主要内容,如果未能解决你的问题,请参考以下文章
使用 Terraform 将 AWS Lambda 日志写入 CloudWatch 日志组
Terraform:将 SEARCH 表达式与 CloudWatch 警报结合使用
Amazon CloudWatch SubscriptionFilter 弹性搜索 Terraform 支持
尝试通过 terraform 设置 cloudwatch 日志过滤器时出现 InvalidParameterException