SpringBoot(8)日志监控

监控的意义

  1. 监控服务状态是否宕机
  2. 监控服务运行指标(内存,虚拟机,线程,请求等)
  3. 监控程序运行日志
  4. 管理服务(服务上下线)

监控的实施方式
1.显示监控信息的服务器:用于获取服务信息,并显示对应的信息
2.运行的服务:启动时主动上报,告知监控服务器自己需要收到监控

使用监控

Spring Boot Admin,开源社区项目,用于管理和监控SpringBoot应用程序。 客户端注册到服务端后,通过HTTP请求方式,服务端定期从客户端获取对应的信息,并通过UI界面展示对应信息。

服务端开发
1.导入springboot admin对应的starter,版本与当前使用的springboot版本保持一致,并将其配置成web工程

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <version>2.5.4</version>
</dependency>

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

上述过程可以通过创建项目时使用勾选的形式完成。
在这里插入图片描述
2.在引导类上添加注解@EnableAdminServer,声明当前应用启动后作为SpringBootAdmin的服务器使用

@SpringBootApplication
@EnableAdminServer
public class Springboot25AdminServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(Springboot25AdminServerApplication.class, args);
    }
}

启动后就可以访问当前程序了,界面如下:
在这里插入图片描述

客户端开发
1.导入springboot admin对应的starter,版本与当前使用的springboot版本保持一致,并将其配置成web工程

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
    <version>2.5.4</version>
</dependency>

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

2.设置当前客户端将信息上传到哪个服务器上,通过yml文件配置

spring:
  boot:
    admin:
      client:
        url: http://localhost:8080

启动后再次访问服务端程序,界面如下:
在这里插入图片描述
springbootadmin的客户端默认开放了13组信息给服务器,但是这些信息除了一个之外,其他的信息都不让通过HTTP请求查看。所以看到的信息基本上就没什么内容了,只能看到一个内容,就是下面的健康信息。
在这里插入图片描述

需要做两组配置就可以看到信息了:

  1. 开放指定信息给服务器看
  2. 允许服务器以HTTP请求的方式获取对应的信息
server:
  port: 80
spring:
  boot:
    admin:
      client:
        url: http://localhost:8080
management:
  endpoint:
    health: #开放所有健康信息明细
      show-details: always

健康信息如下:
在这里插入图片描述
其他12种信息是默认不提供给服务器通过HTTP请求查阅的,所以需要开启查阅的内容项,使用*表示查阅全部。记得带引号。

server:
  port: 80
spring:
  boot:
    admin:
      client:
        url: http://localhost:8080
management:
  endpoint:
    health: #开放所有健康信息明细
      show-details: always
# 开启http能够查阅的内容
  endpoints:
    web:
      exposure:
        include: "*"

在这里插入图片描述

监控原理

Actuator提供了SringBoot生产就绪功能,通过端点的配置与访问,获取端点信息
端点描述了一组监控信息,SpringBoot提供了多个内置端点,也可以根据需要自定义端点信息
访问当前应用所有端点信息:/actuator
访问端点详细信息:/actuator/端点名称

访问/actuator请求:
在这里插入图片描述
其中每一组数据都有一个请求路径,而在这里请求路径中有之前看到过的health,发送此请求又得到了一组信息

{
    "status": "UP",
    "components": {
        "diskSpace": {
            "status": "UP",
            "details": {
                "total": 297042808832,
                "free": 72284409856,
                "threshold": 10485760,
                "exists": true
            }
        },
        "ping": {
            "status": "UP"
        }
    }
}

当前信息与监控面板中的数据存在着对应关系
在这里插入图片描述
原来监控中显示的信息实际上是通过发送请求后得到json数据,然后展示出来。按照上述操作,可以发送更多的以/actuator开头的链接地址,获取更多的数据,这些数据汇总到一起组成了监控平台显示的所有数据。打开被监控应用的pom文件,其中导入了springboot admin的对应的client,在这个资源中导入了一个名称叫做actuator的包。被监控的应用之所以可以对外提供上述请求路径,就是因为添加了这个包。
在这里插入图片描述
Actuator,可以称为端点,描述了一组监控信息,SpringBootAdmin提供了多个内置端点,通过访问端点就可以获取对应的监控信息,也可以根据需要自定义端点信息。通过发送请求路劲**/actuator可以访问应用所有端点信息,如果端点中还有明细信息可以发送请求/actuator/端点名称**来获取详细信息。以下列出了所有端点信息说明:

