CW 警报维度中的引用实例 ID - Terraform

Reference Instance ID in CW Alarm Dimension - Terraform

我正在将 alarms/monitoring 添加到日志记录管道。具体来说,我正在为 Auto Scaling 组中的 EC2 实例创建 50+% disk/memory 利用率时触发的 CW 警报。 ASG在“workers”模块目录下创建,并输出伸缩组名称,供“cloudwatch”模块目录下发生告警创建时参考。

我很难理解有关创建此警报的一些事情:

在“警报”父模块中:

resource "aws_cloudwatch_metric_alarm" "pipeline_DiskUtilization" {
  alarm_name          = "pipeline-disk-alarm"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  evaluation_periods  = "5"
  metric_name         = "disk_used_percent"
  namespace           = "CWAgent"
  period              = "60"
  statistic           = "Average"
  threshold           = "50"

  dimensions = {
    AutoScalingGroupName = var.scaling_name
  }

  alarm_description = "This metric monitors ec2 disk utilization"
  alarm_actions     = [var.scaling_group]
}

在“workers”父模块中:

resource "aws_autoscaling_group" "pipeline-scaling-group" {
  name                = "pipeline-worker-asg"
  vpc_zone_identifier = var.operating_subnets
  desired_capacity   = 2
  max_size           = 4
  min_size           = 2

  target_group_arns  = [var.target_group]
  launch_template {
    id      = aws_launch_template.pipeline-worker-launch-template.id
    version = "$Latest"
  }
}

do all dimensions of a metric have to be referenced in alarm creation?

是。

and, if so, how do I reference InstanceID when only target group/scaling groups are defined in the TF files?

不能从 TF 做到这一点(很容易)。一旦您使用 ASG 来管理您的实例,它们就不受您的控制,因此您无法直接获取它们的 ID。你也不应该这样做,即使你可以。 ASG 中的实例应被视为组(因此,Auto Scaling 组名称中有“组”),而不是单个实体。

即使您可以(轻松)做到这一点,您将如何管理这些警报? ASG 可以随时替换您的实例,一段时间后会留下大量 失效警报,而新实例则没有任何警报。

管理此问题的正确方法是通过 CloudWatch 事件规则,在您的 TF 之外。您必须通过 ASG 检测实例的添加和终止。任何此类操作都会触发 lambda 函数,该函数会 add/remove 动态响应 ASG 事件发出警报。