<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>article Databricks observability using Grafana and Prometheus in Technical Blog</title>
    <link>https://community.databricks.com/t5/technical-blog/databricks-observability-using-grafana-and-prometheus/ba-p/96849</link>
    <description>&lt;H1&gt;&lt;SPAN&gt;Databricks Observability using Grafana and Prometheus&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN&gt;As software systems scale, the amount of data they process and the work they do grows with them.&lt;/SPAN&gt; &lt;SPAN&gt;This is not limited only to cloud-native services but also data pipelines that support them. When you have just a handful of data jobs and pipelines to worry about it’s not too difficult to reason about their metrics, however as the number of those pipelines increases over time it’s important to keep a pulse on them. That’s where observability comes in. Setting up a good observability foundation for the future can be essential for the cost, performance, and correctness of your pipelines.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;What is Observability?&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Originally the term Observability was defined to mean examining the state of the system based on the data it generates.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;Today, with the growth of cloud computing, it expanded to include different types of telemetry data - such as Logs, Metrics, and Traces (aka. the&amp;nbsp;&lt;A href="https://www.oreilly.com/library/view/distributed-systems-observability/9781492033431/ch04.html" target="_blank" rel="noopener"&gt;Three Pillars of Observability&lt;/A&gt;).&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;In this blog post, we’ll focus on collecting and processing various metrics from your Databricks Spark jobs using free, open source tools such as &lt;/SPAN&gt;&lt;A href="https://prometheus.io/" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;Prometheus&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; and &lt;/SPAN&gt;&lt;A href="https://grafana.com/" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;Grafana&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;. In the next part, we’ll explore APM (Application Performance Monitoring) and explore runtime performance observability using &lt;/SPAN&gt;&lt;A href="https://pyroscope.io/" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;Apache Pyroscope&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;All source code in this post can be found in the &lt;/SPAN&gt;&lt;A href="https://github.com/rayalex/spark-databricks-observability-demo" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;Spark/Databricks Observability Demo&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; on GitHub. It includes the necessary Terraform code to set up monitoring on the Databricks side, Docker Compose to spin up Grafana/Prometheus/Pyroscope, and other tools to help you get started.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Why it matters?&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Observability is typically one of the &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN&gt;-ilities&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt;, as in - &lt;/SPAN&gt;&lt;A href="https://en.wikipedia.org/wiki/Non-functional_requirement" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;Non-functional requirements&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; which are used to judge the operation of a system as a whole rather than in specific behaviors. So what does that mean for you, a &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN&gt;Software, DevSecOps, or a Data engineer &lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt;reading this? Well, a few things. Have you ever considered topics like:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;How long do my jobs run? Are they subject to seasonality and require different parameters on weekends than on workdays?&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Am I overprovisioning my Spark clusters? Are my jobs autoscaling to tens of nodes, but due to IO constraints, I only use 50% of their CPU capacity?&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Are my business metrics correct? Does the number of input rows in &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN&gt;Table A&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt; match the number of rows written in &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN&gt;Table B&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt;?&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN&gt;And the most important - &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN&gt;how can I track these metrics over time and raise alerts if needed?&lt;/SPAN&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Enter Distributed Monitoring&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Metrics are numerical representations of the health (and other aspects) of the system. Typically, we would collect CPU and RAM usage/utilization, memory consumption, network traffic, etc. In the world of Apache Spark™, this extends to JVM and performance utilization of Spark applications. We can capture information about JVM Heap usage, metrics about Spark Jobs and Tasks, scheduler, shuffle, etc.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Spark Applications fit in quite well into this vision - due to its nature as a distributed system, we should be able to easily aggregate metrics across our workloads and derive insights from them.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H1&gt;&lt;SPAN&gt;The Tools&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN&gt;There are many tools out there that can be used to collect, aggregate, and visualize metrics. Here we’ll focus on two popular yet free options - Prometheus and Grafana. Prometheus is used to collect metrics from various sources (e.g. both hardware and software metrics) and Grafana is mainly used to visualize them and build views and dashboards that show a bigger picture on top.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Spark actually comes with &lt;/SPAN&gt;&lt;A href="https://spark.apache.org/docs/latest/monitoring.html#executor-metrics" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;out-of-the-box support&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; for Prometheus. However, it doesn’t cover all the metrics, only a subset of them, and it’s not really suitable for short-lived jobs, as we’ll see.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="observability_architecture.jpg" style="width: 999px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/12412i96801927009571C5/image-size/large?v=v2&amp;amp;px=999" role="button" title="observability_architecture.jpg" alt="observability_architecture.jpg" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Prometheus Pushgateway&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Prometheus is a pull-based metrics collector - that is, you have to configure it to periodically scrape certain metrics from an accessible endpoint. This works well for long-running services but it can be difficult to work around in case you have to monitor a lot of ephemeral workloads, such as one-time or periodic Jobs in Databricks.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Here is where &lt;/SPAN&gt;&lt;A href="https://github.com/prometheus/pushgateway" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;Prometheus Pushgateway&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; comes into the picture. Pushgateway exists so that short-lived jobs can push their metrics to it, and we can configure Prometheus to target Pushgateway as a source. The Pushgateway itself will transparently cache and proxy the metrics pushed to it. We can leverage that behavior by deploying the Pushgateway alongside our Prometheus instance and configuring our Databricks Job Clusters to push metrics to Pushgateway instead.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H1&gt;&lt;SPAN&gt;Setup&lt;/SPAN&gt;&lt;/H1&gt;