ID描述默认启用
auditevents暴露当前应用程序的审计事件信息。
beans显示应用程序中所有 Spring bean 的完整列表。
caches暴露可用的缓存。
conditions显示在配置和自动配置类上评估的条件以及它们匹配或不匹配的原因。
configprops显示所有 @ConfigurationProperties 的校对清单。
env暴露 Spring ConfigurableEnvironment 中的属性。
flyway显示已应用的 Flyway 数据库迁移。
health显示应用程序健康信息
httptrace显示 HTTP 追踪信息(默认情况下,最后 100 个 HTTP 请求/响应交换)。
info显示应用程序信息。
integrationgraph显示 Spring Integration 图。
loggers 显示和修改应用程序中日志记录器的配置。
liquibase显示已应用的 Liquibase 数据库迁移。
metrics显示当前应用程序的指标度量信息。
mappings显示所有 @RequestMapping 路径的整理清单。
scheduledtasks显示应用程序中的调度任务。
sessions允许从 Spring Session 支持的会话存储中检索和删除用户会话。当使用 Spring Session 的响应式 Web 应用程序支持时不可用。
shutdown正常关闭应用程序。
threaddump执行线程 dump。
heapdump返回一个 hprof 堆 dump 文件。
jolokia通过 HTTP 暴露 JMX bean(当 Jolokia 在 classpath 上时,不适用于 WebFlux)。
logfile返回日志文件的内容(如果已设置 logging.file 或 logging.path 属性)。支持使用 HTTP Range 头来检索部分日志文件的内容。
prometheus以可以由 Prometheus 服务器抓取的格式暴露指标。

上述端点每一项代表被监控的指标,如果对外开放则监控平台可以查询到对应的端点信息,如果未开放则无法查询对应的端点信息。通过配置可以设置端点是否对外开放功能。使用enable属性控制端点是否对外开放。其中health端点为默认端点,不能关闭。

management:
  endpoint:
    health:						# 端点名称
      show-details: always
    info:						# 端点名称
      enabled: true				# 是否开放
    

为了方便开发者快速配置端点,springboot admin设置了13个较为常用的端点作为默认开放的端点,如果需要控制默认开放的端点的开放状态,可以通过配置设置,如下:

management:
  endpoints:
    enabled-by-default: true	# 是否开启默认端点,默认值true

上述端点开启后,就可以通过端点对应的路径查看对应的信息了。但是此时还不能通过HTTP请求查询此信息,还需要开启通过HTTP请求查询的端点名称,使用“*”可以简化配置成开放所有端点的WEB端HTTP请求权限。

management:
  endpoints:
    web:
      exposure:
        include: "*"

整体上来说,对于端点的配置有两组信息,一组是endpoints开头的,对所有端点进行配置,一组是endpoint开头的,对具体端点进行配置。

management:
  endpoint:		# 具体端点的配置
    health:
      show-details: always
    info:
      enabled: true
  endpoints:	# 全部端点的配置
    web:
      exposure:
        include: "*"
    enabled-by-default: true

端点暴露功能:
端点中包含的信息存在敏感信息,需要对外暴露端点功能时手动设定指定端点信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结

  1. 被监控客户端通过添加actuator的坐标可以对外提供被访问的端点功能
  2. 端点功能的开放与关闭可以通过配置进行控制
  3. web端默认无法获取所有端点信息,通过配置开放端点功能

自定义监控指标

INFO端点
info端点描述了当前应用的基本信息,可以通过两种形式快速配置info端点的信息
在yml文件中通过设置info节点的信息就可以快速配置端点信息:

info:
  appName: @project.artifactId@
  version: @project.version@
  company: 传智教育
  author: itheima

配置完毕后,对应信息显示在监控平台上:
在这里插入图片描述
过配置的形式只能添加固定的数据,动态数据还可以通过配置bean的方式为info端点添加信息,此信息与配置信息共存

@Component
public class InfoConfig implements InfoContributor {
    @Override
    public void contribute(Info.Builder builder) {
        builder.withDetail("runTime",System.currentTimeMillis());		//添加单个信息
        Map infoMap = new HashMap();		
        infoMap.put("buildTime","2006");
        builder.withDetails(infoMap);									//添加一组信息
    }
}

