如何使用 API、CLI 或 Terraform 为 RabbitMQ 代理获取 AmazonMQ 节点

How to fetch AmazonMQ nodes for RabbitMQ brokers using API, CLI or Terraform

我正在尝试为每个 RabbitMQ 代理的 systemCpuUtilizaiton 创建 AWS Cloudwatch 警报 通过 Terraform 的节点。创建 AWS Cloudwatch alarm, I need to provide dimensions (node-name and broker) as mentioned in AWS docs.

因此,我希望从 AWS(通过 CLI、API 或 Terraform)获取 rabbitMQ 代理节点名称

请注意:我可以在 AWS Cloudwatch 控制台中看到每个代理节点的矩阵,但不能从 API、SDK 或 CLI 中看到。

我浏览了以下链接,但没有得到任何有用的东西 https://awscli.amazonaws.com/v2/documentation/api/latest/reference/mq/index.html#cli-aws-mq https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/mq_broker

如果我遗漏了什么,请告诉我。

用于 cloudwatch 维度的 AWS MQ 节点名称似乎没有通过 AWS API 公开,但节点名称可通过 IP 地址预测。我相信这可以用来构造有效的警报节点名称。

data "aws_region" "current" {}

resource "aws_mq_broker" "example" {
  ...
}

resource "aws_cloudwatch_metric_alarm" "bat" {
  for_each = toset([
    for instance in aws_mq_broker.example.instances : instance.ip_address
  ])

  alarm_name          = "terraform-test-foobar5"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  evaluation_periods  = "2"
  metric_name         = "SystemCpuUtilization"
  namespace           = "AWS/AmazonMQ"
  period              = "120"
  statistic           = "Average"
  threshold           = "80"

  dimensions = {
    Broker = aws_mq_broker.example.name
    Node   = "rabbitmq@ip-${replace(each.value, ".", "-")}.${data.aws_region.current.name}.compute.internal"
  }
}

我已将上述问题反馈给AWS支持,解决方法如下:

首先来自 AWS 团队的回应,AmazonMQ-RabbitMQ 代理节点由 AWS 内部管理,目前未通过 API 或 SDK 公开。

因此,无法通过 API 或 SDK 获取 Rabbit MQ 代理节点名称因此无法在 Rabbit MQ 代理节点的 systemCpuUtilizaitonas node name are required dimensions for creating the alert.

上直接创建 cloudwatch 警报

有两种替代方案

  1. 查询 RabbitMQ API 以获取节点名称
  2. 使用prometheus/cloudwatch-exporter,从节点名称可用的云监视中获取矩阵详细信息。

我已经使用了第二种方法,在值文件下面来获取我们感兴趣的矩阵

prometheus-cloudwatch-exporter:
    namespace: monitoring
    enabled: true
    override:
      metrics:
        alb: false
        rds: false
        # ... based on requirement
      alerts:
        ec2: false # based on requirement
      additionalMetrics: |-
        # below configuration will fetch the martics,
        # containing Rabbit MQ broker node names
        - aws_namespace: AWS/AmazonMQ
          aws_metric_name: SystemCpuUtilization
          aws_dimensions: [Broker, Node]
          aws_statistics: [Average]

如果一切配置正确,您应该可以 aws_amazonmq_system_cpu_utilization_average 在 prometheus 中使用 martic,如下所示。现在使用 Prometheus Alert manager 在此矩阵之上创建警报。

最近,AWS 开始发布CPU/Mem/Disk metrics per Broker

您应该会在 AmazonMQ/Broker metrics 下看到这些指标。您现在可以在没有节点名称维度的情况下使用 SystemCpuUtilization 指标,然后采用 Maximum 统计数据来获取最过载的节点。您可以根据此指标创建 CloudWatch 警报。