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

Terraform创建Databricks集群后配置Datadog日志推送及问题咨询

使用Terraform为Databricks集群配置Datadog日志推送

问题描述

我通过Terraform创建Databricks集群,想要在集群(主/工作节点)创建时自动配置Datadog,将日志推送至Datadog平台。目前遇到两个问题:

  1. 初始化脚本中部分标记为?的变量不知道如何获取并传递;
  2. Datadog官网提供的是Python/Notebook版本的安装脚本,需要适配为Terraform中可用的bash初始化脚本。

现有代码示例:

resource "databricks_cluster" "cluster" {
  cluster_name = "abc"
  # 其他集群配置...
}
resource "databricks_global_init_script" "init-datadog" {
  source = data.template_file.global_init.rendered
  name = "install dd script"
}

data "template_file" "global_init" {
  template = "${file("${path.module}/script/datadog-install-driver.worker.sh")}"
  vars = {
    DD_API_KEY = "xxx"
    DD_ENV = "dev"
    DB_IS_DRIVER = true
    DB_DRIVER_IP = ? 
    DB_CLUSTER_ID = ?
    SPARK_LOCAL_IP = ?
    DB_DRIVER_PORT = ?
    hostile = ?
    DB_CLUSTER_NAME = ?
  }
}

解决方案

一、未知变量的获取与优化

大部分变量无需从Terraform硬编码传递,可通过集群节点自身环境或Terraform资源属性获取,优化后的变量配置如下:

data "template_file" "global_init" {
  template = "${file("${path.module}/script/datadog-install-driver.worker.sh")}"
  vars = {
    DD_API_KEY     = var.datadog_api_key  # 建议用Terraform变量/密钥服务管理密钥
    DD_ENV         = var.datadog_env
    DB_CLUSTER_ID  = databricks_cluster.cluster.id
    DB_CLUSTER_NAME = databricks_cluster.cluster.cluster_name
  }
}

各原变量的处理方式:

  • DB_DRIVER_IP:无需传递,驱动节点IP可在脚本中通过节点本地IP关联Spark默认端口,或通过集群内部DNS获取
  • DB_CLUSTER_ID:直接引用Terraform创建的集群资源ID databricks_cluster.cluster.id
  • SPARK_LOCAL_IP:在bash脚本中通过hostname -i或云实例元数据接口(如AWS的curl -s http://169.254.169.254/latest/meta-data/local-ipv4)获取,每个节点的本地IP唯一,无需提前传递
  • DB_DRIVER_PORT:Spark驱动默认端口为4040,若集群自定义了端口,可在脚本中读取Spark配置或直接硬编码默认值
  • hostile:应为拼写错误(hostname),在脚本中用hostname命令直接获取
  • DB_IS_DRIVER:Databricks会自动为节点设置环境变量DB_IS_DRIVER,驱动节点值为true,工作节点为false,脚本中直接读取该环境变量即可
  • DB_CLUSTER_NAME:引用Terraform集群资源的cluster_name属性 databricks_cluster.cluster.cluster_name

二、Datadog安装与日志配置的Bash脚本

以下是适配Databricks节点的bash初始化脚本,包含Agent安装、Spark集成、日志收集配置:

#!/bin/bash
set -e

# 1. 安装Datadog Agent
DD_API_KEY=${DD_API_KEY} DD_SITE="datadoghq.com" bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script.sh)"

# 2. 配置Agent基础信息(环境、标签)
sed -i "s/# env:.*/env: ${DD_ENV}/" /etc/datadog-agent/datadog.yaml
sed -i "s/# tags:.*/tags: [\"cluster_id:${DB_CLUSTER_ID}\", \"cluster_name:${DB_CLUSTER_NAME}\"]/" /etc/datadog-agent/datadog.yaml

# 3. 获取节点本地IP与主机名
SPARK_LOCAL_IP=$(hostname -i)
NODE_HOSTNAME=$(hostname)
NODE_TYPE=${DB_IS_DRIVER:-worker}  # 自动识别节点类型,默认worker

# 4. 配置Spark集成(监控Spark指标)
mkdir -p /etc/datadog-agent/conf.d/spark.d
cat > /etc/datadog-agent/conf.d/spark.d/conf.yaml << EOF
init_config:

instances:
  - spark_url: http://${SPARK_LOCAL_IP}:4040
    cluster_name: ${DB_CLUSTER_NAME}
    cluster_id: ${DB_CLUSTER_ID}
    node_type: ${NODE_TYPE}
EOF

# 5. 配置Databricks日志收集
mkdir -p /etc/datadog-agent/conf.d/databricks.d
cat > /etc/datadog-agent/conf.d/databricks.d/conf.yaml << EOF
logs:
  # 收集Databricks节点日志
  - type: file
    path: /databricks/logs/*/*.log
    service: databricks
    source: databricks
    sourcecategory: log_collection
    tags:
      - cluster_id:${DB_CLUSTER_ID}
      - cluster_name:${DB_CLUSTER_NAME}
      - node_type:${NODE_TYPE}
  # 收集Spark作业日志(可选)
  - type: file
    path: /dbfs/logs/*/*.log
    service: spark-jobs
    source: spark
    sourcecategory: log_collection
    tags:
      - cluster_id:${DB_CLUSTER_ID}
      - cluster_name:${DB_CLUSTER_NAME}
EOF

# 6. 重启Datadog Agent使配置生效
systemctl restart datadog-agent

注意事项

  • 确保Databricks集群节点有公网权限(或通过VPC端点访问Datadog资源),否则无法下载Agent安装包
  • 建议将DD_API_KEY存储在Terraform变量或密钥管理服务(如AWS Secrets Manager)中,避免硬编码
  • 若使用Datadog国内站点(datadoghq.cn),需修改脚本中的DD_SITE为datadoghq.cn

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:55:24