Health端点,不能自定义
health端点还可以描述当前应用的运行健康指标,即应用的运行是否成功。通过编程的形式可以扩展指标信息。

@Component
public class HealthConfig extends AbstractHealthIndicator {
    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        boolean condition = true;
        if(condition) {
            builder.status(Status.UP);					//设置运行状态为启动状态
            builder.withDetail("runTime", System.currentTimeMillis());
            Map infoMap = new HashMap();
            infoMap.put("buildTime", "2006");
            builder.withDetails(infoMap);
        }else{
            builder.status(Status.OUT_OF_SERVICE);		//设置运行状态为不在服务状态
            builder.withDetail("上线了吗?","你做梦");
        }
    }
}

当任意一个组件状态不为UP时,整体应用对外服务状态为非UP状态。
在这里插入图片描述

Metrics端点

metrics端点描述了性能指标,除了系统自带的监控性能指标,还可以自定义性能指标。

@Service
public class BookServiceImpl extends ServiceImpl<BookDao, Book> implements IBookService {
    @Autowired
    private BookDao bookDao;

    private Counter counter;

    public BookServiceImpl(MeterRegistry meterRegistry){
        counter = meterRegistry.counter("用户付费操作次数:");
    }

    @Override
    public boolean delete(Integer id) {
        //每次执行删除业务等同于执行了付费业务
        counter.increment();
        return bookDao.deleteById(id) > 0;
    }
}

在性能指标中就出现了自定义的性能指标监控项:
在这里插入图片描述

自定义端点

可以根据业务需要自定义端点,方便业务监控:

@Component
//端点名称,默认是否开启
@Endpoint(id="pay",enableByDefault = true)
public class PayEndpoint {
	//读取端点时,执行以下方法
    @ReadOperation
    public Object getPay(){
        Map payMap = new HashMap();
        payMap.put("level 1","300");
        payMap.put("level 2","291");
        payMap.put("level 3","666");
        return payMap;
    }
}

