4

实战:使用Spring Boot Admin实现运维监控平台

 2 years ago
source link: https://blog.51cto.com/u_1387424/5166437
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

我们知道,使用Actuator可以收集应用系统的健康状态、内存、线程、堆栈、配置等信息,比较全面地监控了Spring Boot应用的整个生命周期。但是还有一个问题:如何呈现这些采集到的应用监控数据、性能数据呢?在这样的背景下,就诞生了另一个开源软件Spring Boot Admin。下面就来介绍什么是Spring Boot Admin以及如何使用Spring Boot Admin搭建完整的运维监控平台。

一、什么是Spring Boot Admin

Spring Boot Admin是一个管理和监控Spring Boot应用程序的开源项目,在对单一应用服务监控的同时也提供了集群监控方案,支持通过eureka、consul、zookeeper等注册中心的方式实现多服务监控与管理。Spring Boot Admin UI部分使用Vue JS将数据展示在前端。

Spring Boot Admin分为服务端(spring-boot-admin-server)和客户端(spring-boot-admin-client)两个组件:

  • ​spring-boot-admin-server​通过采集actuator端点数据显示在spring-boot-admin-ui上,已知的端点几乎都有进行采集。
  • ​spring-boot-admin-client​是对Actuator的封装,提供应用系统的性能监控数据。此外,还可以通过spring-boot-admin动态切换日志级别、导出日志、导出heapdump、监控各项性能指标等。

Spring Boot Admin服务器端负责收集各个客户的数据。各台客户端配置服务器地址,启动后注册到服务器。服务器不停地请求客户端的信息(通过Actuator接口)。具体架构如下图所示。

实战:使用Spring Boot Admin实现运维监控平台_服务器

上图为Spring Boot Admin的整体架构,在每个Spring Boot应用程序上增加Spring Boot Admin Client组件。这样每个Spring Boot应用即Admin客户端,Admin服务端通过请求Admin客户端的接口收集所有的Spring Boot应用信息并进行数据呈现,从而实现Spring Boot应用监控。

二、使用Spring Boot Admin搭建运维监控平台

下面就通过示例,演示如何使用Spring Boot Admin 搭建运维监控平台。

1、创建服务器端

Spring Boot Admin服务器端主要负责收集各个客户的数据。建立一个Spring Boot Admin服务器端只需要简单的两步。下面通过示例演示创建Spring Boot Admin服务器端的过程。

1. 配置依赖

创建新的Spring Boot项目,在新建的项目中添加Spring Boot Admin服务器端的依赖JAR包:spring-boot-admin-starter-server。

<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

添加spring-boot-starter-web是为了让应用处于启动状态。

2. 配置启动端口

修改系统配置文件application.properties,配置服务端的启动端口为8000:

server.port=8000

3. 启用Admin服务器

使用@EnableAdminServer注解启动Admin服务器,示例代码如下:

@SpringBootApplication
// 启用Admin服务器
@EnableAdminServer
public class AdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(AdminServerApplication.class, args);
}
}

4. 运行测试

完成以上3步之后,启动服务器端,在浏览器中访问http://localhost:8000,可以看到如下所示的界面。

实战:使用Spring Boot Admin实现运维监控平台_spring_02

从Admin服务端的启动界面可以看到,Applications页面会展示应用数量、实例数量和状态3个信息。这里由于没有启动客户端,因此显示出“No applications registered.”的信息。

2、创建客户端

接下来我们创建一个客户端并注册到服务器端。

1. 配置依赖

创建新的Spring Boot项目,在新建的项目中添加Spring Boot Admin客户端的依赖JAR包:spring-boot-admin-starter-server。

<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

spring-boot-admin-starter-client会自动添加Actuator相关依赖,所以这里不需要重复添加Actuator的相关依赖。

2. 配置客户端

修改application.properties配置文件,增加如下配置:

server.port=8001
spring.application.name=Admin Client
spring.boot.admin.client.url=http://localhost:8000
management.endpoints.web.exposure.include=*

相关配置说明如下:

  • server.port:当前应用设置端口为8001。
  • spring.application.name:设置Application名称,其默认名称都是spring-boot-application。
  • spring.boot.admin.client.url:配置Admin服务器的地址。
  • management.endpoints.web.exposure.include=*:打开客户端Actuator的监控。

3. 运行验证

配置完成后启动客户端,客户端会自动注册到Admin服务器,Admin服务器检查到客户端的变化并展示其应用信息。重新刷新地址http://localhost:8000后,可以看到如图15-7所示的页面。

实战:使用Spring Boot Admin实现运维监控平台_服务器_03

客户端启动之后,Admin服务器界面的Application数量会增加。单击Application下的数值可以查看完整的应用信息。页面会展示被监控的应用列表,单击应用名称会进入此应用的详细监控信息页面。

实战:使用Spring Boot Admin实现运维监控平台_spring_04

这个页面会实时显示应用的运行监控信息,包括之前介绍的Actuator所有的端点数据信息。

​Spring Boot Admin以图形化的形式展示了应用的各项信息,这些信息大多来自于Spring Boot Actuator提供的接口。利用图形化的形式很容易看到应用的各项参数变化,甚至有些页面还可以进行一些配置操作,比如改变打印日志的级别等。​

三、​告警​提醒功能

