0

我正在尝试systemCpuUtilizaiton通过 Terraform 为每个 RabbitMQ 代理节点创建 AWS Cloudwatch 警报。要创建AWS Cloudwatch 警报,我需要提供AWS 文档中提到的维度(节点名称和代理) 。

因此,我希望从 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

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

4

3 回答 3

2

最近,AWS 开始发布每个 Broker 的 CPU/Mem/Disk 指标

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

在此处输入图像描述

于 2022-03-02T20:18:09.410 回答
0

我已将上述问题提交给 AWS 支持,以下是解决方案:

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

因此,无法通过 API 或 SDK获取 Rabbit MQ 代理节点名称。因此,不可能直接在 Rabbit MQ 代理节点上创建 cloudwatch 警报systemCpuUtilizaiton因为节点名称是创建警报所需的维度

有两种替代解决方案

  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 警报管理器在此矩阵之上创建警报。 在此处输入图像描述

于 2021-07-22T11:04:58.673 回答
0

用于 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"
  }
}
于 2021-07-14T01:44:01.997 回答