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. Python骚操作从列表推导和生成器表达式开始

    序列 序列是指一组数据,按存放类型分为容器序列与扁平序列,按能否被修改分为不可变序列与可变序列. 容器序列与扁平序列 容器序列存放的是对象的引用,包括list.tuple.collections.de ...

  2. wmi_exporter+Prometheus+Grafana

    wmi_exporter+Prometheus+Grafana 原文地址: CSDN:NRlovestudy:Windows 下搭建 wmi_exporter+Prometheus+Grafana 服 ...

  3. Dockerfile,Dockerfile 参考文档

    Dockerfile,Dockerfile 参考文档 1.Dockerfile 1.1Usage 1.2Format 1.3Parser directives 1.4escape 1.5Environ ...

  4. k8s 调度 GPU

    最近公司有项目想在 k8s 集群中运行 GPU 任务,于是研究了一下.下面是部署的步骤. 1. 首先得有一个可以运行的 k8s 集群. 集群部署参考 kubeadm安装k8s 2. 准备 GPU 节点 ...

  5. Vuejs 基础学习教程

    (四)构建基础进阶-env文件与环境设置 我们在实际开发中,我们一般会经历项目的开发阶段,测试阶段,和最终上线阶段,每个阶段对于项目代码的需要可能都有所不同,那我们怎么让它在不同阶段呈现不同的效果呢? ...

  6. HDU5732 Subway【树重心 树哈希】

    HDU5732 Subway 题意: 给出两棵大小为\(N\)的同构树,要求输出对应的节点 \(N\le 10^5\) 题解: 由于重心最多只有两个,找到重心之后以重心为根进行树哈希,找到相同哈希值的 ...

  7. Codeforces Round #628 (Div. 2) D. Ehab the Xorcist(异或,思维题)

    题意: 寻找异或后值为 u,相加后和为 v 的最短数组. 思路: 异或得 u ,则 v 至少应大于等于 u ,且多出来的部分可以等分为两份相消. 即初始数组为 u , (v-u)/2 , (v-u)/ ...

  8. AtCoder Beginner Contest 179 D - Leaping Tak (DP)

    题意:给你一个数字\(n\)和\(k\)个区间,\(S\)表示所有区间的并的集合,你目前在\(1\),每次可以从集合中选择一个数字向右移动,问有多少种方法从\(1\)走到\(n\). 题解:我们从1开 ...

  9. Successor HDU - 4366 分块

    代码+注释: 1 /* 2 题意: 3 一共有n个人,其中0号是总裁(金字塔顶尖).后面输入其他n-1个人的信息啊a.b.c,分别代表第i个人的上级是a,他的 4 忠诚度为b,他的能力为c.后面有m次 ...

  10. C# 替换文件名的字符

    https://www.cnblogs.com/lindexi/p/8970466.html