神级开源,一站式、轻量级、低门槛、零侵入的 Java 应用全方位监控平台,开箱即用!!!

张开发
2026/4/13 10:01:19 15 分钟阅读

分享文章

神级开源,一站式、轻量级、低门槛、零侵入的 Java 应用全方位监控平台,开箱即用!!!
一、前言Java 应用开发的同学都知道项目上线后日志可视化查询、接口性能监控、慢请求分析、调用链监控、JVM 可视化监控是一件非常重要的事。市面上对于上对于日志的可视化查询、接口的性能监控、调用链监控、JVM 的可视化监控都有常用的方案。日志可视化查询ELK/EFK。JVM 可视化监控与接口性能Actuator Prometheus Grafana。调用链监控PingPoint、Skywalking、Zipkin 等。不过对于很多开发者来说这中间存在大量繁琐的配置过程且具备一定的使用学习门槛部署成本与运维成本也比较高。而对于大多数中小型企业或者个人开发者来说并不想要这么大的投入但又想要对应用做全方位的监控管理该怎么办小编今天要介绍的就是这样一款可免费使用的 Java 应用全方位监控平台。一站式、轻量级、低门槛、零侵入开箱即用。旨在于以极简、高效的方式在一个平台上实现 Java 应用的日志采集与可视化查询、接口性能监控、慢请求分析、调用链监控、JVM 可视化监控。二、软件介绍zero-observer zero-log Java 应用一站式监控官网地址https://kuafucv.com1. 系统架构主要分为客户端和服务端两个部分。2. 采集客户端【zero-log】旨在提供低门槛、少配置、轻量级、无侵入的方式实现应用日志、接口性能、调用链、JVM 指标的自动采集与上报。基于 logback 实现自动采集代码中通过 log.error、log.warn、log.info、log.trace 方式输出的日志。采集各个接口的性能数据。采集方法调用链数据。采集 JVM 运行时各项指标。3. 服务端【zero-observer】收集客户端采集插件采集的客户端数据并提供开箱即用的可视化与管理功能。4. 功能介绍功能实现情况登录认证✅仪表盘统计✅应用日志采集✅应用控制台日志✅应用日志列表检索✅接口性能监控✅接口慢请求分析✅CPU 监控✅物理内存监控✅堆内存监控✅非堆内存监控✅Eden区监控✅Survivor区监控✅OldGen区监控✅Metaspace区监控✅线程监控✅GC监控✅调用链监控✅仪表盘应用日志控制台日志应用日志查询应用日志详情接口性能监控慢请求分析调用链监控JVM 监控三、服务端部署zero-observer 数据存储使用的是 mysql 与 elasticsearchmysql 存储的是系统数据elasticsearch 存储的是日志数据。所以需要自行安装 mysql 与 elasticsearch。1. Mysql 初始化脚本创建数据库zero_observer执行脚本。CREATE TABLE app_log_growth_trend ( id bigint(20) NOT NULL, create_time datetime NOT NULL, app varchar(255) NOT NULL, env varchar(50) NOT NULL, level varchar(10) NOT NULL, statistic_time datetime NOT NULL, log_count int(11) NOT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; CREATE TABLE app_log_total_growth_trend ( id bigint(20) NOT NULL, create_time datetime NOT NULL, statistic_time datetime NOT NULL, log_count bigint(20) NOT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; CREATE TABLE app_log_level_statistic ( id bigint(20) NOT NULL, create_time datetime NOT NULL, app varchar(255) NOT NULL, env varchar(50) NOT NULL, level varchar(10) NOT NULL, statistic_time datetime NOT NULL, log_count int(11) NOT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; CREATE TABLE app_env_instance ( id bigint(20) NOT NULL, create_time datetime NOT NULL, app varchar(255) NOT NULL, env varchar(50) NOT NULL, ip varchar(50) NOT NULL, port varchar(5) NOT NULL, hostname varchar(255) NOT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; CREATE TABLE app_log_statistic ( id bigint(20) NOT NULL, create_time datetime NOT NULL, app_log_statistic_counter_id bigint(20) NOT NULL, app varchar(255) NOT NULL, env varchar(50) NOT NULL, statistic_time datetime NOT NULL, log_count bigint(20) NOT NULL DEFAULT 0, slow_request_count bigint(20) NOT NULL DEFAULT 0, error_count bigint(20) NOT NULL DEFAULT 0, warn_count bigint(20) NOT NULL DEFAULT 0, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; CREATE TABLE app_log_statistic_counter ( id bigint(20) NOT NULL, create_time datetime NOT NULL, statistic_time datetime NOT NULL, statistic_status int(11) NOT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; CREATE TABLE system_config ( id bigint(20) NOT NULL COMMENT 主键, create_time datetime NOT NULL COMMENT 创建时间, key_code varchar(50) NOT NULL COMMENT key编码, key_name varchar(50) DEFAULT NULL COMMENT key 名称, key_value varchar(255) NOT NULL COMMENT key值, enabled int(11) NOT NULL DEFAULT 1 COMMENT 是否启用, PRIMARY KEY (id) USING BTREE ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; INSERT INTO system_config (id, create_time, key_code, key_name, key_value, enabled) VALUES (1, 2025-07-19 23:56:06, app_log_storage_days, 应用日志存储天数, 3, 1); CREATE TABLE users ( id bigint(20) NOT NULL, create_time datetime NOT NULL, account varchar(100) NOT NULL, pwd varchar(255) NOT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; CREATE TABLE token_info ( id bigint(20) NOT NULL, create_time datetime NOT NULL, subject varchar(100) NOT NULL, token varchar(255) NOT NULL, expire_time datetime NOT NULL, expire_timestamp bigint(20) NOT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; CREATE TABLE license ( id bigint(20) NOT NULL, create_time datetime NOT NULL, content text NOT NULL, remark text DEFAULT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; CREATE TABLE request_monitor_statistic ( id bigint(20) NOT NULL, create_time datetime NOT NULL, statistic_date int(11) NOT NULL, app varchar(255) NOT NULL, env varchar(50) NOT NULL, uri varchar(255) NOT NULL, executeCount int(11) DEFAULT NULL, rtAvg float DEFAULT NULL, rtMax int(11) DEFAULT NULL, rtMin int(11) DEFAULT NULL, slow_count int(11) DEFAULT 0, slow_avg float DEFAULT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; CREATE TABLE request_mapping ( id bigint(20) NOT NULL, create_time datetime NOT NULL, app varchar(255) NOT NULL, env varchar(50) NOT NULL, ip varchar(50) NOT NULL, port varchar(5) NOT NULL, hostname varchar(255) NOT NULL, uri varchar(255) DEFAULT NULL, method varchar(10) DEFAULT NULL, handler_method varchar(255) DEFAULT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; ALTER TABLE app_env_instance ADD online INT NULL; ALTER TABLE app_env_instance ADD last_heartbeat DATETIME NULL; ALTER TABLE request_monitor_statistic ADD req_method varchar(10) NULL; CREATE TABLE app_env ( id bigint(20) NOT NULL, create_time datetime NOT NULL, app varchar(255) NOT NULL, env varchar(50) NOT NULL, gene varchar(20) NOT NULL, signature varchar(100) NOT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; CREATE TABLE sys_lock ( id bigint(20) NOT NULL, create_time datetime NOT NULL, lock_name varchar(100) NOT NULL, status INT NOT NULL, last_heartbeat datetime DEFAULT NULL, holder varchar(255) DEFAULT NULL, holder_id varchar(255) DEFAULT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;2. Docker 部署拉取镜像docker pull registry.cn-hangzhou.aliyuncs.com/kuafucv/zero-observer:2.1.0启动容器docker run -itd -p 8080:8080 --name zero-observer \ -e TZAsia/Shanghai \ -e ES_IP127.0.0.1 \ -e ES_PORT9200 \ -e ES_USERNAMEes \ -e ES_PASSWORDes \ -e MYSQL_IP127.0.0.1 \ -e MYSQL_PORT3306 \ -e MYSQL_USERNAMEroot \ -e MYSQL_PASSWORD123456 \ registry.cn-hangzhou.aliyuncs.com/kuafucv/zero-observer:2.1.0参数解析TZ时区默认 Asia/ShanghaiES_IPelasticsearch 的 ipES_PORTelasticsearch restapi 的端口ES_USERNAMEelasticsearch 用户名无则不填即可ES_PASSWORDelasticsearch 密码无则不填即可MYSQL_IPmysql 的ipMYSQL_PORTmysql 端口MYSQL_USERNAME 用户名MYSQL_PASSWORD 密码启动成功后浏览器访问http://127.0.0.1:8080/zero-observer/默认用户密码admin/123456四、SpringBoot 应用接入1. 引入 maven 依赖dependencygroupIdio.github.kuafucv/groupIdartifactIdzero-log-spring-boot-starter/artifactIdversion2.1.0/version/dependency2. 配置 application.ymlzero: log: server-url: http://127.0.0.1:8080/zero-observer注意serverUrl 为 zero-observer 服务访问地址该属性值为 http://ip:port/zero-observer3. 启动类添加注解启动类添加EnableZeroLog注解SpringBootApplicationEnableZeroLogpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}}4. 启动服务启动 Java 服务等待日志自动上报至 zero-observer 前往 zero-observer 查看对应数据。更多内容请参考官网https://kuafucv.com

更多文章