SpringBoot Actuator埋点和监控及简单使用

目录
  • 1. 数据埋点
  • 2. Micrometer
    • 2.1 简单使用
    • 2.2 命名规范
  • 3. SpringBoot Actuator
    • 3.1 添加依赖
    • 3.2 基础配置
    • 3.3 查看可消费的端点
    • 3.4 获取应用的基本信息
    • 3.5 健康指标
    • 3.6 指标端点 metrics
  • 4. 实例
    • 4.1 测试接口
    • 4.2 消费指标端点
  • 5. SpringBoot Admin
    • 5.1 Admin 服务器端
      • 5.1.1 启用功能、添加依赖
      • 5.1.2 选择一个端口
      • 5.1.3 访问
    • 5.2 Client 客户端
      • 5.2.1 添加依赖
      • 5.2.2添加配置
      • 5.2.3 访问 admin-serve
    • 5.3 Eureka 服务器发现
      • 5.3.1 加依赖
      • 5.3.2 添加配置
  • 6 缺点

项目中看到了有埋点监控、报表、日志分析,有点兴趣想慢慢捣鼓一下

1. 数据埋点

监控机器环境的性能和业务流程或逻辑等各项数据,并根据这些数据生成对应的指标,那么我们就称为数据埋点。比如我们想知道某个接口调用的 TPS、机器 CPU 的使用率,这些都可以用到数据埋点

2. Micrometer

Micrometer 为流行的各种监控系统提供了一个简单的门面(类似于日志门面) —— 提供了与供应商无关的接口(counters,timers,gauges等),这些接口称为 meter 接口,其由 MeterRegistry 创建并保存,可理解为 MeterRegistry 是个集合里面存储了各种 meter 的度量数据,下面展示最简单的 counter 接口的使用

2.1 简单使用

其还有 timers、gauges 等接口,自行查阅

// 创建一个 meter 注册中心
MeterRegistry registry = new SimpleMeterRegistry(); 

// 创建一个名为 test 度量
Counter counter = meterRegistry.counter("test");

// 让这个度量的计数加 1
counter.increment();

就是如此简单,比如在调用指定接口的时候,可以使用 counter 接口来度量调用的次数,频率等等

2.2 命名规范

Micrometer 命名用 . 分隔小写单词字符,在接入其他监控系统时会自动将命名转成其适应的格式(或者可重写一个 NamingConvention 转换器来覆盖默认命名转换)。而且还支持多标签来量化,即有了多维度的度量,使统计更加丰富。下面简单地举例命名规范:

# 表示 http 请求
Counter counter = meterRegistry.counter("http.server.requests");

# 表示 http 请求中,请求 user 模块
Counter counter = meterRegistry.counter("http.server.requests", "user");

# 表示 http 请求中,请求 user 模块中,请求 login 登录方法
Counter counter = meterRegistry.counter("http.server.requests", "user", "login");

3. SpringBoot Actuator

SpringBoot Actuator 其底层使用了 Mircometer ,可度量 SpringBoot 应用和获取它的各项指标,可通过 HTTP 或 JMX 来调用 Actuator 暴露的各种端点,然后就可以获取一个正在运行中的应用的内部状态

当然内部指标并不是所有都可以向外暴露的,所以我们得有选择的开放,或者加入权限校验之后才能获取如下内容:

  • 有那些可配置的属性
  • 各依赖包的日志级别
  • 占用了多少内存
  • HTTP 埋点被请求了多少次
  • 应用本身以及协作的外部服务的健康状态
  • ......

3.1 添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>2.4.3</version>
</dependency>

3.2 基础配置

management:
  server:
    port: 9090							# 一般启动独立端口(默认和应用端口一致),启用后源端口不可查
  endpoints:
    web:
      base-path: /actuator				# 默认前缀路径,可修改
      exposure:
        include: health,info,metrics	# 向外暴露的端点,可用通配符('*',需要单引号)
        exclude: env,heapdump			# 排除暴露的端点

3.3 查看可消费的端点

可先用 HTTP 访问 localhost:9090/actuator 来获取 HATEOAS(可简单理解为暴露的端点文档),它是所有可暴露端点的地图,可通过属性对应的地址来获取的指标,内容如下:

{
  "_links": {
    "self": {
      "href": "http://localhost:9090/actuator",
      "templated": false
    },
    "health-path": {
      "href": "http://localhost:9090/actuator/health/{*path}",
      "templated": true
    },
    "health": {
      "href": "http://localhost:9090/actuator/health",
      "templated": false
    },
    "info": {
      "href": "http://localhost:9090/actuator/info",
      "templated": false
    }
  }
}

3.4 获取应用的基本信息

消费对应的指标,就在地址后面加上名字即可。应用的基本信息是需要自己配置的,没有默认值,所以首次访问 可访问 localhost:9090/actuator/info 是一个空 json。

可配置 info 开头的属性,比如联系方式,应用的作用等等,其配置和消费结果如下:

info:
  contact:
    email: support@howl.com
    phone: 123456789
  description: actuator test application

# 消费结果
{
  "contact": {
    "email": "support@howl.com",
    "phone": 123456789
  },
  "description": "actuator test application"
}

3.5 健康指标

首先尝试访问 localhost:9090/actuator/health,就可以获取指标内容了

{
  "status": "UP"
}

这里显示的是一个或多个健康指示器的聚合状态,即当前应用和与之交互的外部系统(数据库,消息队列,Eureka等等)的健康状态的聚合状态。我们可以添加如下配置来获取健康指示器的内聚状态

management:
  endpoint:
    health:
      show-details: always

# 消费结果
{
  "status": "UP",
  "components": {
    "diskSpace": {
      "status": "UP",
      "details": {
        "total": 493516484608,
        "free": 436332154880,
        "threshold": 10485760,
        "exists": true
      }
    },
    "ping": {
      "status": "UP"
    }
  }
}

SpringBoot 的自动配置功能可以确保只有与应用交互的组件才会显示到 health 里面

3.6 指标端点 metrics

可访问如下地址来获取 Actuator 提供的开箱即用的指标分类,包括了内存、处理器、垃圾收集、HTTP请求等指标

http://localhost:9090/actuator/metrics

# 消费结果
{
  "names": [
    "http.server.requests",
    "jvm.buffer.count",
    "jvm.buffer.memory.used",
    "jvm.buffer.total.capacity",
    "jvm.classes.loaded",
    "jvm.classes.unloaded",
    "jvm.gc.live.data.size",
    "jvm.gc.max.data.size",
    "jvm.gc.memory.allocated",
    "jvm.gc.memory.promoted",
    "jvm.gc.pause",
    "jvm.memory.committed",
    "jvm.memory.max",
    "jvm.memory.used",
    "jvm.threads.daemon",
    "jvm.threads.live",
    "jvm.threads.peak",
    "jvm.threads.states",
    "logback.events",
    "process.cpu.usage",
    "process.start.time",
    "process.uptime",
    "system.cpu.count",
    "system.cpu.usage",
    "tomcat.sessions.active.current",
    "tomcat.sessions.active.max",
    "tomcat.sessions.alive.max",
    "tomcat.sessions.created",
    "tomcat.sessions.expired",
    "tomcat.sessions.rejected"
  ]
}

# 可用标准地址 + 指标端点名字 来消费某个指标端点
http://localhost:9090/actuator/metrics/http.server.requests

4. 实例

统计 /user/login 接口被调用的次数,meterRegistry 注册中心在自动配置中加入容器可直接使用

4.1 测试接口

启动应用,然后多次访问这个接口

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    SimpleMeterRegistry meterRegistry;

    @GetMapping("/login")
    public String userLogin() {
        Counter counter = meterRegistry.counter("http.server.requests", "uri", "/user/login");
        counter.increment();
        return "登录成功";
    }
}

4.2 消费指标端点

访问如下地址即可消费端点

http://localhost:9090/actuator/metrics/http.server.requests?tag=uri:/user/login

# 消费结果
# 可以看到这个接口度量(COUNT)了 18次 访问(数据做了部分清除)
{
  "name": "http.server.requests",
  "baseUnit": "seconds",
  "measurements": [
    {
      "statistic": "COUNT",
      "value": 18.0
    }
  ],
  "availableTags": [
    {
      "tag": "method",
      "values": [
        "GET"
      ]
    }
  ]
}

5. SpringBoot Admin

使用上面的地址访问指标很不友好,不可能看一堆这样的数据,得使用一些美化的 UI 界面,SpringBoot Admin 就提供了这样的框架

SpringBoot Admin 作为简单的监控,分为 服务器端 和 客户端

5.1 Admin 服务器端

作为监控的服务端一般是在另外一台服务器上部署的,然后这台服务器会定时去配置好的地址里面拉取监控的指标数据

5.1.1 启用功能、添加依赖

在初始化应用的时候在 Spring Initializr 也可以选择

@EnableAdminServer
@SpringBootApplication
public class AdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminApplication.class, args);
    }
}
<dependency>
     <groupId>de.codecentric</groupId>
     <artifactId>spring-boot-admin-starter-server</artifactId>
     <version>2.4.3</version>
</dependency>

5.1.2 选择一个端口

server:
  port: 10000

5.1.3 访问

直接访问 10000 端口即可,当然现在没有东西可以监控,主页面是空白没应用的

5.2 Client 客户端

5.2.1 添加依赖

<!--  actuator  -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>2.4.3</version>
</dependency>

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

5.2.2添加配置

# 服务端用客户端的主机名来通信,但在虚拟机上客户端主机名会解析不正确,导致实例一直下线状态
# 此时需要如下配置

spring:
  application:
    name: actuatorApplicaton
  boot:
    admin:
      client:
        url: http://admin-serve-ip:10000						# 向服务端定时发送请求
        instance:
          service-url: http://admin-client-ip:8080				# 主页
          management-base-url: http://admin-client-ip:9090		# 各类指标的基础地址

5.2.3 访问 admin-serve

访问即可发现有个应用的指标被获取了,然后里面可以看各种已经暴露的端点指标

5.3 Eureka 服务器发现

上面每启动一个客户端都要手动进行配置监控的 IP 地址很是麻烦,既然微服务架构有服务发现机制的,那么我们可以在监控的服务端上配置 Eureka 的地址,那么 Admin-Server 就会去注册中心获取地址再去拉取指标

5.3.1 加依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <version>2.4.3</version>
</dependency>

5.3.2 添加配置

eureka:
  client:
    service-url:
      defaultZone: http://xxx.xxx.xxx.xxx:xxx/eureka/

6 缺点

笔者个人觉得个人小型项目用这个组合来监控埋点已经足够了,加上警告处理都是很不错的选择,但是 SpringBoot Admin 只能监控短时间内的应用信息,如果需要各时间段的监控那么就需要有时序数据库的支持(比如查看这个月内的统计信息),这些就显得无能为力了。

当然还是有代替方案的:

  • Actuator:埋点操作
  • Promethus:定期去 actuator 拉取数据并以时序的形式存储(内部有时序数据库)
  • Granfan:用户友好的 UI 数据展示,展示 Promethus 的数据

到此这篇关于SpringBoot Actuator埋点和监控的文章就介绍到这了,更多相关SpringBoot Actuator监控内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

