全部产品
Search
文档中心

云监控:在Grafana中添加Prometheus数据

更新时间:Sep 21, 2026

可观测监控 Prometheus 版提供了HTTP API地址,以便您在Grafana中接入Prometheus监控数据,或在二次开发过程中通过Prometheus API获取监控数据。

前提条件

已接入Prometheus,具体操作,请参见:

步骤一:获取HTTP API地址

  1. 登录云监控控制台,在左侧导航栏选择Prometheus 监控 - 实例列表,进入实例列表页面。

  2. 在页面顶部菜单栏选择Prometheus实例所在的地域,并在目标集群右侧的操作列单击设置。

  3. 在设置页签上,根据需求复制公网或内网的HTTP API地址。

    设置页签展示公网和内网两类HTTP API地址,可按需复制。页面同时提供生成token入口,使用Token可提升数据读取安全性。

  4. 对于V1版本的Prometheus实例,如果您需要提高Grafana数据读取的安全性,可以单击生成token,获取Prometheus实例的鉴权Token。

    重要

步骤二:在Grafana中添加数据源

在自建Grafana中添加数据源

此处以10.x版本Grafana为例,其他版本Grafana添加数据源的操作请参见Grafana官方文档。

  1. 配置Grafana数据源。

    1. 以管理员账号登录自建Grafana。

    2. 单击页面左上角的image图标,然后选择管理 - 数据源。

    3. 单击+ Add new data source,然后选择数据源类型为Prometheus。

    4. 在Settings页签的Name字段中输入自定义的名称,在Prometheus server URL字段中粘贴上文步骤一获取的HTTP API地址。

    5. 设置安全增强。

      V1版本(可选)

      单击+ Add header,在Custom HTTP Headers区域单击+Add header,设置Header为Authorization,设置Value为步骤一获取的鉴权Token。

      V2版本

      打开Basic auth,并设置User为用户的AccessKey,设置Password为用户的SecretKey。

  2. 单击页签底部的Save & Test。

  3. 查询Prometheus指标。

    1. 登录本地Grafana系统。

    2. 单击页面左上角的image图标,然后在左侧导航栏中单击Dashboards,

    3. 单击Dashboards页面右侧的New,然后在下拉菜单中单击New dashboard。

    4. 单击+ Add visualization,在Select data source页面选择您创建的数据源。

    5. 在Edit Panel页面的Query页签下的A区域的Metrics字段和Label filters字段中输入指标名称和值,单击Run queries进行查询。

      如果能显示出相应指标的图表,则说明操作成功。否则请检查填写的接口地址或Token是否正确,以及数据源是否有Prometheus的监控数据。

      image

在可观测可视化 Grafana 版中集成数据源

阿里云可观测可视化 Grafana 版支持一键集成Prometheus数据源和大盘。

  1. 在ARMS控制台的Grafana服务 - 工作区管理页面单击工作区ID。

  2. 在工作区信息页面的云服务集成区域单击Prometheus监控服务,然后在对应实例右侧单击集成。

  3. 在弹出的对话框中单击确认。

    如果本次操作涉及的Prometheus实例为V2版本,请填写数据源访问AccessKey。

  4. 同步完成后,单击右侧的文件夹。

  5. 在Grafana的Dashboards页签单击大盘名称可以查看应用监控预置的默认大盘。

  6. 单击页面左上角的image图标,然后选择管理 - 数据源,可以查看已添加的应用监控数据源。

  7. 查询Prometheus指标。

    1. 登录本地Grafana系统。

    2. 单击页面左上角的image图标,然后在左侧导航栏中单击Dashboards,

    3. 单击Dashboards页面右侧的New,然后在下拉菜单中单击New dashboard。

    4. 单击+ Add visualization,在Select data source页面选择您创建的数据源。

    5. 在Edit Panel页面的Query页签下的A区域的Metrics字段和Label filters字段中输入指标名称和值,单击Run queries进行查询。

      如果能显示出相应指标的图表,则说明操作成功。否则请检查填写的接口地址或Token是否正确,以及数据源是否有Prometheus的监控数据。

      image

