• SpringCloud微服务的监控器,Actuator


    前言

    在微服务系统里,对微服务程序的运行状况的跟踪和监控是必不可少的;例如GPE,Telegraf+influxDB都提供了微服务体系监控的方案, ZIPKIN, Skywalking都提供了微服务云体系的APM的方案; 这些解决方案功能全面;但是都需要提供额外的资源进行架构; 其实在SpringBoot构建的微服务中本身就带有了Actuator组件,能够提供相关的功能,如果我们对此要求不特别高,我们可以在自己的微服务中开启Actuator的功能即可;

    Spring Boot Actuator

    Spring Boot Actuator是SpringBoot框架的一个子项目。它使用HTTP的方式公开任何正在运行的应用程序的操作信息。Spring Boot Actuator直接是内嵌如我们的微服务中,可以直接从生产就绪的应用程序中获取健康和监控指标。通过Actuator,收集度量、了解流量或了解数据库状态变得非常容易。今天咱们这个文章,我们一起来看看如何使用和配置Spring Boot Actuator。

    引入Actuator

    在项目pom.xml文件里,引入actuator的依赖包

    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-actuatorartifactId>
    4. dependency>

    服务端点(ENDPOINT)

    Spring Boot Actuator通过HTTP的方式为使用者提供了一个内置端点列表;端点列表可以展示出应用程序的操作信息;通过Actuator的技术规范,开发者可以在自己的相关组件中实现Actuator的Endpoint,而启用组件相关的端点信息;在最新版本中,默认情况下,Actuator启动后,默认启用了两个端点,/health和/info。

    启动Spring Boot的应用; 根据应用的端口,在http://IP:port/context/actuator 这个地址,就可以查看到应用的Actuator信息

    默认情况下,只启用health和info两个Endpoint; 我们通过exposure的配置,对可以暴露的Endpoint进行配置;

    在yaml或者properties中配置

    暴露部分端点

    management.endpoints.web.exposure.include=info,health,beans,env

    暴露所有端点

    management.endpoints.web.exposure.include=*

    不暴露beans端点

    management.endpoints.web.exposure.exclude=beans

    在图中出现了很多的比如:http://localhost:7500/codeman/actuator/nacosdiscovery;这是由于其他的nacos-discovery-starter扩展了自己的Endpoint;

    每个这里的endpoint都可以通过http进行访问;比如: http://localhost:7500/codeman/actuator/health

    路径映射和端口

    最新版本中;默认情况所有端点都暴露在“/actuator”路径下,可以通过路径映射来修改默认的路径,这个方法也是一种比较简易的安全保护方法;把默认值换成自己的值;

    配置

    management.endpoints.web.base-path=/manage

    通过上面的配置就把路径换成了自己的manager路径,需要使用xxxx/manage来进行访问,避免其他的外部使用者猜到路径;

    也可以通过路径映射,去修改endpoint的访问路径

    配置

    management.endpoints.web.path-mapping.info=_info

    通过上面的配置将info修改成_info

    默认情况下,actuator使用和应用相同的端口;也可以配置actuator使用自己的端口

    配置

    management.server.port=17501

    路径映射和端口保护,是最简单的安全保护的一种方法; 也可以使用spring-boot-starter-security模板的集成,来更高级的对actuator的访问进行保护,文本就不介绍,朋友们可以自行去查看spring boot security的集成,或者关注笔者后面的文章,将对会security的集成进行介绍。

    常用的Endpoint

    常用的Endpoint

    推荐大家一定要自行去试试并查看以下Endpoint;这几个Endpoint是排查Spring Boot非常有用的Endpoint

    /health 端点;应用健康信息是一个汇总的信息; management.endpoint.health.show-details=always开启详细信息

    /metrics 端点;当前应用的各类重要度量指标,比如:内存信息、线程信息、垃圾回收信息、tomcat、数据库连接池等

    /beans 端点;当前应用的各Bean对象的注册信息

    /heapdump 端点 ;自动生成一个 当前Jvm 的堆文件 heapdump。

    /threaddump 端点;当前线程的情况。 主要展示了线程名、线程ID、线程的状态、是否等待锁资源、线程堆栈等信息

    Endpoint扩展

    如上图中我们看到的http://localhost:7500/codeman/actuator/nacosdiscovery;不是默认的actuator的端点,是nacos-discovery-starter扩展的Endpoint;用来对获取和知悉Nacos Discovery当前的信息; 有时候我们需要去扩展自己的Endpoint;

    定义Endpoint入口

    1. @Slf4j
    2. @Endpoint(id = "feign-info")
    3. @Component
    4. public class FeignSampleEndpoint{
    5. @ReadOperation
    6. public FeignSampleState detailState(@Selector String[] paths){
    7. FeignSampleState state = feignSampleState;
    8. if(paths!=null){
    9. Arrays.stream(paths).forEach( one-> {
    10. state.getInfo().put(one , one );
    11. });
    12. }
    13. return state;
    14. }
    15. }

    这个就是一个简单的Endpoint定义, 通过@Endpoint(id="feign-info"),定义了一个feign-info的Endpoint, 方法@ReadOperation使用Get @DeleteOperation使用Delete协议 @WriteOperation使用Post协议

    定义后就可以通过 xxxx/actuator/feign-info 来进行Endpoint的访问Endpoint了;

    Endpoint一个坑

    如上当有参数的时候; Endpoint会失效,原因

    在java 1.8以下几某些1.8低版本中编译出来的class是无法取到参数名的,会导致该接口使用失败,需要在编译时添加-parameters参数然后进行编译

    1. <plugin>
    2. <groupId>org.apache.maven.pluginsgroupId>
    3. <artifactId>maven-compiler-pluginartifactId>
    4. <version>3.1version>
    5. <configuration>
    6. <compilerArgument>-parameterscompilerArgument>
    7. configuration>
    8. plugin>

    具体可以参考文章《使用SpringBoot里Endpoint中遇到的一个小坑

    结束语

    Spring Boot Actuator提供了Spring Boot应用服务的健康和监控指标的信息功能;开箱即用非常的方便;不过相对来说功能也比较简单,没有提供较完整的报表和图表功能;如果要有更好的效果,还是要使用第三方的APM和系统监控产品,比如GPE,InfluxDB2 + Telegraf等; 这些主题笔者都在自己的微服务体系中搭建和在生产中实际使用过,如果需要了解的朋友可以在本文下方留言讨论; 谢谢大家持续关注;

    想知悉哪些相关的技术点;欢迎大家们在回复区进行回复,咱们将汇总大家感兴趣的知识点和热点给大家进行介绍; 希望大家多多的交流和探讨!!!!

    谢谢大家的关注!!!

  • 相关阅读:
    逍遥自在学C语言 | 多级指针探秘
    域名列入备案黑名单解除教程
    java计算机毕业设计高校疫情管理源码+数据库+系统+lw文档+mybatis+运行部署
    Activity 的销毁流程
    【JavaSE】多线程篇(一)线程的相关概念与线程的基本使用
    网络安全工程师日常工作有哪些?初学者怎么适应
    【校招VIP】前端项目开发之正则表达
    阿里云FPGA计算型f3云服务器配置性能详解
    K8s Pod的QoS类
    LeetCode:746. 使用最小花费爬楼梯【动态规划】
  • 原文地址:https://blog.csdn.net/inthirties/article/details/126850399