1

我正在向日志管道添加警报/监控。具体来说,我正在创建 CW 警报,这些警报会在 Auto Scaling 组中的 EC2 实例的磁盘/内存利用率超过 50% 时触发。ASG 在“workers”模块目录中创建,并输出伸缩组名称以供在“cloudwatch”模块目录中创建警报时参考。

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

  • 在警报创建中是否必须引用指标的所有维度?
  • 如果是这样,当 TF 文件中仅定义目标组/缩放组时,如何引用 InstanceID?

在“警报”父模块中:

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]
}

在“工人”父模块中:

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"
  }
}
4

1 回答 1

1

在警报创建中是否必须引用指标的所有维度?

是的。

如果是这样,当 TF 文件中仅定义目标组/缩放组时,如何引用 InstanceID?

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

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

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

于 2021-05-08T02:29:44.780 回答