&lt;H2&gt;&lt;SPAN&gt;Setting up Databricks clusters with spark-metrics&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Here, we’re using another library called spark-metrics. Internally, it integrates with Spark’s own observability model and pushes those metrics to Pushgateway. You can find an up-to-date form that works with Spark 3.5+ in the &lt;/SPAN&gt;&lt;A href="https://github.com/rayalex/spark-metrics" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;rayalex/spark-metrics&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; fork, as well as pre-built binaries.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;The easiest way to get going is to have an &lt;/SPAN&gt;&lt;A href="https://docs.databricks.com/en/init-scripts/cluster-scoped.html" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;init-script&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; that will install the necessary libraries and configure Pusgateway properly and in a reproducible way. We leverage init-scripts here to make sure the environment is ready before the Spark JVM process boots and configuration is picked up on startup.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;The &lt;/SPAN&gt;&lt;A href="https://github.com/rayalex/spark-databricks-observability-demo/blob/main/main.tf#L18-L26" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;accompanying Terraform example&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; will do these parts for you.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;Setting up libraries&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;In order to hook into Spark’s JMX metrics - we need a compatible client that’s getting bootstrapped at runtime. As we mentioned earlier we’ll be using the &lt;/SPAN&gt;&lt;A href="https://github.com/rayalex/spark-metrics" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;spark-metrics&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; library for this. There are a few ways of doing this, but for the sake of simplicity we’ll be placing the jar in our &lt;/SPAN&gt;&lt;A href="https://docs.databricks.com/en/files/workspace.html" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;Workspace Files&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Finally, we can just copy the jar to its target location as part of our init-script:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="csharp"&gt;cp /Workspace/Users/.../spark_metrics.jar /databricks/jars&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;Configuring Pushgateway&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;For the library to be able to actually do anything, we need to create its configuration. This will include things like Pushgateway endpoint, which metrics to send, job names, etc.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;We’ll only show relevant parts here. However, you can look at the entire configuration for the full list of options. To make the script reusable, we’ll also use cluster environment variables to pull in some additional &lt;/SPAN&gt;&lt;A href="https://github.com/rayalex/spark-databricks-observability-demo/blob/main/init-prometheus.sh#L16" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;configuration options&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;# configure spark metrics to use pushgateway as target
pushgatewayHost=$PROMETHEUS_HOST
jobName=$PROMETHEUS_JOB_NAME

cat &amp;gt;&amp;gt; /databricks/spark/conf/metrics.properties &amp;lt;&amp;lt;EOL
# Enable Prometheus for all instances by class name
*.sink.prometheus.class=org.apache.spark.banzaicloud.metrics.sink.PrometheusSink

# Prometheus pushgateway address
*.sink.prometheus.pushgateway-address-protocol=http
*.sink.prometheus.pushgateway-address=$pushgatewayHost
*.sink.prometheus.period=5
*.sink.prometheus.labels=job_name=$jobName

# Enable HostName in Instance instead of Appid (Default value is false i.e. instance=${appid})
*.sink.prometheus.enable-hostname-in-instance=true

# Enable JVM metrics source for all instances by class name
*.sink.jmx.class=org.apache.spark.metrics.sink.JmxSink
*.source.jvm.class=org.apache.spark.metrics.source.JvmSource
EOL&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;Configuring the Spark Clusters&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;The last step is to add the necessary configuration to the cluster. We’ve made it simpler to reuse the above script by injecting the configuration through your cluster’s environment variables. Currently, we only supply the job name as a metric tag, but you can expand this to fit your needs—e.g., adding specific IDs that are used internally, job version, run date, etc. Databricks itself will also supply a few metrics here, such as Databricks job run ID.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="ruby"&gt;PROMETHEUS_HOST=10.10.10.0:9091
PROMETHEUS_JOB_NAME=dbx-demo-job&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;We also need to attach the init script to our interactive (or job) clusters. The &lt;/SPAN&gt;&lt;A href="https://github.com/rayalex/spark-databricks-observability-demo/blob/main/main.tf#L29" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;Terraform demo&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; we’re using will configure all of this for us.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;And that’s it! Running our job now will provision a cluster, load the new jar into the classpath and if everything goes well, read the configuration before spinning up the Spark Context. Next, let’s set up the rest of the tools and see this in action!&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Setting up Prometheus, Pushgateway, and Grafana&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;The final piece of the puzzle is to set up Prometheus itself (alongside Pushgateway) and Grafana (to visualize the results). Our example comes with an already ready-to-go &lt;/SPAN&gt;&lt;A href="https://github.com/rayalex/spark-databricks-observability-demo/blob/main/docker/docker-compose.yml" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;docker-compose configuration&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; that will deploy everything for you in your environment of choice—the only requirement is connectivity between your Databricks Cluster and the VM that’s running Pushgateway. If you’re just setting up your workspace, I recommend setting it up with &lt;/SPAN&gt;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/security/network/classic/vnet-inject" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;VNet/VPC injection&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; to make sure you have enough flexibility to deploy your networking as needed.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Let’s go through the components step by step. In the production system, you would probably deploy these components more resiliently and permanently, but for our example, it’s sufficient to use Docker Compose to demonstrate that it works.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;Pushgateway&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;Pushgateway doesn’t require any specific configuration. You can just run it as-is, and it will listen to metrics on port 9091.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;pushgateway:
  image: prom/pushgateway
  command: --web.enable-admin-api
  ports:
    - '9091:9091'&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;Prometheus&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;Prometheus requires some configuration to work. Most importantly, we have to tell it to scrape metrics residing in Pushgateway occasionally. In our compose example, we provide the configuration as a mounted volume.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;prometheus:
  image: prom/prometheus
  ports:
    - '9090:9090'
  volumes:
    - ./config/prometheus.yml:/etc/prometheus/prometheus.yml
  command: --config.file=/etc/prometheus/prometheus.yml&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;And the configuration file itself:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;global:
  scrape_interval:     5s
  evaluation_interval: 5s

scrape_configs:
  - job_name: 'pushgateway'
    honor_labels: true
    honor_timestamps: true
    metrics_path: '/metrics'
    static_configs:
      - targets: ['pushgateway:9091']&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Here we’re telling Prometheus to scrape our (docker-compose) Pushgateway endpoint every 5 seconds.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;Grafana&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;Once we have our metrics ingested, the last step is to explore and visualize them. Grafana also requires very little configuration, and it’s easy to extend it to consume metrics from Prometheus if you’re not already using it.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Docker Compose configuration is fairly simple:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;  grafana:
    image: grafana/grafana
    ports:
      - '3000:3000'
    volumes:
      - ./config/grafana/datasources:/etc/grafana/provisioning/datasources/&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;We can add the Prometheus Datasource through the UI, or programmatically as we’re doing here:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;apiVersion: 1
datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: http://prometheus:9090
    editable: true&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;And we’re done. Next time our job runs (and in the case of interactive clusters, while they’re up), we should see the metrics show up in Grafana. Let’s explore a few of the examples.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;Examples&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;A basic dashboard that shows information about simple PiCalculator Databrick Job, which runs every 5 minutes. You can see the number of executors, their average memory usage, GC statistics, and overall Spark tasks.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="prometheus_dashboard.jpg" style="width: 999px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/12413i26979EC53E927CA0/image-size/large?v=v2&amp;amp;px=999" role="button" title="prometheus_dashboard.jpg" alt="prometheus_dashboard.jpg" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H1&gt;&lt;SPAN&gt;Conclusion&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN&gt;We’ve seen how we can easily and effectively gain insights into our Databricks applications metrics, using free and open source tools. In the next part, we’ll be exploring &lt;/SPAN&gt;&lt;A href="https://en.wikipedia.org/wiki/Application_performance_management" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;Application Performance Monitoring&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; with &lt;/SPAN&gt;&lt;A href="https://pyroscope.io/" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;Pyroscope&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; and show how we can dive deep into Spark internals and discover how can we track application performance in detail and monitor how it changes over time. Stay tuned!&lt;/SPAN&gt;&lt;/P&gt;</description>
    <pubDate>Wed, 30 Oct 2024 16:09:08 GMT</pubDate>
    <dc:creator>aleksandar</dc:creator>
    <dc:date>2024-10-30T16:09:08Z</dc:date>
    <item>
      <title>Databricks observability using Grafana and Prometheus</title>
      <link>https://community.databricks.com/t5/technical-blog/databricks-observability-using-grafana-and-prometheus/ba-p/96849</link>
      <description>&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="prometheus_dashboard.jpg" style="width: 999px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/12411i9C8D5F8B93C92D48/image-size/large?v=v2&amp;amp;px=999" role="button" title="prometheus_dashboard.jpg" alt="prometheus_dashboard.jpg" /&gt;&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 30 Oct 2024 16:09:08 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/databricks-observability-using-grafana-and-prometheus/ba-p/96849</guid>
      <dc:creator>aleksandar</dc:creator>
      <dc:date>2024-10-30T16:09:08Z</dc:date>
    </item>
    <item>
      <title>Re: Databricks observability using Grafana and Prometheus</title>
      <link>https://community.databricks.com/t5/technical-blog/databricks-observability-using-grafana-and-prometheus/bc-p/97013#M352</link>
      <description>&lt;P&gt;Thanks for sharing these&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/56643"&gt;@aleksandar&lt;/a&gt;&amp;nbsp;! Really insightful.&lt;/P&gt;</description>
      <pubDate>Thu, 31 Oct 2024 15:34:10 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/databricks-observability-using-grafana-and-prometheus/bc-p/97013#M352</guid>
      <dc:creator>NandiniN</dc:creator>
      <dc:date>2024-10-31T15:34:10Z</dc:date>
    </item>
    <item>
      <title>Re: Databricks observability using Grafana and Prometheus</title>
      <link>https://community.databricks.com/t5/technical-blog/databricks-observability-using-grafana-and-prometheus/bc-p/100807#M397</link>
      <description>&lt;P&gt;Thank you &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/56643"&gt;@aleksandar&lt;/a&gt;&amp;nbsp;. Can you provide the link for Grafana dashboard file&lt;/P&gt;</description>
      <pubDate>Tue, 03 Dec 2024 17:11:09 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/databricks-observability-using-grafana-and-prometheus/bc-p/100807#M397</guid>
      <dc:creator>devron</dc:creator>
      <dc:date>2024-12-03T17:11:09Z</dc:date>
    </item>
    <item>
      <title>Re: Databricks observability using Grafana and Prometheus</title>
      <link>https://community.databricks.com/t5/technical-blog/databricks-observability-using-grafana-and-prometheus/bc-p/128339#M723</link>
      <description>&lt;P&gt;Thanks for sharing. Are serverless clusters supported as well?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 13 Aug 2025 13:08:15 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/databricks-observability-using-grafana-and-prometheus/bc-p/128339#M723</guid>
      <dc:creator>sunnyjaindbrx</dc:creator>
      <dc:date>2025-08-13T13:08:15Z</dc:date>
    </item>
    <item>
      <title>Re: Databricks observability using Grafana and Prometheus</title>
      <link>https://community.databricks.com/t5/technical-blog/databricks-observability-using-grafana-and-prometheus/bc-p/128343#M724</link>
      <description>&lt;P&gt;&lt;A style="background-color: #ffffff;" target="_blank" rel="noopener"&gt;@sunnyjaindbrx&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;It's not possible to do this on Serverless at the moment, as it would require running untrusted code/agents, which is not supported.&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 13 Aug 2025 13:21:25 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/databricks-observability-using-grafana-and-prometheus/bc-p/128343#M724</guid>
      <dc:creator>aleksandar</dc:creator>
      <dc:date>2025-08-13T13:21:25Z</dc:date>
    </item>
    <item>
      <title>Re: Databricks observability using Grafana and Prometheus</title>
      <link>https://community.databricks.com/t5/technical-blog/databricks-observability-using-grafana-and-prometheus/bc-p/128467#M728</link>
      <description>&lt;P&gt;Okay thanks for getting back quickly. Do you know if there is any roadmap to have observability for serverless compute resource monitoring. Or emit the serverless cluster logs to external system via mechanism.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 14 Aug 2025 13:28:53 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/databricks-observability-using-grafana-and-prometheus/bc-p/128467#M728</guid>
      <dc:creator>sunnyjaindbrx</dc:creator>
      <dc:date>2025-08-14T13:28:53Z</dc:date>
    </item>
    <item>
      <title>Re: Databricks observability using Grafana and Prometheus</title>
      <link>https://community.databricks.com/t5/technical-blog/databricks-observability-using-grafana-and-prometheus/bc-p/131732#M761</link>
      <description>&lt;P&gt;Can I use this to export logs of a particular task and setup alerts based on logging message ?&lt;/P&gt;</description>
      <pubDate>Fri, 12 Sep 2025 07:09:22 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/databricks-observability-using-grafana-and-prometheus/bc-p/131732#M761</guid>
      <dc:creator>vasu2652</dc:creator>
      <dc:date>2025-09-12T07:09:22Z</dc:date>
    </item>
  </channel>
</rss>

