Data Jobs Monitoring は、Databricks のジョブとクラスターを観察し、トラブルシューティングし、コストを最適化するのに役立ちます。
このページは、Databricks クラスターの利用状況メトリクスとログの取り込みに関するドキュメントに限定されています。
概要
Datadog は、いくつかの Databricks の監視機能を提供しています。
Data Jobs Monitoring は、Databricks のジョブやクラスターの監視機能を提供します。データパイプラインのあらゆる場所で問題のあるDatabricks ジョブやワークフローを検出し、失敗したジョブや長時間実行されているジョブを迅速に対応・修正することができ、クラスターリソースを効率的に最適化してコスト削減につなげることが可能です。
Cloud Cost Management は、関連するクラウド支出と共に、すべての Databricks DBU コストを分析するビューを提供します。
Log Management は、Databricks のジョブやクラスターからのログを集約・分析することを可能にします。これらのログは Data Jobs Monitoring の一部として収集することができます。
Infrastructure Monitoring は、Data Jobs Monitoring の機能の一部に特化した限定的なサブセットであり、Databricks クラスターのリソース使用状況や Apache Spark のパフォーマンスメトリクスを可視化する機能を提供します。
セットアップ
インストール
Databricks Spark アプリケーションを Datadog Spark インテグレーションで監視します。適切なクラスターの構成方法に従って、クラスターに Datadog Agent をインストールしてください。その後、Datadog に Spark インテグレーションをインストールし、Databricks Overview ダッシュボードを自動インストールします。
構成
Databricks で Apache Spark クラスターを監視し、システムと Spark のメトリクスを収集するように Sparkインテグレーションを構成します。
以下に説明する各スクリプトは、ニーズに合わせて変更することができます。例えば、
- インスタンスに特定のタグを追加することができます。
- Spark インテグレーション構成を変更することができます。
UI、Databricks CLI を使用して、または Clusters API を呼び出して、クラスタースコープの init スクリプトパスで環境変数を定義または変更することもできます。
DD_API_KEY
を設定することで、クラスターを識別しやすくなります。DD_ENV
を設定することで、クラスターを識別しやすくなります。DD_SITE
をサイトに設定します:
デフォルトは datadoghq.com
です。
セキュリティ上の理由から、環境変数 `DD_API_KEY` を UI で直接プレーンテキストで定義することは推奨されません。代わりに
Databricks シークレットを使用してください。
グローバル init スクリプトの場合
グローバル init スクリプトは、ワークスペースで作成されたすべてのクラスターで実行されます。グローバル init スクリプトは、組織全体のライブラリ構成やセキュリティ画面を強制したい場合に便利です。
グローバル init スクリプトを管理できるのはワークスペース管理者のみです。
グローバル init スクリプトは、シングルユーザーまたはレガシーのアイソレーションなし共有アクセスモードで構成されたクラスターでのみ実行されます。したがって、Databricks はすべての init スクリプトをクラスタースコープで構成し、クラスターポリシーを使用してワークスペース全体で管理することを推奨します。
Databricks UI を使用してグローバル init スクリプトを編集します。
- 以下のスクリプトのいずれかを選択して、Agent をドライバー、またはクラスターのドライバーノードとワーカーノードにインストールします。
- ニーズに合わせてスクリプトを変更します。例えば、タグを追加したり、インテグレーション用に特定の構成を定義することができます。
- 管理者設定に移動し、Global Init Scripts タブをクリックします。
- + Add ボタンをクリックします。
Datadog init script
のようにスクリプトに名前を付けて、** Script** フィールドに貼り付けます。- Enabled トグルをクリックして有効にします。
- Add ボタンをクリックします。
これらの手順の後、いずれの新しいクラスターもスクリプトを自動的に使用するようになります。グローバル init スクリプトの詳細については、Databricks 公式ドキュメントを参照してください。
複数の init スクリプトを定義し、UI でその順番を指定することができます。
ドライバーに Datadog Agent をインストールする
クラスターのドライバーノードに Datadog Agent をインストールします。
スクリプト内で `DD_API_KEY` 変数の値を定義する必要があります。
#!/bin/bash
cat <<EOF > /tmp/start_datadog.sh
#!/bin/bash
date -u +"%Y-%m-%d %H:%M:%S UTC"
echo "Running on the driver? \$DB_IS_DRIVER"
echo "Driver ip: \$DB_DRIVER_IP"
DB_CLUSTER_NAME=$(echo "$DB_CLUSTER_NAME" | sed -e 's/ /_/g' -e "s/'/_/g")
DD_API_KEY='<YOUR_API_KEY>'
if [[ \${DB_IS_DRIVER} = "TRUE" ]]; then
echo "Installing Datadog Agent on the driver..."
# ドライバーのホストタグを構成します
DD_TAGS="environment:\${DD_ENV}","databricks_cluster_id:\${DB_CLUSTER_ID}","databricks_cluster_name:\${DB_CLUSTER_NAME}","spark_host_ip:\${DB_DRIVER_IP}","spark_node:driver","databricks_instance_type:\${DB_INSTANCE_TYPE}","databricks_is_job_cluster:\${DB_IS_JOB_CLUSTER}"
# 最新の Datadog Agent 7 をドライバーノードとワーカーノードにインストールします
DD_INSTALL_ONLY=true \
DD_API_KEY=\$DD_API_KEY \
DD_HOST_TAGS=\$DD_TAGS \
DD_HOSTNAME="\$(hostname | xargs)" \
DD_SITE="\${DD_SITE:-datadoghq.com}" \
bash -c "\$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script_agent7.sh)"
# ポート 6062 での競合を回避
echo "process_config.expvar_port: 6063" >> /etc/datadog-agent/datadog.yaml
echo "Datadog Agent is installed"
while [ -z \$DB_DRIVER_PORT ]; do
if [ -e "/tmp/driver-env.sh" ]; then
DB_DRIVER_PORT="\$(grep -i "CONF_UI_PORT" /tmp/driver-env.sh | cut -d'=' -f2)"
fi
echo "Waiting 2 seconds for DB_DRIVER_PORT"
sleep 2
done
echo "DB_DRIVER_PORT=\$DB_DRIVER_PORT"
# 構造化ストリーミングメトリクスを有効にし Spark インテグレーション用のコンフィギュレーションファイルを記述
# 他のオプションを spark.d/conf.yaml.example に含めるように変更します
echo "init_config:
instances:
- spark_url: http://\${DB_DRIVER_IP}:\${DB_DRIVER_PORT}
spark_cluster_mode: spark_driver_mode
cluster_name: \${DB_CLUSTER_NAME}
streaming_metrics: true
executor_level_metrics: true
logs:
- type: file
path: /databricks/driver/logs/*.log
source: spark
service: databricks
log_processing_rules:
- type: multi_line
name: new_log_start_with_date
pattern: \d{2,4}[\-\/]\d{2,4}[\-\/]\d{2,4}.*" > /etc/datadog-agent/conf.d/spark.d/spark.yaml
echo "Spark integration configured"
# datadog.yaml のログを有効にしてドライバーログを収集します
sed -i '/.*logs_enabled:.*/a logs_enabled: true' /etc/datadog-agent/datadog.yaml
fi
echo "Restart the agent"
sudo service datadog-agent restart
EOF
chmod a+x /tmp/start_datadog.sh
/tmp/start_datadog.sh >> /tmp/datadog_start.log 2>&1 & disown
Datadog Agent をドライバーノードとワーカーノードにインストールする
クラスターのドライバーノードとワーカーノードに Datadog Agent をインストールします。
スクリプト内で `DD_API_KEY` 変数の値を定義する必要があります。
#!/bin/bash
cat <<EOF > /tmp/start_datadog.sh
#!/bin/bash
date -u +"%Y-%m-%d %H:%M:%S UTC"
echo "Running on the driver? \$DB_IS_DRIVER"
echo "Driver ip: \$DB_DRIVER_IP"
DB_CLUSTER_NAME=$(echo "$DB_CLUSTER_NAME" | sed -e 's/ /_/g' -e "s/'/_/g")
DD_API_KEY='<YOUR_API_KEY>'
if [[ \${DB_IS_DRIVER} = "TRUE" ]]; then
echo "Installing Datadog Agent on the driver (master node)."
# ドライバー用のホストタグを構成する
DD_TAGS="environment:\${DD_ENV}","databricks_cluster_id:\${DB_CLUSTER_ID}","databricks_cluster_name:\${DB_CLUSTER_NAME}","spark_host_ip:\${DB_DRIVER_IP}","spark_node:driver","databricks_instance_type:\${DB_INSTANCE_TYPE}","databricks_is_job_cluster:\${DB_IS_JOB_CLUSTER}"
# 最新の Datadog Agent 7 をドライバーノードとワーカーノードにインストールする
DD_INSTALL_ONLY=true \
DD_API_KEY=\$DD_API_KEY \
DD_HOST_TAGS=\$DD_TAGS \
DD_HOSTNAME="\$(hostname | xargs)" \
DD_SITE="\${DD_SITE:-datadoghq.com}" \
bash -c "\$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script_agent7.sh)"
echo "Datadog Agent is installed"
while [ -z \$DB_DRIVER_PORT ]; do
if [ -e "/tmp/driver-env.sh" ]; then
DB_DRIVER_PORT="\$(grep -i "CONF_UI_PORT" /tmp/driver-env.sh | cut -d'=' -f2)"
fi
echo "Waiting 2 seconds for DB_DRIVER_PORT"
sleep 2
done
echo "DB_DRIVER_PORT=\$DB_DRIVER_PORT"
# 構造化ストリーミングメトリクスを有効にし Spark インテグレーション用のコンフィギュレーションファイルを記述
# spark.d/conf.yaml.example に他のオプションを含めるように変更する
echo "init_config:
instances:
- spark_url: http://\${DB_DRIVER_IP}:\${DB_DRIVER_PORT}
spark_cluster_mode: spark_driver_mode
cluster_name: \${DB_CLUSTER_NAME}
streaming_metrics: true
executor_level_metrics: true
logs:
- type: file
path: /databricks/driver/logs/*.log
source: spark
service: databricks
log_processing_rules:
- type: multi_line
name: new_log_start_with_date
pattern: \d{2,4}[\-\/]\d{2,4}[\-\/]\d{2,4}.*" > /etc/datadog-agent/conf.d/spark.d/spark.yaml
echo "Spark integration configured"
# ドライバーのログを収集するために datadog.yaml でログを有効にする
sed -i '/.*logs_enabled:.*/a logs_enabled: true' /etc/datadog-agent/datadog.yaml
else
echo "Installing Datadog Agent on the worker."
# ワーカー用のホストタグを構成する
DD_TAGS="environment:\${DD_ENV}","databricks_cluster_id:\${DB_CLUSTER_ID}","databricks_cluster_name:\${DB_CLUSTER_NAME}","spark_host_ip:\${SPARK_LOCAL_IP}","spark_node:worker","databricks_instance_type:\${DB_INSTANCE_TYPE}","databricks_is_job_cluster:\${DB_IS_JOB_CLUSTER}"
# 最新の Datadog Agent 7 をドライバーノードとワーカーノードにインストールする
# バージョン 7.40 以上で Agent が失敗しないように、datadog.yaml でホスト名を明確に構成する
# 変更については https://github.com/DataDog/datadog-agent/issues/14152 をご覧ください
DD_INSTALL_ONLY=true DD_API_KEY=\$DD_API_KEY DD_HOST_TAGS=\$DD_TAGS DD_HOSTNAME="\$(hostname | xargs)" bash -c "\$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script_agent7.sh)"
echo "Datadog Agent is installed"
fi
# ポート 6062 での競合を回避
echo "process_config.expvar_port: 6063" >> /etc/datadog-agent/datadog.yaml
echo "Restart the agent"
sudo service datadog-agent restart
EOF
chmod a+x /tmp/start_datadog.sh
/tmp/start_datadog.sh >> /tmp/datadog_start.log 2>&1 & disown
クラスタースコープの init スクリプトの場合
クラスタースコープの init スクリプトとは、クラスター構成内で定義される init スクリプトのことです。クラスタースコープの init スクリプトは、あなたが作成するクラスターとジョブを実行するために作成されたクラスターの両方に適用されます。Databricks は、以下の方法で init スクリプトの構成と保存をサポートしています。
- Workspace Files
- Unity Catalog Volumes
- Cloud Object Storage
Databricks UI を使用してクラスターを編集し、init スクリプトを実行します。
- 以下のスクリプトのいずれかを選択して、Agent をドライバー、またはクラスターのドライバーノードとワーカーノードにインストールします。
- ニーズに合わせてスクリプトを変更します。例えば、タグを追加したり、インテグレーション用に特定の構成を定義することができます。
- 左側の Workspace メニューを使用して、スクリプトをワークスペースに保存します。Unity Catalog Volume を使用する場合は、左側の Catalog メニューを使用して、スクリプトを Volume に保存します。
- クラスター構成ページで、** Advanced** オプションのトグルをクリックします。
- Environment variables で、
DD_API_KEY
環境変数と、オプションで DD_ENV
と DD_SITE
環境変数を指定します。 - Init Scripts タブに移動します。
- Destination のドロップダウンで、
Workspace
の宛先タイプを選択します。Unity Catalog Volume を使用する場合、Destination のドロップダウンで、Volume
の宛先タイプを選択します。 - init スクリプトのパスを指定してください。
- Add ボタンをクリックします。
もし datadog_init_script.sh
を Shared
ワークスペースに直接保存した場合は、パス /Shared/datadog_init_script.sh
でファイルにアクセスできます。
もし datadog_init_script.sh
をユーザーワークスペースに直接保存した場合は、パス /Users/$EMAIL_ADDRESS/datadog_init_script.sh
でファイルにアクセスできます。
もし datadog_init_script.sh
を Unity Catalog Volume
に直接保存した場合は、パス /Volumes/$VOLUME_PATH/datadog_init_script.sh
でファイルにアクセスできます。
クラスター init スクリプトの詳細については、Databricks 公式ドキュメントを参照してください。
ドライバーに Datadog Agent をインストールします
クラスターのドライバーノードに Datadog Agent をインストールします。
#!/bin/bash
cat <<EOF > /tmp/start_datadog.sh
#!/bin/bash
date -u +"%Y-%m-%d %H:%M:%S UTC"
echo "Running on the driver? \$DB_IS_DRIVER"
echo "Driver ip: \$DB_DRIVER_IP"
DB_CLUSTER_NAME=$(echo "$DB_CLUSTER_NAME" | sed -e 's/ /_/g' -e "s/'/_/g")
if [[ \${DB_IS_DRIVER} = "TRUE" ]]; then
echo "Installing Datadog Agent on the driver..."
# ドライバーのホストタグを構成します
DD_TAGS="environment:\${DD_ENV}","databricks_cluster_id:\${DB_CLUSTER_ID}","databricks_cluster_name:\${DB_CLUSTER_NAME}","spark_host_ip:\${DB_DRIVER_IP}","spark_node:driver","databricks_instance_type:\${DB_INSTANCE_TYPE}","databricks_is_job_cluster:\${DB_IS_JOB_CLUSTER}"
# 最新の Datadog Agent 7 をドライバーノードとワーカーノードにインストールします
DD_INSTALL_ONLY=true \
DD_API_KEY=\$DD_API_KEY \
DD_HOST_TAGS=\$DD_TAGS \
DD_HOSTNAME="\$(hostname | xargs)" \
DD_SITE="\${DD_SITE:-datadoghq.com}" \
bash -c "\$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script_agent7.sh)"
# ポート 6062 での競合を回避
echo "process_config.expvar_port: 6063" >> /etc/datadog-agent/datadog.yaml
echo "Datadog Agent is installed"
while [ -z \$DB_DRIVER_PORT ]; do
if [ -e "/tmp/driver-env.sh" ]; then
DB_DRIVER_PORT="\$(grep -i "CONF_UI_PORT" /tmp/driver-env.sh | cut -d'=' -f2)"
fi
echo "Waiting 2 seconds for DB_DRIVER_PORT"
sleep 2
done
echo "DB_DRIVER_PORT=\$DB_DRIVER_PORT"
# 構造化ストリーミングメトリクスを有効にし Spark インテグレーション用のコンフィギュレーションファイルを記述
# 他のオプションを spark.d/conf.yaml.example に含めるように変更します
echo "init_config:
instances:
- spark_url: http://\${DB_DRIVER_IP}:\${DB_DRIVER_PORT}
spark_cluster_mode: spark_driver_mode
cluster_name: \${DB_CLUSTER_NAME}
streaming_metrics: true
executor_level_metrics: true
logs:
- type: file
path: /databricks/driver/logs/*.log
source: spark
service: databricks
log_processing_rules:
- type: multi_line
name: new_log_start_with_date
pattern: \d{2,4}[\-\/]\d{2,4}[\-\/]\d{2,4}.*" > /etc/datadog-agent/conf.d/spark.d/spark.yaml
echo "Spark integration configured"
# datadog.yaml のログを有効にしてドライバーログを収集します
sed -i '/.*logs_enabled:.*/a logs_enabled: true' /etc/datadog-agent/datadog.yaml
fi
echo "Restart the agent"
sudo service datadog-agent restart
EOF
chmod a+x /tmp/start_datadog.sh
/tmp/start_datadog.sh >> /tmp/datadog_start.log 2>&1 & disown
Datadog Agent をドライバーノードとワーカーノードにインストールする
クラスターのドライバーノードとワーカーノードに Datadog Agent をインストールします。
#!/bin/bash
cat <<EOF > /tmp/start_datadog.sh
#!/bin/bash
date -u +"%Y-%m-%d %H:%M:%S UTC"
echo "Running on the driver? \$DB_IS_DRIVER"
echo "Driver ip: \$DB_DRIVER_IP"
DB_CLUSTER_NAME=$(echo "$DB_CLUSTER_NAME" | sed -e 's/ /_/g' -e "s/'/_/g")
if [[ \${DB_IS_DRIVER} = "TRUE" ]]; then
echo "Installing Datadog Agent on the driver (master node)."
# ドライバー用のホストタグを構成する
DD_TAGS="environment:\${DD_ENV}","databricks_cluster_id:\${DB_CLUSTER_ID}","databricks_cluster_name:\${DB_CLUSTER_NAME}","spark_host_ip:\${DB_DRIVER_IP}","spark_node:driver","databricks_instance_type:\${DB_INSTANCE_TYPE}","databricks_is_job_cluster:\${DB_IS_JOB_CLUSTER}"
# 最新の Datadog Agent 7 をドライバーノードとワーカーノードにインストールする
DD_INSTALL_ONLY=true \
DD_API_KEY=\$DD_API_KEY \
DD_HOST_TAGS=\$DD_TAGS \
DD_HOSTNAME="\$(hostname | xargs)" \
DD_SITE="\${DD_SITE:-datadoghq.com}" \
bash -c "\$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script_agent7.sh)"
echo "Datadog Agent is installed"
while [ -z \$DB_DRIVER_PORT ]; do
if [ -e "/tmp/driver-env.sh" ]; then
DB_DRIVER_PORT="\$(grep -i "CONF_UI_PORT" /tmp/driver-env.sh | cut -d'=' -f2)"
fi
echo "Waiting 2 seconds for DB_DRIVER_PORT"
sleep 2
done
echo "DB_DRIVER_PORT=\$DB_DRIVER_PORT"
# 構造化ストリーミングメトリクスを有効にし Spark インテグレーション用のコンフィギュレーションファイルを記述
# spark.d/conf.yaml.example に他のオプションを含めるように変更する
echo "init_config:
instances:
- spark_url: http://\${DB_DRIVER_IP}:\${DB_DRIVER_PORT}
spark_cluster_mode: spark_driver_mode
cluster_name: \${DB_CLUSTER_NAME}
streaming_metrics: true
executor_level_metrics: true
logs:
- type: file
path: /databricks/driver/logs/*.log
source: spark
service: databricks
log_processing_rules:
- type: multi_line
name: new_log_start_with_date
pattern: \d{2,4}[\-\/]\d{2,4}[\-\/]\d{2,4}.*" > /etc/datadog-agent/conf.d/spark.d/spark.yaml
echo "Spark integration configured"
# ドライバーのログを収集するために datadog.yaml でログを有効にする
sed -i '/.*logs_enabled:.*/a logs_enabled: true' /etc/datadog-agent/datadog.yaml
else
echo "Installing Datadog Agent on the worker."
# ワーカー用のホストタグを構成する
DD_TAGS="environment:\${DD_ENV}","databricks_cluster_id:\${DB_CLUSTER_ID}","databricks_cluster_name:\${DB_CLUSTER_NAME}","spark_host_ip:\${SPARK_LOCAL_IP}","spark_node:worker","databricks_instance_type:\${DB_INSTANCE_TYPE}","databricks_is_job_cluster:\${DB_IS_JOB_CLUSTER}"
# 最新の Datadog Agent 7 をドライバーノードとワーカーノードにインストールする
# バージョン 7.40 以上で Agent が失敗しないように、datadog.yaml でホスト名を明確に構成する
# 変更については https://github.com/DataDog/datadog-agent/issues/14152 をご覧ください
DD_INSTALL_ONLY=true DD_API_KEY=\$DD_API_KEY DD_HOST_TAGS=\$DD_TAGS DD_HOSTNAME="\$(hostname | xargs)" bash -c "\$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script_agent7.sh)"
echo "Datadog Agent is installed"
fi
# ポート 6062 での競合を回避
echo "process_config.expvar_port: 6063" >> /etc/datadog-agent/datadog.yaml
echo "Restart the agent"
sudo service datadog-agent restart
EOF
chmod a+x /tmp/start_datadog.sh
/tmp/start_datadog.sh >> /tmp/datadog_start.log 2>&1 & disown
収集データ
メトリクス
収集されたメトリクスのリストについては、Spark インテグレーションドキュメントを参照してください。
サービスチェック
収集されたサービスチェックのリストについては、Spark インテグレーションドキュメントを参照してください。
イベント
Databricks インテグレーションには、イベントは含まれません。
トラブルシューティング
Databricks Web ターミナルを有効にするか、Databricks ノートブックを使用することで、問題を自分でトラブルシューティングできます。有用なトラブルシューティング手順については、Agent のトラブルシューティングのドキュメントを参照してください。
ご不明な点は、Datadog のサポートチームまでお問合せください。
その他の参考資料
お役に立つドキュメント、リンクや記事: