当公共平台,我们需要实时监控各个业务系统对公共平台的调用情况时,可以在代码中自定义prometheus监控指标。
如下图中,维度使用tags来标记,我定义了两个维度,一个是关联系统的id: syskey 。一个是访问的表 tablename。
我需要按关联系统对每个表的调用情况统计:
private void addCountMetric(String tableName) {
Optional<String> opt = SecurityUtils.getCurrentUserLogin();
String[] tags = new String[4];
if(opt.isPresent()){
tags[0] = "sysKey";
tags[1] = opt.get();
}
tags[2] ="tableName";
tags[3] =tableName;
Metrics.counter("getCommonDataWithTemplateId",tags).increment();
}
我在公共数据查询接口中调用该监控metric。
@ApiOperation("公共数据查询接口")
@PostMapping("/getCommonDataWithTemplateId")
@ResponseBody
public ResponseEntity getCommonDataWithTemplateId(@RequestBody HashMap paramMap){
log.info("get data by common interface, request param is {}",paramMap);
SelectTemplateDTO selectTemplateDTO=commonQueryService.checkParamAndGetSelectTemplateDTO(paramMap);
addCountMetric(selectTemplateDTO.getTableName());
Page page=commonQueryService.getPageByParam(paramMap,selectTemplateDTO);
List dataFinalList=commonQueryService.getfilterFiledsFromPage(page.getContent(),paramMap);
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page);
return ResponseEntity.ok().headers(headers).body(dataFinalList);
}
最终,我们可以在prometheus中看到我们自定义的指标。
最后我们再grafana中写好定义的表达式。图中可以看到每个5m的调用次数。