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

Grafana使用JSON/Infinity数据源加载分页API数据的实现方案

核心结论

你提到的两款数据源都无法直接实现表格原生分页控件联动后端请求的效果。
原因很明确:marcusolsson-json-datasource、yesoreyeram-infinity-datasource的HTTP请求参数仅在查询编辑阶段绑定静态值或仪表盘变量,而Grafana表格面板自带的分页是纯前端本地分页逻辑——点击表格内置页码时只会对单次请求拉取到的全量数据做前端切片,根本不会触发后端重新请求,自然也不会传递新的分页参数。

最优落地方案

不用二次开发插件,用Grafana原生能力就能实现需求,步骤如下:

  • 第一步,创建仪表盘分页变量
    新建两个仪表盘级变量:
    1. page_size:类型选自定义值,预设常用分页大小比如10,20,50,控件选下拉选择器
    2. page_number:类型选自定义,初始值设为1,控件选数字输入框,也可以搭配社区的按钮组插件做上一页、下一页、页码跳转按钮
      如果用Infinity数据源,可以额外配置一个隐式查询,从接口响应的total字段或者响应头里提取总记录数,自动计算总页码,给page_number做合法值拦截,避免请求不存在的页码。
  • 第二步,绑定变量到数据源请求
    打开你配置的JSON/Infinity查询,在请求参数配置项里添加两个参数:page_size值填${page_size},page_number值填${page_number};也可以直接拼接在请求URL末尾:你的接口地址?page_size=${page_size}&page_number=${page_number}。变量变更时Grafana会自动触发查询重新发起,完全符合你点击对应页码传对应参数的需求。
  • 第三步,替换表格原生分页
    打开表格面板的设置,关闭默认的前端分页,把每页显示条数固定为${page_size},隐藏表格自带的页码控件,把之前建的分页变量控件放在表格顶部作为分页操作区即可。
缓存方案选型

是否需要加缓存完全取决于你的接口性能:如果单页接口响应耗时在1s以内、数据实时性要求高,完全不用加缓存;如果接口耗时较长、同页码数据短时间内不会频繁变动,按优先级选以下方案即可,不需要额外开发复杂服务:

  • 首选数据源内置缓存:Infinity数据源原生支持查询结果缓存,直接在数据源配置页开启,根据数据更新频率设置缓存TTL(通常30s到5min即可),相同分页参数的请求在TTL有效期内会直接返回缓存结果,不会重复调用后端接口,零代码配置,适配性最好。如果用marcusolsson-json-datasource,可以直接开启Grafana 8.5+版本自带的全局查询缓存,支持用内存或Redis作为缓存后端,同样不需要改业务配置。
  • 次选网关层缓存:如果后端接口有严格的请求频率限制,直接在接口前加一层Nginx/API网关做接口级缓存,缓存key为携带分页参数的完整请求路径,TTL按业务需求设置即可,对Grafana侧完全透明,不需要改动任何现有配置。

注意:不要尝试通过前端注入的方式劫持表格原生分页的点击事件,Grafana没有暴露插件分页事件的公开钩子,版本升级后极易失效,维护成本极高,用自定义变量实现分页的方案兼容所有Grafana 7.0+版本,没有额外依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:12:17