使用prometheus和grafana监控springboot项目

        最近在工作中,除了需要做开发的业务,还需要对一些业务指标在代码中进行埋点监控,因此梳理了prometheus进行指标埋点,通过grafana进行数据展示。本文主要通过简单的一个springboot项目,通过暴露一个http rest的接口,并对接口处通过prometheus埋下监控点,并将点的数据保存在prometheus的时序数据库中,然后grafana通过获取数据源,然后进行图表展示。

1.下载及安装配置

       链接:https://pan.baidu.com/s/1uYPzb61YJ4ccj8VBsfluIg  提取码:1wxo   

       以上链接包含prometheus和grafana的windows环境下的免安装文件夹,只需要解压并修改配置即可。

1.1.prometheus

        解压文件包之后,有一个prometheus的配置文件,可以打开文件如图所示:

        可以看出prometheus 的本地访问地址是:localhost:9090,当然端口号可以更改。如果需要添加其他服务只需要增加相应的job即可,比如增加两个服务,分别为mydemo和user_management_system,具体配置如下所示:

然后保存prometheus.yml文件之后,点击prometheus.exe文件启动prometheus,访问prometheus网页:localhost:9090/targets,结果如下图所示:

以上表示这两个添加的服务启动状态。

1.2.grafana

        解压之后,在conf文件夹下复制sample.ini文件,重命名为custom.ini,并且打开文件将注解隐去的端口暴露出来,如下图所示:

修改端口之后,则点击bin文件下的grafana-server.exe启动grafana,并且登录localhost:9091,初始化账号密码均为admin,初次登录之后会修改密码,登录之后,设置数据源,因为前面使用prometheus埋点,所以grafana数据源来自于prometheus,设置如下:

        需要输入相应的prometheus的url即可。

2.springboot项目

        在前期工作准备好之后,便是进行springboot项目的编写,本文以mydemo服务为例进行讲解。

2.1 引入依赖

        在项目中使用了prometheus进行埋点统计,因此需要引入相应的依赖,io.micrometer是springboot下兼容的prometheus依赖。

        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
        </dependency>

整个pom文件的依赖具体如下所示:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-hateoas</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
        </dependency>

2.2application.yml文件的编写

        在springboot中引入prometheus,不仅需要引入依赖,还需要在application.yml文件中增加相应的配置,具体如下所示:

server:
  port: 8002   #  配置启动端口号


spring:
  application:
    name: mydemo
  metrics:
    servo:
      enabled: false
management:
  endpoints:
    web:
      exposure:
        include: info, health, beans, env, metrics, mappings, scheduledtasks, sessions, threaddump, docs, logfile, jolokia,prometheus
      base-path: /actuator #默认/actuator 不更改可不用配置
      #CORS跨域支持
      cors:
        allowed-origins: http://example.com
        allowed-methods: GET,PUT,POST,DELETE
    prometheus:
      id: springmetrics
  endpoint:
    beans:
      cache:
        time-to-live: 10s #端点缓存响应的时间量
    health:
      show-details: always #详细信息显示给所有用户
  server:
    port: 8001 #默认8080
    address: 127.0.0.1 #配置此项表示不允许远程连接

  #监测
  metrics:
    export:
      datadog:
        application-key: ${spring.application.name}
    web:
      server:
        auto-time-requests: false

        以上是比较详细的配置,注意:这里涉及两个port,一个是server port,一个是prometheus port,其中server port则是调用接口使用的端口,而prometheus port则与该服务在prometheus.yml中的port是一致的,不一致的话则会使该服务down。

2.3rest 接口的编写

        这里写了个controller类,并且编写了一个接口,接口是http rest风格的add接口,具体代码如下所示:

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.PostConstruct;


@RestController
@RequestMapping("/api")
public class OperationController {


    @Autowired
    MeterRegistry registry;
    private Counter counter;
    private Counter failCounter;


    @PostConstruct
    private void init(){
        failCounter=  registry.counter("requests_add_fail_total","save","carson");
        counter = registry.counter("requests_add_total","save","carson");

    }


    @RequestMapping(value = "/add",method = RequestMethod.POST)
    public String add(@Validated String firstName,@Validated String secondName) throws Exception {
        try{
            String name = firstName+secondName;
            counter.increment();
            return name;
        }catch (Exception e){
            failCounter.increment();
            throw new Exception("异常");
        }
    }



}

        其中init方法则是对prometheus中counter组件进行初始化,而在add接口中则可以直接使用,这里两个指标分别为调用成功的次数与调用失败的次数。

2.4启动类

import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan("com.carson.mydemo.controller")
public class MydemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(MydemoApplication.class, args);
    }

    @Bean
    MeterRegistryCustomizer<MeterRegistry> configurer(
            @Value("${spring.application.name}") String applicationName) {
        return (registry) -> registry.config().commonTags("application", applicationName);
    }
}

        启动类中通过configurer来注册这个服务,其中@Value(${spring.application.name})即application.yml中对应的值。然后启动该启动类。

2.5模拟调用

        项目启动之后,便可以通过postman进行调用接口,如下图所示:

2.6监控视图的制作

        在grafana页面新增dashboard之后,便进入下图所示:

然后选中数据源,并进行metrics语句编写,如下图所示,sum(request_add_total) ,其中sum函数中的字段可以模糊搜索,只要prometheus中的服务是up的。然后图就如下所示,可以看出,调用情况

 

        本文介绍了如何将springboot项目通过prometheus和grafana进行指标的监控,便于开发在开发过程中对指标的掌控以及对业务有更深刻的理解。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值