You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Terraform在单个Datadog仪表盘中循环遍历服务器别名

解决Terraform单Datadog仪表板整合多服务器指标的问题

要在单个Datadog仪表板中整合多台服务器的指标,不能在datadog_dashboard资源上使用for_each(这会生成多个独立仪表板),而是要利用Terraform的**动态块(dynamic block)**在仪表板内部循环生成对应服务器的查询和公式配置。

修改后的配置示例

变量定义(保持不变)

variable "africa" {
  type = map(any)
  default = {
    "server1" = {
      alias              = "server1"
      hostname           = "hostname1"
      name               = "query1"
      formula_expression = "query1 * 8"
    }
    "server2" = {
      alias              = "server2"
      hostname           = "hostname2"
      name               = "query2"
      formula_expression = "query2 * 8"
    }
    "server3" = {
      alias              = "server3"
      hostname           = "hostname3"
      name               = "query3"
      formula_expression = "query3 * 8"
    }
  }
}

仪表板资源配置(关键修改)

resource "datadog_dashboard" "global_dashboards_africa" {
  title       = "Terraform - Africa"
  description = "Dashboards for Global"
  layout_type = "ordered"

  widget {
    group_definition {
      title       = "Quick Overview"
      show_title  = true
      layout_type = "ordered"

      widget {
        timeseries_definition {
          title          = "Traffic"
          title_size     = "16"
          title_align    = "left"
          show_legend    = false
          legend_layout  = "auto"
          legend_columns = ["avg", "min", "max", "value", "sum"]

          # 动态生成每个服务器的request块
          dynamic "request" {
            for_each = var.africa
            content {
              formula {
                alias              = request.value.alias
                formula_expression = request.value.formula_expression
              }

              query {
                metric_query {
                  name  = request.value.name
                  query = "max:system.net.bytes_sent{device:bond0,host:${request.value.hostname}}"
                }
              }

              style {
                palette    = "warm"
                line_type  = "solid"
                line_width = "normal"
              }

              display_type = "area"
            }
          }

          yaxis {
            include_zero = true
            scale        = "linear"
            min          = "auto"
            max          = "auto"
          }
        }

        widget_layout {
          x      = 0
          y      = 5
          width  = 12
          height = 5
        }
      }
    }
  }
}

关键说明

  1. 动态块的作用:dynamic "request" 会遍历var.africa中的每台服务器,为每台服务器生成一个独立的request块,包含对应的查询、公式和样式配置,所有这些都会被整合到同一个时间序列图表中。
  2. 变量引用方式:在动态块内部,通过request.value访问当前迭代的服务器对象属性(如request.value.hostname),确保每个查询对应正确的服务器主机名。
  3. 避免资源级循环:不在datadog_dashboard资源上使用for_each,保证只生成一个仪表板实例,所有服务器的指标都集中在这个仪表板的指定图表里。

内容的提问来源于stack exchange,提问作者cloud110

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:10:20