Actuator是什么?

Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用。这个模块是一个采集应用内部信息暴露给外部的模块,上述的功能都可以通过HTTP 和 JMX 访问。

因为暴露内部信息的特性,Actuator 也可以和一些外部的应用监控系统整合(Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等)。这些监控系统提供了出色的仪表板,图形,分析和警报,可帮助你通过一个统一友好的界面,监视和管理你的应用程序。

Actuator使用Micrometer与这些外部应用程序监视系统集成。这样一来,只需很少的配置即可轻松集成外部的监控系统。

Actuator 使用

引入依赖

我们新建一个项目:jlw-actuator

  1. 引入 spring-boot-starter-actuator 的Maven依赖

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
  2. 启动项目,访问:/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

  1. 在配置文件添加以下配置,自定义base-path属性

    management:
    endpoints:
    web:
    base-path: /jinglingwang #https://jinglingwang.cn/archives/actuator
  2. 访问地址更改为:/jinglingwang/health

健康信息

/health端点会聚合程序的健康指标来检查程序的健康情况,默认配置值是never,不会显示详细信息,还有when-authorizedalways两个选项值可配置。

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 端点

  1. 默认情况下,除shutdown之外的所有端点都处于启用状态。

    management:
    endpoint:
    shutdown:
    enabled: true

    注意是endpoint,不是endpoints

    生产环境使用需慎重!

  2. 然后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来做安全校验。

  1. 引入Security相关依赖

    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-security</artifactId>
    </dependency>
  2. 配置好用户名密码

    spring:
    security:
    user:
    name: jinglingwang
    password: jinglingwang.cn
    roles: ENDPOINT_ADMIN
  3. 端点访问配置

    @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并且能够非常方便的对其进行扩展。

  1. 引入Prometheus依赖

    由于我们使用springboot的是2.X,其中已经包含了io.micrometer相关的包,不需要再次引入,如果使用的springboot版本是1.X,需要自己额外引入。

    <dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-core</artifactId>
    <version>${micrometer.version}</version>
    </dependency>
  2. 引入micrometer-registry-prometheus包,提供了基于actuator的端点,访问路径是**/prometheus

    <dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    <scope>runtime</scope>
    </dependency>
  3. 开放所有端点,或者至少/metrics端点

    management.endpoint.metrics.enabled=true
  4. 然后访问http://localhost:8181/jinglingwang/prometheus,即可看到相关数据

安装Prometheus

  1. 下载Prometheus:https://prometheus.io/download/

    我本地环境是Win10

  2. 直接解压到自定义目录

  3. 修改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

  4. 启动Prometheus

    Win10 直接运行prometheus.exe就可以了,默认端口是9090.

  5. 访问控制台页面: 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完成导致模板。

最后效果图如下:

参考:

  1. https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#
  2. https://elkguide.elasticsearch.cn/elasticsearch/other/grafana.html

⑧SpringCloud 实战:引入 Actuator监控+整合监控页面的更多相关文章

  1. Decoration5:引入Actuator进行站点监控

    1.添加依赖 2.重启应用 3.下图显示了一些默认的监控端点 这是数据可以在前台用来做饼图和柱状图什么的,不过实际上我们现在还用不到,于是就不深入研究

  2. SpringBoot整合Actuator进行健康监控

    一.Actuator介绍 SpringBoot自带监控功能Actuator,通过 restful api 请求来监管.审计.收集应用的运行情况,可以帮助实现对程序内部运行情况监控,比如监控状况.Bea ...

  3. ④SpringCloud 实战:引入Hystrix组件,分布式系统容错

    这是SpringCloud实战系列中第4篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...

  4. ⑤SpringCloud 实战:引入Zuul组件,开启网关路由

    这是SpringCloud实战系列中第4篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...

  5. ⑥SpringCloud 实战:引入gateway组件,开启网关路由功能

    这是SpringCloud实战系列中第4篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...

  6. ⑦SpringCloud 实战:引入Sleuth组件,完善服务链路跟踪

    这是SpringCloud实战系列中第7篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...

  7. Druid 配置及内置监控,Web页面查看监控内容 【我改】

    转: Druid 配置及内置监控,Web页面查看监控内容 1.配置Druid的内置监控 首先在Maven项目的pom.xml中引入包 1 2 3 4 5 <dependency>      ...

  8. Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 应用监控

    文章目录 1. 快速开始 2. 监控和管理端点3. 定制端点 2.1. health 应用健康指标 2.2. info 查看应用信息 2.3. metrics 应用基本指标 2.4. trace 基本 ...

  9. 19.SpringCloud实战项目-SpringCloud整合Alibaba-Nacos配置中心

    SpringCloud实战项目全套学习教程连载中 PassJava 学习教程 简介 PassJava-Learning项目是PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. ...