由于此端点数据spirng boot admin无法预知该如何展示,所以通过界面无法看到此数据,通过HTTP请求路径可以获取到当前端点的信息,但是需要先开启当前端点对外功能,或者设置当前端点为默认开发的端点。
在这里插入图片描述
总结

  1. 端点的指标可以自定义,但是每种不同的指标根据其功能不同,自定义方式不同
  2. info端点通过配置和编程的方式都可以添加端点指标
  3. health端点通过编程的方式添加端点指标,需要注意要为对应指标添加启动状态的逻辑设定
  4. metrics指标通过在业务中添加监控操作设置指标
  5. 可以自定义端点添加更多的指标
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Spring Boot Admin是一个用于监控和管理Spring Boot应用程序的开源工具。它提供了一个Web界面,可以查看应用程序的健康状况、性能指标、日志等信息。同时,Spring Boot Admin还支持自定义监控,可以根据自己的需求添加监控指标,例如数据库连接池的使用情况、缓存命中率等。要实现自定义监控,需要编写自定义Endpoint和Metrics。Endpoint是一个RESTful接口,用于暴露应用程序的信息,例如数据库连接池的使用情况。Metrics是一个用于收集应用程序指标的框架,可以收集应用程序的性能指标、日志等信息。通过自定义Endpoint和Metrics,可以将自定义监控指标添加到Spring Boot Admin的监控界面中,方便管理和监控应用程序的运行情况。 ### 回答2: Spring Boot Admin是一个监控和管理Spring Boot应用的开源项目,它提供了可视化界面,用于展示各个应用的健康情况、动态环境参数以及其他监控指标。默认情况下,Spring Boot Admin会自动监控应用的基本信息,如应用名称、端口号、JVM资源等,并提供诸如线程Dump、内存状态、GC等故障诊断功能。但是,Spring Boot Admin也支持自定义监控指标。 Spring Boot Admin自定义监控是通过Actuator端点暴露应用数据来实现的,这些端点可返回应用的各种度量指标和健康状态。Spring Boot Admin还提供了对自定义端点的简单支持,在不更改应用代码的情况下,可以将自定义端点添加到监控列表中。 实现自定义监控的一般步骤如下: 1.配置Actuator端点。通过配置文件或代码的方式启用所需的端点,如“/health”,“/metrics”,“/heapdump”等。 2.对要监控的数据添加注解。Spring Boot Admin支持许多注解,用于指定要监控的数据类型和数据维度。 3.编写自定义监控的数据收集器。将数据收集器实现为Spring Boot的一个或多个Bean,将它们添加到应用容器中。 4.添加自定义端点。将自定义端点添加到Spring Boot Admin的监控列表中。 示例:下面我们将展示如何通过自定义监控,添加一个数据库查询的计数器 1.配置Actuator端点 在application.properties文件中,添加以下配置: management.endpoints.web.exposure.include=* management.endpoint.metrics.enabled=true 2.添加注解 在我们的查询服务中添加@Timed注解,将监控查询服务的计数器,统计其调用次数。 @Service public class QueryService { ... @Timed("query.count") public List<QueryResult> executeQuery() { ... } ... } 3.实现自定义监控的数据收集器 在我们的收集器中,使用@Endpoint注解标记出我们定义的端点,通过@ReadOperation定义计数器的输出端点。 @Component @Endpoint(id = "querycount") public class QueryCountEndpoint { private QueryService queryService; public QueryCountEndpoint(QueryService queryService) { this.queryService = queryService; } @ReadOperation public Map<String, Integer> queryCount() { return Collections.singletonMap("count", queryService.getCounterCount()); } } 4.添加自定义端点 在启动类中,加入@EndpointWebExtension注解,将QueryCountEndpoint中定义的端点添加到管理界面。 @Configuration public class QueryCountEndpointConfiguration { @Bean public QueryCountEndpoint queryCountEndpoint(QueryService queryService) { return new QueryCountEndpoint(queryService); } ... @EndpointWebExtension public static class QueryCountEndpointWebExtension { private QueryCountEndpoint queryCountEndpoint; public QueryCountEndpointWebExtension(QueryCountEndpoint queryCountEndpoint) { this.queryCountEndpoint = queryCountEndpoint; } @ReadOperation public Map<String, String> queryCount() { return queryCountEndpoint.queryCount().entrySet().stream() .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().toString())); } } } 自定义监控可以定制针对特定应用的监控指标,可提供更深入的应用性能分析和故障排查支持。当完成以上设置后,我们可以在Spring Boot Admin的监控页中看到"query.count"指标,以及它的调用数。 ### 回答3: Spring Boot Admin是一个开源的监控解决方案,它可以帮助我们监控我们的Spring Boot应用程序。Spring Boot Admin可以让我们轻松地获取和可视化我们应用程序的运行时信息,比如应用程序的状态、内存使用、JVM指标、日志等等。但是Spring Boot Admin还是有一些限制的,例如默认只提供了一些基本的指标监控,如果我们需要监控一些自定义指标的话就需要进行相应的定制。 那么如何进行自定义监控呢? 首先,我们需要在启动应用程序时指定一个唯一的ID(instanceId)。这个ID需要在应用程序中进行定义,并且每个应用程序的ID必须是唯一的。我们可以通过在application.yml或application.properties文件中配置“spring.boot.admin.client.instance.name”的属性来设置应用程序的instanceId。 接下来,我们就可以通过自定义Java类来监控自己应用程序的指标了。这个Java类需要实现“de.codecentric.boot.admin.server.domain.values.Metrics”接口,并且需要在应用程序中进行定义。在这个Java类中,我们可以实现自己需要监控的指标的定义和收集,并且将这些数据传递给Spring Boot Admin的监控系统。 最后,我们需要将定义好的Java类添加到Spring Boot Admin的监控系统中。我们可以通过在application.yml或application.properties文件中配置“spring.boot.admin.monitor.custom.metrics”属性,将我们自定义的监控类添加到Spring Boot Admin中。 除了自定义监控类,我们还可以通过其他方式来进行自定义监控。例如,我们可以使用集成了Micrometer的监控系统,通过配置对应的指标收集器来收集我们需要监控的指标,并且将这些数据传递给Spring Boot Admin的监控系统。 总之,Spring Boot Admin提供了一些很方便的监控功能,但是如果我们需要监控一些自定义的指标的话,就需要进行相应的定制。通过上述方式,我们可以轻松地实现自定义监控,并且获取我们需要的监控信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值