一、前言

Java 应用开发时,服务器上的日志往往是以日志文件的形式存在。在日常维护时,通常需要将日志信息实现可视化查询。 ELK、EFK 等是优秀的日志可视化查询解决方案。不过对于部分开发者来说,日志的采集配置与日志可视化配置是一个比较繁琐的过程。 为此我们希望通过一些低门槛的方式,实现日志的自动采集与日志可视化查询。

zero-observer 依托于 zero-log 的自动化日志采集插件,实现接收 Java 应用上报的日志数据,并提供开箱即用的日志可视化检索功能,极大降低了 Java 应用日志可视化检索的门槛。文末见开源地址。

二、软件架构

三、安装部署

zero-observer 数据存储使用的是 mysql 与 elasticsearch,mysql 存储的是系统数据,elasticsearch 存储的是日志数据。 所以需要自行安装 mysql 与 elasticsearch。

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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Docker 部署

默认 server.port=8080

# 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/kuafucv/zero-observer:0.0.1
# 启动容器
docker run -itd -p 8080:8080 --name zero-observer \
 -e ES_IP=127.0.0.1 \
 -e ES_PORT=9200 \
 -e ES_USERNAME=es \
 -e ES_PASSWORD=es \
 -e MYSQL_IP=127.0.0.1 \
 -e MYSQL_PORT=3306 \
 -e MYSQL_USERNAME=root \
 -e MYSQL_PASSWORD=123456 \
 registry.cn-hangzhou.aliyuncs.com/kuafucv/zero-observer:0.0.1

参数解析:

  • ES_IP:elasticsearch 的 ip

  • ES_PORT:elasticsearch restapi 的端口

  • ES_USERNAME:elasticsearch 用户名,无则不填即可

  • ES_PASSWORD:elasticsearch 密码,无则不填即可

  • MYSQL_IP:mysql 的ip

  • MYSQL_PORT:mysql 端口

  • MYSQL_USERNAME 用户名

  • MYSQL_PASSWORD 密码

Jar 包部署

下载 zero-observer.jar 与 start 启动器

chmod -R 777 start
./start java -jar zero-observer.jar 

默认 server.port=9999

四、Java 应用日志接入

Java 应用引入 zero-log 即可。

https://gitee.com/kuafucv/zero-log

1. 引入 maven 依赖


<dependency>
    <groupId>io.github.kuafucv</groupId>
    <artifactId>zero-log</artifactId>
    <version>0.0.5</version>
</dependency>

2. 配置 logback-spring.xml

<configuration debug="false">

    <springProperty name="app_name" source="spring.application.name"/>

    <springProperty name="env" source="spring.profiles.active"/>
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-[%X{TRACE_ID}] %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%15.15t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
    <property name="FILE_LOG_CHARSET" value="${FILE_LOG_CHARSET:-${file.encoding:-UTF-8}}"/>
    <appender name="BATCH_HTTP" class="io.github.kuafucv.zero.log.HttpBatchAppender">
        <!-- 必需:参照 logback 的 encoder 配置 -->
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>${FILE_LOG_CHARSET}</charset>
        </encoder>
        <!--请求的地址-->
        <!-- 必需:日志接收接口URL,接口必须是 POST 方法,application/json 方式提交参数 -->
        <!-- Ip 和 端口替换为 zero-observer 部署的 ip 和端口 -->
        <endpointUrl>http://ip:port/log/report}</endpointUrl>
        <!-- 可选:是否包含MDC上下文 -->
        <includeMDC>true</includeMDC>
        <!-- 必填:应用名称 -->
        <appName>${app_name}</appName>
        <!-- 可选:环境,默认值:env -->
        <env>${env}</env>
        <!-- 可选:日志传输频率,单位秒,默认值:3 秒 -->
        <flushIntervalInSeconds>3</flushIntervalInSeconds>
        <!-- 可选:请求超时时间,默认值:1000 毫秒 -->
        <httpReadTimeoutInMillis>1000</httpReadTimeoutInMillis>
        <!-- 可选:请求超时时间,默认值:1000 毫秒 -->
        <httpConnectionTimeoutInMillis>1000</httpConnectionTimeoutInMillis>
        <!-- 可选:日志存储滚筒最大数量,默认值:8 -->
        <maxNumberOfBuckets>8</maxNumberOfBuckets>
        <!-- 可选:每个日志存储滚筒大小(KB),默认值:1024 -->
        <maxBucketSizeInKilobytes>1024</maxBucketSizeInKilobytes>
    </appender>
    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="BATCH_HTTP" />
    </root>
</configuration>

3. 启动日志观测

启动 Java 服务,等待日志自动上报至 zero-observer即可。

五、系统功能

1. 仪表盘

2. 应用日志

3. 应用控制台日志

4. 应用日志查询

5. 应用日志详情

开源地址:

https://gitee.com/kuafucv/zero-observer

https://gitee.com/kuafucv/zero-log

架构设计之道在于在不同的场景采用合适的架构设计,架构设计没有完美,只有合适。

在代码的路上,我们一起砥砺前行。用代码改变世界!

如果有其它问题,欢迎评论区沟通。

感谢观看,如果觉得对您有用,还请动动您那发财的手指头,点赞、转发、在看、收藏。

高并发解决方案与架构设计。

海量数据存储和性能优化。

通用框架/组件设计与封装。

如何设计合适的技术架构?

如何成功转型架构设计与技术管理?

在竞争激烈的大环境下,只有不断提升核心竞争力才能立于不败之地。

留言【我要晋级】,一对一指导,带你晋级。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