You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Grafana技术问题:如何通过API获取当前选中的时间范围?

获取Grafana仪表板当前选中时间范围的可行方案

方法1:通过浏览器前端提取(适合带浏览器交互的Python脚本)

如果你的Python程序能控制浏览器(比如用Selenium、Playwright),直接读取Grafana页面的全局变量就能拿到实际时间范围:

  • 执行JS代码:return window.grafanaBootData.timeRange
  • 返回结果里的from和to字段,要么是相对时间字符串(比如now-6h),要么是绝对时间戳,按需转换就行。

示例Python代码(Selenium版):

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("你的Grafana仪表板完整URL")
# 等页面加载完成,时间按需调整
time.sleep(3)
time_range = driver.execute_script("return window.grafanaBootData.timeRange")
print(f"当前选中时间范围: 从 {time_range['from']} 到 {time_range['to']}")
driver.quit()

方法2:解析仪表板URL参数

用户调整时间范围后,Grafana的浏览器URL会自动带上from和to参数(比如http://grafana.example.com/d/xxx/dashboard?from=1690000000000&to=1690003600000),你可以:

  • 获取当前仪表板的完整URL
  • 用Python的urllib.parse解析查询参数,提取from和to的值
  • 时间戳直接转可读时间,相对时间的话可以用方法3转成绝对时间

示例代码:

from urllib.parse import urlparse, parse_qs

# 假设你已经拿到了当前仪表板的URL
dashboard_url = "http://grafana.example.com/d/xxx/dashboard?from=1690000000000&to=1690003600000"
parsed_url = urlparse(dashboard_url)
query_params = parse_qs(parsed_url.query)
time_from = query_params.get("from", [""])[0]
time_to = query_params.get("to", [""])[0]
print(f"时间范围起始: {time_from}, 结束: {time_to}")

方法3:用Grafana时间转换API转绝对时间(纯后端调用)

如果需要把相对时间(比如now-1h)转换成绝对时间戳,可以调用Grafana的内部API,前提是你有有效的API Token或登录Cookie:

  • 请求方式:POST
  • 接口地址:/api/frontend/translate-time-range
  • 请求体传要转换的时间范围,比如{"from": "now-1h", "to": "now"}

示例Python代码(requests版):

import requests

grafana_base_url = "http://grafana.example.com"
api_token = "你的Grafana API Token"
headers = {"Authorization": f"Bearer {api_token}"}
# 这里可以替换成从URL或前端拿到的相对时间
payload = {"from": "now-6h", "to": "now"}

response = requests.post(f"{grafana_base_url}/api/frontend/translate-time-range", json=payload, headers=headers)
if response.status_code == 200:
    translated_time = response.json()
    print(f"转换后的绝对时间范围: 从 {translated_time['from']} 到 {translated_time['to']}")

注意事项

  • 纯后端API没法直接拿到用户当前在浏览器里选中的时间范围,因为这个状态只存在前端会话里,Grafana后端不会存储。
  • 如果要无浏览器交互实现,建议让用户访问仪表板时手动传递时间范围参数,或者写个简单的Grafana插件把当前时间范围推送到你的Python服务。

内容的提问来源于stack exchange,提问作者jack_r01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 22:14:55