AttributeError: 'ExportMetricsResponse' when retrieving serving endpoint metrics

Use a custom Python script to download and save the serving endpoint metrics to a file in the Prometheus format.

Written by vidya.sagamreddy

Last published at: April 26th, 2025

Problem

You are trying to use a Python script to retrieve your serving endpoint metrics and save them to a file in the Prometheus format, when you encounter an error.

AttributeError: 'ExportMetricsResponse' object has no attribute 'metrics'
suggests that the ExportMetricsResponse object returned by w.serving_endpoints.export_metrics(name=endpoint_name) does not contain an attribute called metrics.

 

Cause

You can request metrics from the serving endpoint API in the Prometheus format, but if you are using alternate methods (such as a Python script to retrieve and save the data to a file and then use it in another job) the JSON response is not guaranteed to be in the Prometheus format.

 

Solution

You can use an example Python script as a base to retrieve the metrics data from a serving endpoint, convert it to Prometheus format, and write it out to a file.

 

Example code

This python script fetches the data from the serving endpoint metrics API (AWSAzureGCP) and writes the metrics from metrics_output.prom out to a file.

The metrics_output.prom file can be read and referred to in any way you require. For example, you can ingest the response into signalfx -> prometheus-exporter.

Before running this example code, you need to replace:

  • <workspace-url> - URL of the workspace
  • <authentication-token> - Your PAT/OAuth token
  • <serving-endpointname> - The serving endpoint you want to collect metrics from

 

import requests
from databricks.sdk import WorkspaceClient

# Initialize Databricks client
workspace = WorkspaceClient(host="<workspace-url>", token="<authentication-token>")

# Define the endpoint URL
endpoint = "<workspace-url>/api/2.0/serving-endpoints/<serving-endpointname>/metrics"

# Set headers with correct Content-Type
headers = {
"Authorization": f"Bearer {workspace.config.token}",
"Content-Type": "text/plain; version=0.0.4; charset=utf-8"
}

# Make the GET request
response = requests.get(endpoint, headers=headers)

# Check if the request was successful
if response.status_code == 200:
# Save response to a file
with open("metrics_output.prom", "w") as file:
file.write(response.text)

# Print the contents of the file
with open("metrics_output.prom", "r") as file:
print(file.read())
else:
print(f"Error: {response.status_code}, {response.text}")