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

目录

1. build.gradle中添加依赖

2. spring boot 1.x暴露信息

tomcat信息

tomcat-jdbc connection pool

3. spring boot服务端改造

4. Prometheus采集Spring Boot指标数据

5. grafana可视化监控数据


背景: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暴露信息

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()));

tomcat-jdbc connection pool

result.add(new Metric<Number>("tomcat.jdbc.pool.createdCount", pool.getCreatedCount(), new Date()));
result.add(new Metric<Number>("tomcat.jdbc.pool.borrowedCount", pool.getBorrowedCount(), new Date()));
result.add(new Metric<Number>("tomcat.jdbc.pool.active", pool.getActive(), new Date()));
result.add(new Metric<Number>("tomcat.jdbc.pool.idle", pool.getIdle(), new Date()));
result.add(new Metric<Number>("tomcat.jdbc.pool.releasedIdleCount", pool.getReleasedIdleCount(), new Date()));
result.add(new Metric<Number>("tomcat.jdbc.pool.reconnectedCount", pool.getReconnectedCount(), new Date()));
result.add(new Metric<Number>("tomcat.jdbc.pool.releasedCount", pool.getReleasedCount(), new Date()));
result.add(new Metric<Number>("tomcat.jdbc.pool.returnedCount", pool.getReturnedCount(), new Date()));
result.add(new Metric<Number>("tomcat.jdbc.pool.removeAbandonedCount", pool.getRemoveAbandonedCount(), new Date()));
result.add(new Metric<Number>("tomcat.jdbc.pool.waitCount", pool.getWaitCount(), 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.2 配置权限

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

management.security.enabled=true



# actuator的metrics接口是否开启

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



# actuator的health接口是否需要安全保证

endpoints.health.sensitive=false



# actuator的health接口是否开启

endpoints.health.enabled=true

这样我们可以看到:

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

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

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

 

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

输入用户名 密码,结果:

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是如何存储采样数据的呢?

参考: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

最后,grafana的效果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值