到 CloudWatch 的 Vault 遥测

Vault Telemetry to CloudWatch

我正在尝试通过 Cloudwatch Agent 的 StatsD 接口将 Vault 遥测数据传输到 CW 指标中,但是,仪表指标值带有基于实例 ID 和标签的前缀,这使得指标无法成为目标IaC 管理 Cloudwatch 警报。

例如,vault.core.unsealed 遥测事件作为 vault_CLOUDWATCH_AGENT_HOSTNAME_core_unsealed_INSTANCE_NAME 而不是我预期的 vault_core_unsealed

使用 Terraform 管理这些指标的警报是不可能的,因为它们将具有动态名称,并且基于我们无法控制的集群中被确定为当前领导者的任何实例。

在 Vault 配置 HCL 文件中,我有:

telemetry {
  statsd_address        = "127.0.0.1:8125"
  disable_hostname      = true
  enable_hostname_label = true
}

连同主机名配置值的其他几种组合,它们似乎都产生相同的输出。在决定将 Cloudwatch 与 StatsD 一起使用以捕获遥测数据时,是否有我遗漏的解决方案或只是一个缺陷?

似乎已经通过一些 non-obvious 配置更改使仪表值名称达到可用点。

  1. 在 Vault 遥测节中,仅添加带有 StatsD 地址的 disable_hostname = true 属性。另外添加标签只会将主机名移动到指标名称中的不同位置。

  2. Cloudwatch 代理配置有一个选项可以省略主机名,可以通过附加设置新配置来切换:

{
  "agent": {
    "omit_hostname": true
  }
}

这将阻止 CloudWatch 代理将其自己的标签和后缀添加到计量指标名称并清除一些生成的命名

  1. (可选) 调整CloudWatch代理配置中附加的维度。默认情况下,代理将附加实例 ID、映像 ID、自动缩放组名称和实例类型。这可能是您想要保留的内容,但是,如果您想执行类似 IaC 创建的指标警报之类的操作,您可能需要删除一些维度以使指标名称可定位(能够通过直接匹配找到)。如果您想调整自动附加到传入遥测的维度,可以将以下内容添加到将替换默认 CloudWatch 代理配置的自定义配置中。
{
  "metrics": {
    "append_dimensions": {
      "AutoScalingGroupName": "${aws:AutoScalingGroupName}"
    }
  }
}

只要您知道实例所针对的自动缩放组的名称,来自 Vault 遥测的计量指标名称将被命名得模棱两可,足以将它们作为 IaC 的目标。