步骤三:获取Prometheus监控数据

调用Prometheus监控数据的请求示例如下。更多使用HTTP API获取Prometheus监控数据的操作,请参见开源版Prometheus HTTP API。

V1版本

GET {HTTP API}/api/v1/query
Accept: application/json
Content-Type: application/json
Authorization: {Token}
{
  "query":"arms_prometheus_target_interval_length_seconds_sum",
  "time":"1635302655",
  "timeout":"1000"
}
说明

{HTTP API}和{Token}请替换为上文步骤一获取的HTTP API和鉴权Token。

V2版本

GET {HTTP API}/api/v1/query
Accept: application/json
Content-Type: application/json
Authorization: Basic <base64Encode(<accessKey:secretKey>)>
{
  "query":"arms_prometheus_target_interval_length_seconds_sum",
  "time":"1635302655",
  "timeout":"1000"
}
说明
  • {HTTP API}替换为上文步骤一获取的HTTP API。

  • API接口支持STS鉴权。此时BasicAuth中的secretKey格式为{AccessKey Secret}${STS Token}。更多信息,请参见临时访问凭证STS概念。

除了上述 HTTP 请求示例,也可以使用 Python 的 requests 库调用 Prometheus HTTP API 获取监控数据。

V2 版本(Basic Auth 鉴权)

import base64
import requests

http_api_url = "{http_api_url}"  # 替换为步骤一获取的HTTP API地址
access_key = "{AccessKey}"
secret_key = "{SecretKey}"

auth_str = f"{access_key}:{secret_key}"
auth_header = base64.b64encode(auth_str.encode("utf-8")).decode("utf-8")

headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
    "Authorization": f"Basic {auth_header}"
}

params = {
    "query": "up"
}

response = requests.get(f"{http_api_url}/api/v1/query", headers=headers, params=params)
result = response.json()

print(result["status"])
print(result["data"]["result"])
说明

{http_api_url} 请替换为上文步骤一获取的 HTTP API 地址,{AccessKey} 和 {SecretKey} 请替换为 AccessKey 和 SecretKey。API 接口支持 STS 鉴权,此时 Basic Auth 中的 secretKey 格式为 {AccessKey Secret}:{SecretKey}:{STS Token}。

V1 版本(Token 鉴权)

import requests

http_api_url = "{http_api_url}"  # 替换为步骤一获取的HTTP API地址
token = "{token}"  # 替换为步骤一获取的鉴权Token

headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
    "Authorization": token
}

params = {
    "query": "up"
}

response = requests.get(f"{http_api_url}/api/v1/query", headers=headers, params=params)
result = response.json()

print(result["status"])
print(result["data"]["result"])
说明

{http_api_url} 和 {token} 请替换为上文步骤一获取的 HTTP API 地址和鉴权 Token。

返回示例:

展开查看返回示例

{
    "status": "success",
    "data": {
        "resultType": "vector",
        "result": [
            {
                "metric": {
                    "__name__": "arms_prometheus_target_interval_length_seconds_sum",
                    "instance": "localhost:9335",
                    "interval": "15s",
                    "job": "_arms-prom/kubelet/1"
                },
                "value": [
                    1635302655,
                    "146655.24420603***"
                ]
            },
            {
                "metric": {
                    "__name__": "arms_prometheus_target_interval_length_seconds_sum",
                    "instance": "localhost:9335",
                    "interval": "30s",
                    "job": "_arms-prom/kubelet/1"
                },
                "value": [
                    1635302655,
                    "879810.747346***"
                ]
            },
            {
                "metric": {
                    "__name__": "arms_prometheus_target_interval_length_seconds_sum",
                    "instance": "localhost:9335",
                    "interval": "20s",
                    "job": "_arms-prom/kubelet/1"
                },
                "value": [
                    1635302655,
                    "73320.13578499***"
                ]
            }
        ]
    }