Grafana Json数据源

SimpleJson方式需要在Grafana引入simple-json-datasource的插件,官网【https://github.com/grafana/simple-json-datasource】下载好插件

放到/var/lib/grafana/plugins 目录下:

 

重启Grafana服务:

service grafana-server restart

 

SimpleJson 结构图:

 

如果要支持SimpleJson,后端WebAPI需要实现4个URL:

  1. /:返回200,用于SimpleJson数据源测试连通性;
  2. /search:返回所有可选的指标;
  3. /query:返回对应指标的时间序列点;
  4. /annotations:返回注解。

 

java 后端demo:

@RequestMapping(value = "/", method = RequestMethod.GET)
@ResponseBody
public Map ReturnTest(HttpServletResponse response) {
    log.info("g....../");
 response.setHeader("Access-Control-Allow-Headers", "accept, content-type");
 response.setHeader("Access-Control-Allow-Methods", "POST");
 response.setHeader("Access-Control-Allow-Origin", "*");

 Map<String, Object> map = new HashMap<String, Object>();
 map.put("result", "200 ok");
 return map;
}

@RequestMapping(value = "/search", method = RequestMethod.POST)
@ResponseBody
public List Search(HttpServletResponse response) {
    log.info("g....../search");
 response.setHeader("Access-Control-Allow-Headers", "accept, content-type");
 response.setHeader("Access-Control-Allow-Methods", "POST");
 response.setHeader("Access-Control-Allow-Origin", "*");

 List<String> result = new ArrayList<String>();
 result.add("CPU");
 result.add("RAM");
 result.add("LOAD");
 result.add("SWAP");
 result.add("DISK");
 result.add("NET");
 return result;
}

@RequestMapping(value = "/query", method = RequestMethod.POST)
@ResponseBody
public List Query(@RequestBody Map<String, Object> params, HttpServletResponse response) {
    log.info("g....../query");
 List<Map> targetList = (List) params.get("targets");
 List<Map<String, Object>> result = new ArrayList<>();
 for (Map targetMap : targetList) {
        String target = (String) targetMap.get("target");
 Map scopedVars = (Map) params.get("scopedVars");
 Map IP = (Map) scopedVars.get("IP");
 String nodeIP = (String) IP.get("text");
 if (target.equals("CPU")) {
            result.add(testService.getCpuMap(nodeIP));
 } else if (target.equals("RAM")) {
            result.add(testService.getRamMap(nodeIP));
 } else if (target.equals("LOAD")) {
            result.add(testService.getLoadMap(nodeIP));
 } else if (target.equals("SWAP")) {
            result.add(testService.getSwapMap(nodeIP));
 } else if (target.equals("DISK")) {
            result = testService.getDiskList(nodeIP);
 } else if (target.equals("NET")) {
            result = testService.getNetList(nodeIP);
 }
    }
    response.setHeader("Access-Control-Allow-Headers", "accept, content-type");
 response.setHeader("Access-Control-Allow-Methods", "POST");
 response.setHeader("Access-Control-Allow-Origin", "*");
 Collections.sort(result, (o1, o2) -> {
        String name1 = String.valueOf(o1.get("target").toString());
 String name2 = String.valueOf(o2.get("target").toString());
 return name1.compareTo(name2);
 });
 return result;
}


@RequestMapping(value = "/annotations", method = RequestMethod.POST)
@ResponseBody
public Map Annotations() {
    log.info("g....../annotations");
 Map<String, Object> map = new HashMap<>();
 map.put("result", "200 ok");
 return map;
}

 

Grafana 数据源配置:

 

 

配置java 接口 / 服务地址  返回200ok 

 

 

根据后端获取 /query 接口数据并展示

 

最终结果如下:

 

 

综上所述,基于SimpleJson数据源,只要配置数据源之后,按正确的方式添加API即可将数据灵活展现在Grafana中,当然SimpleJson只是一个数据源协议载体,

理论上可以对接任何类型的后台数据,只要组装成它支持的格式即可。


 

 

 

 

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值