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
现象与日志
- 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#
- 集群日志显示初始化阶段
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#
- SSH配置中的
Driver hostnameIP(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笔记本随时查看; - 给环境变量判断添加引号,避免空值导致的条件判断失败。
方案二:排查原脚本的后台执行问题
若坚持使用子脚本,需做以下调整:
- 在子脚本开头添加调试模式,并将日志输出到
/dbfs:cat <<EOF >> /tmp/start_datadog.sh #!/bin/bash set -x exec >> /dbfs/datadog_subscript.log 2>&1 # 原脚本逻辑... EOF - 检查集群网络策略,确保驱动节点可访问Datadog的安装脚本地址和API端点;
- 确认
DD_API_KEY已替换为有效密钥,无占位符残留。
额外建议
- 优先使用Databricks官方提供的Datadog集成,比自定义初始化脚本更稳定;
- 初始化完成后,可在Databricks笔记本中通过
dbutils.fs.head("/dbfs/datadog_install.log")查看日志,快速定位问题。
内容的提问来源于stack exchange,提问作者hyperwiser
相关产品推荐
相关产品推荐

