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
相关产品推荐
相关产品推荐

