Databricks(Spark)のMetricsをPrometheusで取得
だいぶ前の話になりますが、spark3.0系から、Prometheus経由でのMetrics取得が可能になっています。
Databricksの場合に、どう取得するかがいまいちわからなかったので、チラ裏的な形で情報を残しておきます。
動作検証は下記で実施しています。
- DBR11.3 Standard
- All purpose Cluster
Job Clusterの場合、取得するMetricsのURLが変動するため、取得するには少し考慮が必要かと思います(検証未実施
設定項目
- spark config
- init script
- Prometheusからmetricsを取得するためのconfig
Spark Config
Spark Configについては、DatabrikcsのCluster作成画面からいつも通り設定してください。
namespaceは任意のname spaceです。
spark.ui.prometheus.enabled true
spark.metrics.namespace suda-spark
init script
こちらもDBFSにinit scriptを配置してください。こちらをnotebookにコピペして実行すれば
一旦DBFS上に出力しますので、Clusterの画面からinit scriptを設置してもらえればいけます。
%scala
dbutils.fs.put("dbfs:/Users/hogehoge/prom_init_scripts",
"""
|#!/bin/bash
|cat <<EOF > /databricks/spark/conf/metrics.properties
|*.sink.prometheusServlet.class=org.apache.spark.metrics.sink.PrometheusServlet
|*.sink.prometheusServlet.path=/metrics/prometheus
|master.sink.prometheusServlet.path=/metrics/master/prometheus
|applications.sink.prometheusServlet.path=/metrics/applications/prometheus
|EOF
""".stripMargin, true)
Clusterの再起動と設置後の確認
init scriptを再度読み込むために、clusterを再起動したらnotebook上で
下記コマンドでMetricksが取得できるかを確認します。
%sh
curl -L -H "Authorization: Bearer パーソナルtoken" -X GET https://WORKSPACEのURL/driver-proxy-api/o/0/ClusterのID/40001/metrics/prometheus
%sh
curl -L -H "Authorization: Bearer パーソナルtoken" -X GET https://${WORKSPACE}/driver-proxy-api/o/0/ClusterのID/40001/metrics/executors/prometheus
設定がうまく読み込めていればこんな形でmetricsが取得できていることが書くのにできるかと思います。
Prometheus側の設定
prometheus.yamlのscrapeの箇所に下記の設定を追加します。
prometheus側からは、パーソナルtokenを使ってhttp経由での取得になるので、bearer_tokenで指定します。
- job_name: "databricks"
metrics_path: "/driver-proxy-api/o/0/0313-015028-llm0hx61/40001/metrics/prometheus"
scheme: "http"
bearer_token: "パーソナルToken"
static_configs:
- targets: ["WORKSPACEのFQDN"]
- job_name: "databricks-exec"
metrics_path: "/driver-proxy-api/o/0/0313-015028-llm0hx61/40001/metrics/executors/prometheus"
scheme: "http"
bearer_token: "パーソナルToken"
static_configs:
- targets: ["WORKSPACEのFQDN"]
あとはPrometheusのUIから見てみると、各種Metricsが取得できていることが確認できるので
grafanaなどで可視化するといい感じにできると思います。
以上で簡単ではありますがDatabricksでのPrometheusを使ったmetrics取得方法でした。
いい感じのDashboardがまだ見つからないので、どなたかいい感じのあれば是非教えていただきたいです。