一款基于springboot的可视化开源监控平台,用起来简直不要太香

介绍

“phoenix” 是一个灵活可配置的开源监控平台,主要用于监控应用程序、服务器、数据库、 络、tcp端口和http接口,通过实时收集、汇聚和分析监控信息,实现在发现异常时立刻推送告警信息,并且提供了可视化系统进行配置、管理、查看。

  • 应用程序
  • 默认支持Java应用程序,监控内容包括:在线状态、JVM、业务埋点。其它应用程序需要自己开发客户端,来调用接口与服务端或者代理端通信(心跳接口、服务器信息接口、告警接口);
  • JVM
  • 监控内容包括:内存、线程、类、GC等;
  • 服务器
  • 支持主流服务器,如Linux、Windows、macOS、Unix等;
    监控内容包括:在线状态、操作系统、CPU、平均负载、进程、磁盘、内存、 卡、电池、传感器;
  • 数据库
  • 支持MySQL、Oracle、Redis、Mongo;
    监控内容:
    ??MySQL:会话;
    ??Oracle:会话、表空间;
    ??Redis:Redis信息全集;
    ??Mongo:Mongo信息全集;
  • 络:支持监控 络状态;
  • TCP:支持监控TCP服务状态;
  • HTTP:支持监控HTTP服务状态;
  • 告警:默认支持电子邮件。
  • 特点

    1. 分布式;
    2. 跨平台;
    3. 支持docker部署;
    4. 实时监测告警;
    5. 数据加密传输;
    6. 灵活可配置;
    7. 用户界面支持PC端、移动端。

    设计

  • 功能架构
  • 逻辑架构
  • 运行环境
  • Maven3+
    Jdk >=1.8,若使用Sigar监控服务器,则Jdk版本要用1.8(1.8.0_131到1.8.0_241)
    Lombok
    Mysql5.7+
  • 技术选型
  • 核心框架:SpringBoot
    安全框架:SpringSecurity、SpringSession
    任务调度:JUC、SpringTask、Quartz
    持久层框架:MyBatis、 MyBatis-Plus
    数据库连接池:Alibaba Druid
    日志管理:SLF4J、Logback
    前端框架:Layui、ECharts
    监控框架:Sigar、oshi
  • 模块结构
  • 平台使用Java + Layui + ECharts开发,数据库采用MySQL。
  • phoenix(监控平台父工程)
    ├── phoenix-common(监控公共模块父工程)
    │ ├── phoenix-common-core(监控核心公共模块)
    │ └── phoenix-common-web(监控WEB公共模块)
    ├── phoenix-client(监控客户端父工程)
    │ ├── phoenix-client-core(监控客户端)
    │ ├── phoenix-client-spring-boot-starter(监控客户端与springboot集成的starter)
    │ └── phoenix-client-spring-mvc-integrator(监控客户端与springmvc集成的integrator)
    ├── phoenix-agent(监控代理端)
    ├── phoenix-server(监控服务端)
    ├── phoenix-ui(监控UI端)
    └── doc(文档)
  • phoenix:监控平台父工程,管理平台的依赖、构建、插件等;
    phoenix-common:监控公共模块,提供平台所有的公共代码,包含一个监控核心公共模块(phoenix-common-core)和一个监控WEB公共模块(phoenix-common-web);
    phoenix-client:监控客户端,用于集成到Java应用程序中实现业务埋点和Java应用程序监控信息收集,包含一个通用模块(phoenix-client-core)和与springboot集成的starter(phoenix-client-spring-boot-starter)、与springmvc集成的integrator(phoenix-client-spring-mvc-integrator)两个拓展模块;
    phoenix-agent:监控代理端,用于收集服务器信息和汇聚、转发来自监控客户端的信息;
    phoenix-server:监控服务端,是监控平台的核心模块,用于汇聚、分析监控信息,在发现异常时实时推送告警信息;
    phoenix-ui:监控可视化系统,用于平台配置、用户管理、监控信息查看、图表展示等;
    doc:包含平台的设计文档、服务启停脚本、数据库脚本等。
    1. 客户端为普通Java程序
    <!-- https://mvnrepository.com/artifact/com.gitee.pifeng/phoenix-client-core --><dependency>  <groupId>com.gitee.pifeng</groupId>  <artifactId>phoenix-client-core</artifactId>  <version>${最新稳定版本}</version></dependency>
    1. 客户端为springboot程序
    <!-- https://mvnrepository.com/artifact/com.gitee.pifeng/phoenix-client-spring-boot-starter --><dependency>  <groupId>com.gitee.pifeng</groupId>  <artifactId>phoenix-client-spring-boot-starter</artifactId>  <version>${最新稳定版本}</version></dependency>
    1. 客户端为springmvc程序
    <!-- https://mvnrepository.com/artifact/com.gitee.pifeng/phoenix-client-spring-mvc-integrator --><dependency>  <groupId>com.gitee.pifeng</groupId>  <artifactId>phoenix-client-spring-mvc-integrator</artifactId>  <version>${最新稳定版本}</version></dependency>
  • 最新稳定版本
  • 1.2.2.RELEASE
  • 使用

    初始化“监控数据库”

    下载项目源码并解压,进入目录:/phoenix/doc/数据库设计/sql/mysql ,找到SQL脚本并执行即可。

    phoenix.sql

    编译源码

    解压源码,按照maven格式将源码导入IDE, 使用maven进行编译即可。

    配置

    监控配置

    监控配置文件为: monitoring.properties ,放在 classpath:/ 下会自动加载,UI端、服务端、代理端、客户端都需要有这个配置文件。如果是springboot项目也可以分环境配置,示例配置代码如下:

    /*** 开发环境监控配置*/@Configuration@Profile("dev")@EnableMonitoring(configFileName = "monitoring-dev.properties")public class MonitoringUiDevConfig {}/*** 生产环境监控配置*/@Configuration@Profile("prod")@EnableMonitoring(configFileName = "monitoring-prod.properties")public class MonitoringUiProdConfig {}

    监控配置项说明:

    配置项

    含义

    必须项

    默认值

    monitoring.server.url

    监控服务端(代理端)url

    monitoring.server.connect-timeout

    连接超时时间(毫秒)

    15000

    monitoring.server.socket-timeout

    等待数据超时时间(毫秒)

    15000

    monitoring.server.connection-request-timeout

    从连接池获取连接的等待超时时间(毫秒)

    15000

    monitoring.own.instance.order

    实例次序(整数),用于在集群中区分应用实例,配置“1”就代表集群中的第一个应用实例

    1

    monitoring.own.instance.endpoint

    实例端点类型(server、agent、client、ui)

    client

    monitoring.own.instance.name

    实例名称,一般为项目名

    monitoring.own.instance.desc

    实例描述

    monitoring.own.instance.language

    程序语言

    Java

    monitoring.heartbeat.rate

    与服务端或者代理端发心跳包的频率(秒),最小不能小于30秒

    30

    monitoring.server-info.enable

    是否采集服务器信息

    false

    monitoring.server-info.rate

    与服务端或者代理端发服务器信息包的频率(秒),最小不能小于30秒

    60

    monitoring.server-info.ip

    被监控服务器本机ip地址

    否(自动获取)

    monitoring.server-info.user-sigar-enable

    是否使用Sigar采集服务器信息,要求Jdk1.8(1.8.0_131到1.8.0_241)

    true

    monitoring.jvm-info.enable

    是否采集Java虚拟机信息

    false

    monitoring.jvm-info.rate

    与服务端或者代理端发送Java虚拟机信息的频率(秒),最小不能小于30秒

    60

    1. 监控UI端
    2. 除了在 monitoring-{profile}.properties 文件修改监控配置外,还需要在 application-{profile}.yml 文件修改数据库配置。
    3. 监控服务端
    4. 需要在 application-{profile}.yml 文件修改数据库配置和邮箱配置。
    5. 监控代理端
    6. 只需在 monitoring-{profile}.properties 文件修改监控配置。
    7. 监控客户端
    8. 只需添加监控配置。

    加解密配置

    除了监控配置文件外,还可以在 classpath:/ 下加入 monitoring-secure.properties 加解密配置文件,用来修改监控平台的加解密方式。但是注意各监控端加解密配置参数必须相同。这个配置不是必须的,没有此配置文件将使用默认加解密配置,加入此配置文件则必须正确配置配置项。

    加解密配置项说明:

    配置项

    含义

    必须项

    默认值

    secret.type

    加解密类型,值只能是 des、aes、sm4 之一

    否,为空则不进行加解密

    secret.key.des

    DES密钥

    否,secret.type=des时,需要配置

    secret.key.aes

    AES密钥

    否,secret.type=aes时,需要配置

    secret.key.sm4

    国密SM4密钥

    否,secret.type=ms4时,需要配置

    秘钥可通过 com.gitee.pifeng.monitoring.common.util.secure.SecureUtilsTest#testGenerateKey 方法生成,然后填入配置文件。

    第三方登录认证配置

    监控UI端除了支持直接登录认证外,还支持第三方登录认证,只需在application.yml(或者application-{profile}.yml)配置文件中增加对应配置项即可使用。

    第三方登录认证配置说明:

    配置项

    含义

    必须项

    默认值

    third-auth.enable

    是否开启第三方认证

    false

    third-auth.type

    第三方认证类型(CAS)

    apereo cas登录认证配置说明:

    如果 third-auth.enable=true && third-auth.type=cas ,则需要进行cas配置。

    配置项

    含义

    必须项

    默认值

    cas.key

    秘钥

    phoenix

    cas.server-url-prefix

    cas服务端地址

    cas.server-login-url

    cas登录地址

    cas.server-logout-url

    cas登出地址

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2022年5月28日
    下一篇 2022年5月28日

    相关推荐