使用prometheus及grafana监控spring boot 1.x应用程序

背景:spring boot 1.x 程序,构建工具gradle

需求:希望能够监控其metrics(包括tomcat相关信息)

方法:

1. build.gradle中添加依赖

compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-security'
compile group: 'io.prometheus', name: 'simpleclient_spring_boot', version: '0.6.0'

 

使用actuator要注意其存在的安全隐患,所以使用spring security来保证安全性。

参考:SpringBoot应用监控Actuator使用的安全隐患

2. spring boot 1.x暴露信息

使用prometheus及grafana监控spring boot 1.x应用程序

tomcat信息

spring boot 1.x中并没有tomcat相关的信息,所以要自定义扩展端点

 

TomcatPublishMetrics

通过内部MBeanServer来获取tomcat相关信息

 

result.add(new Metric<Number>("tomcat.thread.busy", currentThreadsBusy, new Date()));

result.add(new Metric<Number>("tomcat.thread.max", maxThreads, new Date()));

result.add(new Metric<Number>("tomcat.thread.current", currentThreadCount, new Date()));

result.add(new Metric<Number>("tomcat.thread.connectionCount", connectionCount, new Date()));

result.add(new Metric<Number>("tomcat.thread.maxConnections", maxConnections, new Date()));

3. spring boot服务端改造

参考:SpringBoot 应用监控踩坑集锦

3.1 在启动类 Application.java 添加如**解

@SpringBootApplication

@EnablePrometheusEndpoint

@EnableSpringBootMetricsCollector

public class MainApplication {

    public static void main(String[] args) {

        SpringApplication.run(MainApplication.class, args);

    }

}

 

3.3 配置权限



server.port = 8081
server.context-path=/mainapp
# actuator是否需要安全保证

management.security.enabled=true



# actuatormetrics接口是否开启

endpoints.metrics.enabled=true



# 可以访问管理端点的用户角色列表,逗号分隔

management.security.roles = SUPERUSER



# 启用基础认证

security.basic.enabled=true



# 安全路径列表,逗号分隔,此处只针对/admin路径进行认证

security.basic.path = /admin



# actuator暴露接口使用的端口,为了和api接口使用的端口进行分离

management.port = 8099



# actuator暴露接口的前缀

management.context-path = /admin



# 认证使用的用户名

security.user.name=xxx

# 认证使用的密码。

security.user.password=123456



# actuatorhealth接口是否需要安全保证

endpoints.health.sensitive=false



# actuatorhealth接口是否开启

endpoints.health.enabled=true

这样我们可以看到:

这个spring boot服务启动了两个端口:

8081端口,mainapp,进行正常的业务处理

8099端口,admin,暴露出监控信息,并通过spring security进行权限控制

 

打开浏览器访问http://192.168.211.2:8099/admin/prometheus

输入用户名 密码

使用prometheus及grafana监控spring boot 1.x应用程序

4. Prometheus采集Spring Boot指标数据

下载prometheus-2.11.1.linux-amd64.tar.gz

编写配置文件prometheus.yml

global:

  scrape_interval: 10s

  scrape_timeout: 10s

  evaluation_interval: 10m

scrape_configs:

  - job_name: spring-boot

    scrape_interval: 5s

    scrape_timeout: 5s

    metrics_path: /admin/prometheus

    scheme: http

    basic_auth:

      username: xxx

      password: 123456

    static_configs:

      - targets:

        - 192.168.211.2:8099

其中,我的spring boot服务部署在192.168.211.2(windows)上,而prometheus和grafana都部署在192.168.211.101(centos)上

修改好prometheus.yml文件之后,重新打包好tar.gz

打包方法参考:Windows如何压缩tar.gz格式

执行以下命令启动 ./prometheus --config.file=prometheus.yml &

访问http://192.168.211.101:9090/targets

可以看到

使用prometheus及grafana监控spring boot 1.x应用程序

其中,prometheus是如何存储采样数据的呢?

参考:Prometheus高可用(1):理解本地存储

5. grafana可视化监控数据

下载grafana-6.2.5.linux-amd64.tar.gz

启动grafana

./grafana-server &

http://192.168.211.101:3000

配置grafana

配置datasource 如mainapp

配置dashboard 与kibana类似,也是配置graph,一个dashboard由多个graph组成

 

具体监控的指标可以在prometheus首页看

http://192.168.211.101:9090/graph

使用prometheus及grafana监控spring boot 1.x应用程序

最后,grafana的效果:

使用prometheus及grafana监控spring boot 1.x应用程序