一款基于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服务状态;
- 告警:默认支持电子邮件。
源码和项目地址已经帮大家整理好了,需要的同学转发本文+关注+私信【0628】即可无偿获取
特点
- 分布式;
- 跨平台;
- 支持docker部署;
- 实时监测告警;
- 数据加密传输;
- 灵活可配置;
- 用户界面支持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:包含平台的设计文档、服务启停脚本、数据库脚本等。
- 客户端为普通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>
- 客户端为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>
- 客户端为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 |
/div>
ol start="1">
/ol>加解密配置
p data-track="133">除了监控配置文件外,还可以在
classpath:/下加入
monitoring-secure.properties加解密配置文件,用来修改监控平台的加解密方式。但是注意各监控端加解密配置参数必须相同。这个配置不是必须的,没有此配置文件将使用默认加解密配置,加入此配置文件则必须正确配置配置项。
/p>
blockquote>
加解密配置项说明:
/blockquote>
div>
配置项 | 含义 | 必须项 | 默认值 |
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时,需要配置 |
/div>
strong>com.gitee.pifeng.monitoring.common.util.secure.SecureUtilsTest#testGenerateKey
/strong> 方法生成,然后填入配置文件。
p data-track="158">第三方登录认证配置说明:
/p>
div>
配置项 | 含义 | 必须项 | 默认值 |
third-auth.enable | 是否开启第三方认证 | 否 | false |
third-auth.type | 第三方认证类型(CAS) | 否 |
/div>
div>
配置项 | 含义 | 必须项 | 默认值 |
cas.key | 秘钥 | 否 | phoenix |
cas.server-url-prefix | cas服务端地址 | 是 | |
cas.server-login-url | cas登录地址 | 是 | |
cas.server-logout-url | cas登出地址 | 是 | |
cas.client-host-url | cas客户端地址 | 是 | |
cas.validation-type | CAS协议验证类型(CAS、CAS3) | 否 | CAS3 |