prometheus自定义监控:监控接口的实时调用情况

当公共平台,我们需要实时监控各个业务系统对公共平台的调用情况时,可以在代码中自定义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的调用次数。

 

 

posted @ 2014-12-26 11:46  南哥的天下  阅读(513)  评论(0)    收藏  举报