⑧SpringCloud 实战:引入 Actuator监控+整合监控页面
Actuator是什么?
Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用。这个模块是一个采集应用内部信息暴露给外部的模块,上述的功能都可以通过HTTP 和 JMX 访问。
因为暴露内部信息的特性,Actuator 也可以和一些外部的应用监控系统整合(Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等)。这些监控系统提供了出色的仪表板,图形,分析和警报,可帮助你通过一个统一友好的界面,监视和管理你的应用程序。
Actuator使用Micrometer与这些外部应用程序监视系统集成。这样一来,只需很少的配置即可轻松集成外部的监控系统。
Actuator 使用
引入依赖
我们新建一个项目:jlw-actuator
引入 spring-boot-starter-actuator 的Maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
启动项目,访问:/actuator/health,理论上页面会输出以下成功的信息。
{
"status": "UP"
}
Endpoints
Spring Boot 提供了所谓的 endpoints (端点)给外部来与应用程序进行访问和交互,允许添加自己的端点。可以启用或禁用每个端点,并通过HTTP或JMX公开(可远程访问)。默认暴露的两个端点为/actuator/health和 /actuator/info
。
暴露端点
端点可能包含敏感信息,所以应该仔细考虑何时公开它们。
下面的是默认暴露配置:
management.endpoints.jmx.exposure.exclude = *
management.endpoints.jmx.exposure.include = *
management.endpoints.web.exposure.exclude = *
management.endpoints.web.exposure.include = info, health
暴露除/env
,/beans
之外的端点:
management:
endpoints:
web:
exposure:
include: "*"
exclude: "env,beans"
禁用默认其他节点
下面的意思是默认不启用所有端点,仅启用/info
端点
management:
endpoints:
enabled-by-default: false
endpoint:
info:
enabled: true
修改前缀/actuator
在配置文件添加以下配置,自定义
base-path
属性management:
endpoints:
web:
base-path: /jinglingwang #https://jinglingwang.cn/archives/actuator
访问地址更改为:/jinglingwang/health
健康信息
/health
端点会聚合程序的健康指标来检查程序的健康情况,默认配置值是never
,不会显示详细信息,还有when-authorized
和always
两个选项值可配置。
management:
endpoint:
health:
show-details: always
配置成always后访问/jinglingwang/health 会展示更多的信息,效果图如下:
禁用组件自动配置
Spring Boot会自动配置key为couchbase、datasource、diskspace、elasticsearch、hazelcast、influxdb、jms、ldap、mail、mongo、neo4j、ping、rabbit、redis、solr
等运行状况指示器,可以通过management.health.key.enabled来配置启用/禁用指示器。
比如,禁用redis健康监测:
management:
health:
redis:
enabled: false
重启之后,再访问/jinglingwang/health端点,里面就不会再有redis相关的信息了。
特殊的 shutdown 端点
默认情况下,除shutdown之外的所有端点都处于启用状态。
management:
endpoint:
shutdown:
enabled: true
注意是endpoint,不是endpoints
生产环境使用需慎重!然后Post访问http://localhost:9000/jinglingwang/shutdown 就可以实现停机操作。
自定义健康指标
定制运行状况信息,可以注册实现 HealthIndicator 接口的springbean。需要提供health()方法的实现并返回一个健康响应。运行状况响应应该包括状态,并且可以选择包括要显示的其他详细信息。
@Component
public class MyHealthIndicator implements HealthIndicator{
@Override
public Health health() {
//int errorCode = checkError(); //自定义逻辑 https://jinglingwang.cn/archives/actuator
int errorCode = 1;
if (errorCode != 1) {
return Health.down().withDetail("Error Code", "https://jinglingwang.cn/ not found").build();
}
return Health.up()
.withDetail("code","200")
.withDetail("message","https://jinglingwang.cn/")
.build();
}
}
端点安全校验
默认暴露的端点是没有任何安全校验的,敏感信息很容易就暴露了,如果把生产环境的全部端点都暴露在外网环境下,是非常可怕的一件事,这时候我们就可以结合Spring Security来做安全校验。
引入Security相关依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-security</artifactId>
</dependency>
配置好用户名密码
spring:
security:
user:
name: jinglingwang
password: jinglingwang.cn
roles: ENDPOINT_ADMIN
端点访问配置
@Configuration(proxyBeanMethods = false)
public class ActuatorSecurity extends WebSecurityConfigurerAdapter{ @Override
protected void configure(HttpSecurity http) throws Exception {
// 确保所有端点都具有ENDPOINT_ADMIN角色
http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests((requests) ->
requests.anyRequest().hasRole("ENDPOINT_ADMIN"));
http.httpBasic();
}
}
整合监控页面
基于 Prometheus 和 Dashboard(如Grafana)进行监控数据可视化展示。
项目引入Prometheus
Prometheus 是一个通过从监控目标上采集 HTTP 数据收集指标数据的监控平台,用户可以非常方便的安装和使用Prometheus并且能够非常方便的对其进行扩展。
引入Prometheus依赖
由于我们使用springboot的是2.X,其中已经包含了io.micrometer相关的包,不需要再次引入,如果使用的springboot版本是1.X,需要自己额外引入。
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
<version>${micrometer.version}</version>
</dependency>
引入micrometer-registry-prometheus包,提供了基于actuator的端点,访问路径是
**/prometheus
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<scope>runtime</scope>
</dependency>
开放所有端点,或者至少
/metrics
端点management.endpoint.metrics.enabled=true
然后访问http://localhost:8181/jinglingwang/prometheus,即可看到相关数据
安装Prometheus
下载Prometheus:https://prometheus.io/download/
我本地环境是Win10直接解压到自定义目录
修改
prometheus.yml
需要配置scrape_configs
这个节点scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'jinglingwang'
metrics_path: /actuator/prometheus
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:8181']
我这个项目的端口是8181,所以targets需要注意一下,以及获取数据的访问路径是
/jinglingwang/prometheus
。启动Prometheus
Win10 直接运行prometheus.exe
就可以了,默认端口是9090.访问控制台页面: http://localhost:9090/classic/targets;
接入Grafana
Grafana是一个开源的指标量监测和可视化工具。常用于展示基础设施的时序数据和应用程序运行分析。Grafana的dashboard展示非常炫酷,绝对是运维提升逼格的一大利器。
Grafana只是一个dashboard(4版本开始将引入报警功能),负责把数据库中的数据进行可视化展示,本身并不存储任何数据。Grafana目前支持的时序数据库有: Graphite, Prometheus, Elasticsearch, InfluxDB, OpenTSDB, AWS Cloudwatch。
Grafana的套路基本上跟kibana差不多,都是根据查询条件设置聚合规则,在合适的图表上进行展示,多个图表共同组建成一个dashboard,熟悉kibana的用户应该可以非常容易上手。
官方在线演示Demo: http://play.grafana.org/
安装
下载页面:https://grafana.com/grafana/download
Grafana Window 安装非常简单,解压后直接运行bin
目录下的grafana-server.exe
就可以了,默认启动端口是3030,初始登录帐号密码是admin/admin。
添加数据源
在左边导航Configuration,点击data source 添加一个新的数据源,这里我选择的是Prometheus。
Name 填写prometheus.yml
里面配置的job_name,如果填写不一致会出现Grafana访问没有数据的问题。
URL填写启动Prometheus时的服务地址http://localhost:9090/,配置图如下:
然后点击下面的Save & Test
保存测试通过即可。
配置阿里的SLS JVM监控大盘
访问https://grafana.com/grafana/dashboards/12856页面可以查看到阿里的SLS JVM监控大盘
然后点击Grafana 左边的,再点击import,输入Id:12856,点击Load即可,然后选择Prometheus的数据源,最后点击Import完成导致模板。
最后效果图如下:
参考:
- https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#
- https://elkguide.elasticsearch.cn/elasticsearch/other/grafana.html
⑧SpringCloud 实战:引入 Actuator监控+整合监控页面的更多相关文章
- Decoration5:引入Actuator进行站点监控
1.添加依赖 2.重启应用 3.下图显示了一些默认的监控端点 这是数据可以在前台用来做饼图和柱状图什么的,不过实际上我们现在还用不到,于是就不深入研究
- SpringBoot整合Actuator进行健康监控
一.Actuator介绍 SpringBoot自带监控功能Actuator,通过 restful api 请求来监管.审计.收集应用的运行情况,可以帮助实现对程序内部运行情况监控,比如监控状况.Bea ...
- ④SpringCloud 实战:引入Hystrix组件,分布式系统容错
这是SpringCloud实战系列中第4篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...
- ⑤SpringCloud 实战:引入Zuul组件,开启网关路由
这是SpringCloud实战系列中第4篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...
- ⑥SpringCloud 实战:引入gateway组件,开启网关路由功能
这是SpringCloud实战系列中第4篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...
- ⑦SpringCloud 实战:引入Sleuth组件,完善服务链路跟踪
这是SpringCloud实战系列中第7篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...
- Druid 配置及内置监控,Web页面查看监控内容 【我改】
转: Druid 配置及内置监控,Web页面查看监控内容 1.配置Druid的内置监控 首先在Maven项目的pom.xml中引入包 1 2 3 4 5 <dependency> ...
- Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 应用监控
文章目录 1. 快速开始 2. 监控和管理端点3. 定制端点 2.1. health 应用健康指标 2.2. info 查看应用信息 2.3. metrics 应用基本指标 2.4. trace 基本 ...
- 19.SpringCloud实战项目-SpringCloud整合Alibaba-Nacos配置中心
SpringCloud实战项目全套学习教程连载中 PassJava 学习教程 简介 PassJava-Learning项目是PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. ...
随机推荐
- Spring听课笔记(tg)AOP
好文:https://blog.csdn.net/javazejian/article/details/56267036 通过一个实例来理解 1. 需求:实现算术计算器,可以加减乘除,同时记录日志 ...
- new的过程是怎样的?看完这一篇就懂了
在现实世界中,找对象是一门学问,找对象不在于多而在于精 在计算机世界中,面向对象编程的关键在于能否灵活地运用类,如何设计出一个符合需求的对象也是也是值得学习和思考的. 那么,面向对象编程到底是什么? ...
- (23)gzip命令:压缩文件或目录&&gunzip命令:解压缩文件或目录
1.gzip 是 Linux 系统中经常用来对文件进行压缩和解压缩的命令,通过此命令压缩得到的新文件,其扩展名通常标记为".gz". 再强调一下,gzip 命令只能用来压缩文件,不 ...
- pytest测试框架+jenkins结合pytest+jenkins邮件通知配置
刚刚做完一个项目,由于这是一个方案项目,而不是产品,所以各种准备很不充分,很多公司的能力不能复用,整个团队又都是新员工,而且有部分实习生,匆忙上马,今天对我的自动化框架做一个回溯 自动化测试框架的选择 ...
- VIT Vision Transformer | 先从PyTorch代码了解
文章原创自:微信公众号「机器学习炼丹术」 作者:炼丹兄 联系方式:微信cyx645016617 代码来自github [前言]:看代码的时候,也许会不理解VIT中各种组件的含义,但是这个文章的目的是了 ...
- Educational Codeforces Round 17
Educational Codeforces Round 17 A. k-th divisor 水题,把所有因子找出来排序然后找第\(k\)大 view code //#pragma GCC opti ...
- 洛谷 P1525 关押罪犯 (贪心,扩展域并查集)
题意:有\(n\)个罪犯,\(m\)对罪犯之间有仇,现在将这些罪犯分到两个监狱里去,问两个监狱里有仇罪犯之间的最大权值最小为多少. 题解:先按边权从大到小排序,然后贪心,边权大的两个罪犯,我们一定要先 ...
- Educational DP Contest F - LCS (LCS输出路径)
题意:有两个字符串,求他们的最长公共子序列并输出. 题解:首先跑个LCS记录一下dp数组,然后根据dp数组来反着还原路径,只有当两个位置的字符相同时才输出. 代码: char s[N],t[N]; i ...
- 笔记-EF Core 并发冲突与令牌
并发标记并发分悲观并发和乐观并发.悲观并发:比如有两个用户A,B,同时登录系统修改一个文档,如果A先进入修改,则系统会把该文档 锁住,B就没办法打开了,只有等A修改完,完全退出的时候B才能进入修改.乐 ...
- k8s二进制部署 - etcd节点安装
下载etcd [root@hdss7-12 ~]# useradd -s /sbin/nologin -M etcd [root@hdss7-12 ~]# cd /opt/src/ [root@hds ...