到此这篇关于SpringBoot Actuator埋点和监控及简单使用的文章就介绍到这了,更多相关SpringBoot Actuator监控内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用SpringBoot Actuator监控应用示例

    Actuator是Spring Boot提供的对应用系统的自省和监控的集成功能,可以对应用系统进行配置查看.相关功能统计等. 使用Actuator 引入依赖即可 Maven : <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> Gradl

  • 详解关于springboot-actuator监控的401无权限访问

    今天心血来潮看一下spring监控 访问/beans 等敏感的信息时候报错 Tue Mar 07 21:18:57 GMT+08:00 2017 There was an unexpected error (type=Unauthorized, status=401). Full authentication is required to access this resource. application.properties添加配置参数 management.security.enabled=

  • SpringBoot 监控管理模块actuator没有权限的问题解决方法

    SpringBoot 1.5.9 版本加入actuator依赖后,访问/beans 等敏感的信息时候报错,如下 Tue Mar 07 21:18:57 GMT+08:00 2017 There was an unexpected error (type=Unauthorized, status=401). Full authentication is required to access this resource. 肯定是权限问题了.有两种方式: 1.关闭权限:application.prop

  • SpringBoot 指标监控actuator的专题

    目录 1.写在前面 2.SpringBoot Actuator 3.定制化Endpoint 3.1 定制health端点信息 3.2 定制info端点信息 1.写在前面 首先肯定要说一下SpringBoot的四大核心了: 自动装配:简单配置甚至零配置即可运行项目 起步依赖:场景启动器 Actuator:指标监控 命令行界面 :命令行 这篇文章呢,我来和大家聊聊指标监控这个东西. 2.SpringBoot Actuator 未来每一个微服务在云上部署以后,我们都需要对其进行监控.追踪.审计.控制等

  • springboot 使用Spring Boot Actuator监控应用小结

    微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台的业务流会经过很多个微服务的处理和传递,出现了异常如何快速定位是哪个环节出现了问题? 在这种框架下,微服务的监控显得尤为重要.本文主要结合Spring Boot Actuator,跟大家一起分享微服务Spring Boot Actuator的常见用法,方便我们在日常中对我们的微服务进行监控治理. Actuator监控 Spring Boot使用"习惯优于配置的理念",采用包

  • 一文搞懂并学会使用SpringBoot的Actuator运行状态监控组件的详细教程

    目录闲言碎语:背景Actuator介绍Rest方法来查看Actuatorpom.xml引入Actuator依赖配置application.yml运行项目Actuator配合SpringBootSecurity配置application.xml运行项目配置关闭项目API端口配置application.yml命令行执行post关闭指令附:Actuator端口信息附:SpringBoot自带的健康指示器赠言 闲言碎语:   最近刷抖音,看到了星爷的很多电影,感叹星爷给后世留下了很多的经典作品,我就在想

  • SpringBoot Actuator埋点和监控及简单使用

    目录 1. 数据埋点 2. Micrometer 2.1 简单使用 2.2 命名规范 3. SpringBoot Actuator 3.1 添加依赖 3.2 基础配置 3.3 查看可消费的端点 3.4 获取应用的基本信息 3.5 健康指标 3.6 指标端点 metrics 4. 实例 4.1 测试接口 4.2 消费指标端点 5. SpringBoot Admin 5.1 Admin 服务器端 5.1.1 启用功能.添加依赖 5.1.2 选择一个端口 5.1.3 访问 5.2 Client 客户端

  • Spring Boot Actuator监控的简单使用方法示例代码详解

    Spring Boot Actuator帮助我们实现了许多中间件比如mysql.es.redis.mq等中间件的健康指示器. 通过 Spring Boot 的自动配置,这些指示器会自动生效.当这些组件有问题的时候,HealthIndicator 会返回 DOWN 或 OUT_OF_SERVICE 状态,health 端点 HTTP 响应状态码也会变为 503,我们可以以此来配置程序健康状态监控报警. 使用步骤也非常简单,这里演示的是线程池的监控.模拟线程池满了状态下将HealthInicator

  • springboot Actuator的指标监控可视化功能详解

    springboot为我们提供了丰富的指标监控功能SpringBoot Actuator SpringBoot Actuator是springboot为简化我们对微服务项目的监控功能抽取出来的模块,使得我们每个微服务快速引用即可获得生产界别的应用监控.审计等功能. 后序文章会更新使用 我们先来看看怎么可视化 我们可以通过github上的开源项目 这里 我们创建一个springboot项目 作为可视化的服务端 使用新功能首先都是引入依赖 需要web项目 <dependency> <grou

  • SpringBoot配置Actuator组件,实现系统监控

    目录 一.Actuator简介 二.与SpringBoot2.0整合 1.核心依赖Jar包 2.Yml配置文件 三.监控接口详解 1.Info接口 2.Health接口 3.Beans接口 4.Conditions接口 5.HeapDump接口 6.Mappings接口 7.ThreadDump接口 8.ShutDown接口 四.源代码地址 一.Actuator简介 监控分类 Actuator 提供Rest接口,展示监控信息. 接口分为三大类: 应用配置类:获取应用程序中加载的应用配置.环境变量

  • springboot线程池监控的简单实现

    目录 背景 代码 代码类结构 线程池扩展类 线程工具类 线程bean类 线程池实现类 线程池监控接口类 运行结果 背景 在我们实际项目开发中,常常会为不同的优先级的任务设置相对应的线程池. 一般我们只关注相关池的相关参数如核心线程数据,最大线程数据等等参数,容易忽略了对线程池中实际运行情况的监控. 综上所述:线程池如果相当于黑盒一样在运行的话,对系统的不利的.本文提供了一种简单获取线程池运行状态的方式,可以将详情打印到日志或者对接到Prometheus上进行展示. 详细有不少博主给出了动态修改线

  • Springboot actuator生产就绪功能实现解析

    Spring Boot包含许多附加功能,可帮助您在将应用程序投入生产时对其进行监视和管理.可以选择使用HTTP端点或JMX管理和监视您的应用程序.审核,运行状况和指标收集可以自动应用于您的应用程序. Springboot Actuator,它提供了很多生产级的特性,比如说监控和度量spring boot应用程序.Actuator的这些特性可以通过众多的REST断点,远程shell和JMX获得. 只有基于Spring MVC的应用程序才可以通过HTTP终端来监控应用程序的运行指标. 使用Sprin

  • SpringBoot+Prometheus+Grafana实现应用监控和报警的详细步骤

    背景 SpringBoot的应用监控方案比较多,SpringBoot+Prometheus+Grafana是目前比较常用的方案之一.它们三者之间的关系大概如下图: 开发SpringBoot应用 首先,创建一个SpringBoot项目,pom文件如下: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</art

  • SpringBoot actuator 健康检查不通过的解决方案

    SpringBoot actuator 健康检查不通过 今天遇到有个服务能够注册成功,但是健康检查不通过,通过浏览器访问健康检查的url,chrome的network一直显示pending,说明这个请求提交了,但是得不到返回,卡住了. 原来以为健康检查就是检查服务端口下的/health这个请求本身是否能正常返回,其实不是. 所谓健康检查是有很多检查项的,springboot中继承AbstractHealthIndicator的类,比如DataSourceHealthIndicator Redis

  • SpringBoot Actuator潜在的OOM问题的解决

    目录 背景&问题 问题原因及解决 默认埋点是如何生效的 http.client.requests 中的 uri 解决 会不会 OOM 此问题背景产生于近期需要上线的一个功能的埋点:主要表现就是在应用启动之后的一段时间内,内存使用一直呈现递增趋势. 下图为场景复线后,本地通过 jconsole 查看到的内部使用走势图. 实际环境受限于配置,内存不会膨胀 背景&问题 应用 a 使用 rest template 通过 http 方式调用 应用 b,应用项目中开启了 actuator,api 使用

  • SpringBoot Actuator未授权访问漏洞修复详解

    目录 1.写在前面 2.问题描述 3.安全问题 4.禁止方法 5.完全禁用Actuator 1.写在前面 目前SpringBoot得框架,越来越广泛,大多数中小型企业,在开发新项目得时候.后端语言使用java得情况下,首选都会使用到SpringBoot. 在很多得一些开源得框架中,例如: ruoyi若以,这些. 不知道是出于什么原因?我们都会在这些框架中得pom文件中找到SpringBoot Actuator的依赖. 嘿,这Actuator估计很多人都没有真真实实使用过,但是就会出现在pom文件

随机推荐