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

Databricks初始化脚本安装Datadog失败,SSH与终端IP不符求解

问题描述

按照Databricks相关指南,通过集群级初始化脚本安装配置Datadog Agent,但实际负责安装配置的子脚本未启动。

初始化脚本内容

#!/bin/bash

echo "Running on the driver? $DB_IS_DRIVER"
echo "Driver ip: $DB_DRIVER_IP"

cat <<EOF >> /tmp/start_datadog.sh
#!/bin/bash

if [ \$DB_IS_DRIVER = "TRUE" ]; then
  echo "On the driver. Installing Datadog ..."
  
  # install the Datadog agent
  DD_API_KEY=<MY_API_KEY> bash -c "\$(curl -L https://raw.githubusercontent.com/DataDog/datadog-agent/master/cmd/agent/install_script.sh)"
  
  # WAITING UNTIL MASTER PARAMS ARE LOADED, THEN GRABBING IP AND PORT
  while [ -z \$gotparams ]; do
    if [ -e "/tmp/driver-env.sh" ]; then
      DB_DRIVER_PORT=\$(grep -i "CONF_UI_PORT" /tmp/driver-env.sh | cut -d'=' -f2)
      gotparams=TRUE
    fi
    sleep 2
  done

  current=\$(hostname -I | xargs)  
  
  # WRITING SPARK CONFIG FILE FOR STREAMING SPARK METRICS
  echo "init_config:
instances:
    - resourcemanager_uri: http://\$DB_DRIVER_IP:\$DB_DRIVER_PORT
      spark_cluster_mode: spark_driver_mode
      cluster_name: \$current" > /etc/datadog-agent/conf.d/spark.yaml

  # RESTARTING AGENT
  sudo service datadog-agent restart

fi
EOF

# CLEANING UP
if [ \$DB_IS_DRIVER = "TRUE" ]; then
  chmod a+x /tmp/start_datadog.sh
  /tmp/start_datadog.sh >> /tmp/datadog_start.log 2>&1 & disown
fi

现象与日志

  1. Databricks控制台集群事件日志显示初始化脚本已完成,但Web Terminal中执行脚本时,子脚本未启动:
root@1122-180908-gh1ahrr7-10-4-32-233:/databricks/driver# sh -x /dbfs/init-scripts/datadog-install-driver-only-v2.sh
+ echo Running on the driver? 
Running on the driver? 
+ echo Driver ip: 
Driver ip: 
+ cat
+ [ $DB_IS_DRIVER = TRUE ]
root@1122-180908-gh1ahrr7-10-4-32-233:/databricks/driver# 
  1. 集群日志显示初始化阶段DB_IS_DRIVER和DB_DRIVER_IP变量是有值的:
root@1122-180908-gh1ahrr7-10-4-39-90:/databricks/driver# cat /dbfs/cluster-logs/1122-180908-gh1ahrr7/init_scripts/1122-180908-gh1ahrr7_10_4_39_90/20230109_212735_00_datadog-install-driver-only-v2.sh.stdout.log
Running on the driver? TRUE
Driver ip: 10.4.39.90
root@1122-180908-gh1ahrr7-10-4-39-90:/databricks/driver# 
  1. SSH配置中的Driver hostname IP(10.4.58.10)与Web Terminal登录的IP(10.4.39.90)不一致。

疑问

  • SSH IP与Web Terminal登录IP为何不同?
  • 这是初始化脚本失效的原因吗?
  • 解决方案是什么?

解答

1. SSH IP与Web Terminal IP差异原因

Databricks驱动节点存在两个网络层面的IP:

  • 容器内网IP:Web Terminal直接连接驱动节点的容器内部,显示的是容器所属内网IP(如10.4.39.90);
  • 主机实例IP:SSH连接的是驱动节点所在的云主机实例IP(如10.4.58.10),用于外部SSH访问。
    两者属于不同网络层级,差异是正常现象,不是脚本失效的原因。

2. 子脚本未启动的核心原因

从日志分析,手动执行脚本时DB_IS_DRIVER为空,是因为该变量仅在集群初始化阶段由Databricks自动注入,手动执行时无此环境变量。而初始化阶段子脚本未运行的实际原因:

  • 子脚本通过disown后台运行,集群初始化阶段的资源限制、环境未就绪可能导致脚本被终止;
  • 子脚本的日志输出到驱动节点本地/tmp目录,容器重启或会话结束后日志丢失,无法排查执行失败细节;
  • 可能存在DD_API_KEY未替换为有效值、网络无法访问Datadog安装地址等问题。

3. 解决方案

方案一:简化脚本,去掉子脚本逻辑

直接在主脚本中同步执行安装配置,将日志输出到分布式存储/dbfs避免丢失:

#!/bin/bash

echo "Running on the driver? $DB_IS_DRIVER"
echo "Driver ip: $DB_DRIVER_IP"

if [ "$DB_IS_DRIVER" = "TRUE" ]; then
  echo "On the driver. Installing Datadog ..." >> /dbfs/datadog_install.log 2>&1
  
  # 替换为你的实际API密钥
  DD_API_KEY="你的有效API密钥" bash -c "$(curl -L https://raw.githubusercontent.com/DataDog/datadog-agent/master/cmd/agent/install_script.sh)" >> /dbfs/datadog_install.log 2>&1
  
  # 等待驱动环境文件生成
  while [ ! -e "/tmp/driver-env.sh" ]; do
    sleep 2
    echo "Waiting for driver-env.sh..." >> /dbfs/datadog_install.log 2>&1
  done
  
  DB_DRIVER_PORT=$(grep -i "CONF_UI_PORT" /tmp/driver-env.sh | cut -d'=' -f2)
  current=$(hostname -I | xargs)  
  
  # 写入Spark配置文件
  cat <<CONF > /etc/datadog-agent/conf.d/spark.yaml
init_config:
instances:
    - resourcemanager_uri: http://$DB_DRIVER_IP:$DB_DRIVER_PORT
      spark_cluster_mode: spark_driver_mode
      cluster_name: $current
CONF
  
  # 重启Agent
  sudo service datadog-agent restart >> /dbfs/datadog_install.log 2>&1
  echo "Datadog Agent setup completed" >> /dbfs/datadog_install.log 2>&1
fi
  • 去掉子脚本和后台运行逻辑,确保初始化阶段同步执行,便于排查错误;
  • 日志写入/dbfs,可通过Databricks笔记本随时查看;
  • 给环境变量判断添加引号,避免空值导致的条件判断失败。

方案二:排查原脚本的后台执行问题

若坚持使用子脚本,需做以下调整:

  1. 在子脚本开头添加调试模式,并将日志输出到/dbfs:
    cat <<EOF >> /tmp/start_datadog.sh
    #!/bin/bash
    set -x
    exec >> /dbfs/datadog_subscript.log 2>&1
    # 原脚本逻辑...
    EOF
    
  2. 检查集群网络策略,确保驱动节点可访问Datadog的安装脚本地址和API端点;
  3. 确认DD_API_KEY已替换为有效密钥,无占位符残留。

额外建议

  • 优先使用Databricks官方提供的Datadog集成,比自定义初始化脚本更稳定;
  • 初始化完成后,可在Databricks笔记本中通过dbutils.fs.head("/dbfs/datadog_install.log")查看日志,快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:05:32