随机推荐

  1. 【PY从0到1】第七节 函数

    # 7 第七节 函数 # 函数对于编程语言来说是一块重量级的内容. # 他可以实现或者简化编写的代码. # 编写好特定功能的函数后,就可以重复调用函数来完成任务. # 下面我们就用函数的形式来封装前面 ...

  2. Nginx,Nginx 搭建图片服务器

    Nginx Nginx 概述 反向代理 工作流程 优点 1:保护了真实的web服务器,保证了web服务器的资源安全 2:节约了有限的IP地址资源 3:减少WEB服务器压力,提高响应速度 4:其他优点 ...

  3. SpringBoot - 实现文件上传2(多文件上传、常用上传参数配置)

    在前文中我介绍了 Spring Boot 项目如何实现单文件上传,而多文件上传逻辑和单文件上传基本一致,下面通过样例进行演示. 多文件上传 1,代码编写 1)首先在 static 目录中创建一个 up ...

  4. cf-1230C Anadi and Domino

    题目链接:http://codeforces.com/contest/1230/problem/C 题意: 有21 个多米诺骨牌,给定一个无向图(无自环,无重边),一条边上可以放一个多米诺骨牌.如果两 ...

  5. AtCoder Beginner Contest 182 D - Wandering (前缀和)

    题意:在\(x\)轴上,你刚开始在\(0\)的位置,第\(i\)次操作需要走\(A_1,...,A_i\)个单位,如果\(A_i\)为正向右走,否则向左走,求你所能走到的最大坐标. 题解:我们一步一步 ...

  6. 用了很多年Dubbo,连Dubbo线程池监控都不知道,觉得自己很厉害?

    前言 micrometer中自带了很多其他框架的指标信息,可以很方便的通过prometheus进行采集和监控,常用的有JVM的信息,Http请求的信息,Tomcat线程的信息等. 对于一些比较活跃的框 ...

  7. .Net下的PDF打印

    简单研究了一下.Net下的PDF打印,一路发现了很多小坑. 第三方组件 这里使用的解析PDF的组件是mupdf,特点和C#调用在 这里 有介绍. 实现的功能 支持页面大小.边距.打印机选择.打印机dp ...

  8. 洛谷 P4143 采集矿石 后缀数组

    题目背景 ZRQ 成功从坍塌的洞穴中逃了出来.终于,他看到了要研究的矿石.他想挑一些带回去完成任务. 题目来源:Zhang_RQ哦对了 \(ZRQ\) 就他,嗯 题目描述 ZRQ 发现这里有 \(N\ ...

  9. kubernetes进阶(三)服务发现-coredns

    服务发现,说白了就是服务(应用)之间相互定位的过程. 服务发现需要解决的问题: 1.服务动态性强--容器在k8s中ip变化或迁移 2.更新发布频繁--版本迭代快 3.支持自动伸缩--大促或流量高峰 我 ...

  10. springmvc拦截器实现登录验证

    首先创建一个实体类: Customer: 1 package com.petcare.pojo.base; 2 3 import java.sql.Date; 4 import java.sql.Ti ...