虽然Spring Boot Admin提供了强大的监控功能,但它不能存储历史数据,我们不可能一直盯着系统,为此,Spring Boot Admin提供了强大的提醒功能,能够在发生服务状态变更的时候发出告警。支持的Email等提醒功能,同时也支持自定义告警提醒。

下面就来介绍Spring Boot Admin的告警提醒功能。

1、邮件提醒

设置Spring Boot Admin的邮件提醒,需要用到Spring Boot的邮件组件:spring-boot-starter-mail。这里只展示邮件提醒功能的使用。

修改前面的服务器端,在pom.xml 文件中,增加邮件组件,示例代码如下:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
  1. 修改系统配置

修改application.properties 系统配置文件,增加邮件发送配置,和告警通知配置,示例代码如下:

# 邮件服务配置
spring.mail.host=smtp.163.com
[email protected]
spring.mail.password=#邮箱授权码
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.ssl.enable=true

#告警接收
spring.boot.admin.notify.mail.enabled=true
[email protected]
[email protected]

上面,我们配置了Spring Boot 发送邮件的相关配置,这个是通用的。然后配置了告警消息的接收地址。

我们再次启动服务端和客户端,然后停止客户端,模拟应用宕机的情况。这样Spring Boot Admin 就会发送告警邮件提醒。

实战:使用Spring Boot Admin实现运维监控平台_客户端_05

2、自定义告警提醒

除了邮件提醒之外,通常我们还需要其他的提醒方式,比如:短信,日志等。我们可以通过自定义的方式实现自定义的消息告警方式。

Spring Boot Admin 实现自定义告警提醒也非常简单,只要实现Notifier接口即可。具体实现方式:继承AbstractEventNotifier 或AbstractStatusChangeNotifier这两个类。然后重写doNotify中实现具体的业务逻辑。

下面通过示例演示自定义告警提醒功能:

首先,创建AppStatusNotifier类,实现告警提醒功能,示例代码如下:

**
* 自定义的事件通知者
* @author weiz
*
*/
@Service
public class AppStatusNotifier extends AbstractEventNotifier {
private static final Logger LOGGER = LoggerFactory.getLogger(LoggingNotifier.class);

public AppStatusNotifier(InstanceRepository repository) {
super(repository);
}

@Override
protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
return Mono.fromRunnable(() -> {
if (event instanceof InstanceStatusChangedEvent) {
LOGGER.info("Instance {} ({}) is {}", instance.getRegistration().getName(), event.getInstance(),
((InstanceStatusChangedEvent) event).getStatusInfo().getStatus());
}
else {
LOGGER.info("Instance {} ({}) {}", instance.getRegistration().getName(), event.getInstance(),
event.getType());
}
});
}
}

然后,再次运行服务端和客户端。启动成功之后,再关掉客户端,模拟应用宕机的情况。

实战:使用Spring Boot Admin实现运维监控平台_服务器_06

我们看到服务端后台日志显示,服务端已经收到了客户端状态改变的告警消息。客户端状态已经变为OFFLINE。

​以上,就将​Spring Boot Admin搭建运维监控平台介绍完毕​,​


Recommend

  • 86

    监控是整个运维乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供详实的数据用于追查定位问题。

  • 61
    • www.jianshu.com 5 years ago
    • Cache

    Spring Boot应用监控实战 - 简书

    概述 之前讲过Docker容器的可视化监控,即监控容器的运行情况,包括 CPU使用率、内存占用、网络状况以及磁盘空间等等一系列信息。同样利用SpringBoot作为微服务单元的实例化技术选型时,我们不可避免的要面对的一个问题就是如何实时监控应用的运行状况数据,比如:...

  • 40
    • www.linuxprobe.com 5 years ago
    • Cache

    运维监控工具zabbix概述

    一、zabbix的特点 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题...

  • 36
    • www.linuxprobe.com 5 years ago
    • Cache

    zabbix监控运维使用zatree扩展

    zabbix是一个非常不错的监控软件,不过其外观界面做的很不近人意。没有nagios的一目了然,也没有cacti 的可视化直观查看。通过使用zatree的扩展,可以使zabbix增加类似于cacti 的可视化查看效果 。插件是由58同城的运维团队开发的,目前项目代码存放在

  • 62
    • 微信 mp.weixin.qq.com 5 years ago
    • Cache

    实战|HDFS监控运维最佳实践

  • 6

    【编者的话】Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。Prometheus是一个开源的服务监控系统和时间序列数据库。 Gr...

  • 3

    Zabbix生产案例实战五——使用Percona监控插件监控MySQLZabbix使用Percona监控插件监控MySQL▏工作原理通过shell脚本调用定义的php脚本来作数据采集,然后将数据传递到z...

  • 7

    10月的第一场会员直播,我们邀请到了前滴滴高级数据产品@高远老师,她将基于多年的数据产品经验,深度解析O2O行业场景及痛点,从监控——分析——诊断三个层次拆解数据产品的构建思路。本文为直播内容整理,内容有删改。

  • 2

    Linux文件监控 有时候我们常需要当文件变化的时候便触发某些脚本操作,比如说有文件更新了就同步文件到远程机器。在实现这个操作上,主要用到两个工具,一个是rsync,一个是inotifywait 。inotifywait的作用是监控文件夹变化,rsync是用来同步,可...

  • 4

    【调研】运维监控平台文章资源收集 https://www.zabbix.com/ OpManager 智能网...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK