使用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暴露信息
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服务端改造
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 # 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是如何存储采样数据的呢?
5. grafana可视化监控数据
下载grafana-6.2.5.linux-amd64.tar.gz
启动grafana
./grafana-server &
配置grafana
配置datasource 如mainapp
配置dashboard 与kibana类似,也是配置graph,一个dashboard由多个graph组成
具体监控的指标可以在prometheus首页看
http://192.168.211.101:9090/graph
最后,grafana的效果: