为什么需要轻量级日志监控方案
目前企业级主流的日志监控技术栈大多采用 ELK(Elasticsearch + Logstash + Kibana)。
Elasticsearch(ES)— 存储与搜索引擎
负责存储所有收集来的日志数据,并提供全文搜索和聚合分析能力。
Logstash — 数据收集与处理管道
负责从各种来源(如文件、Syslog、Kafka、数据库)采集日志,然后进行过滤、解析、格式化,最后输出到 Elasticsearch。
Kibana — 可视化与交互界面
这是 ELK 的"仪表盘"。它基于 Web,让你能通过浏览器与 Elasticsearch 中的数据交互。
对于拥有大数据、高并发的系统,用 ELK 做日志监控是相当合理的。但对于大多数中小规模系统,并且在国产化和合规越来越受重视的今天,这套技术栈显然过于沉重,不太合适。那么,有没有一种轻量级并且符合信创要求的技术选型呢?
有的有的,兄弟,有的!
就是今天要介绍的 Easysearch + FluentBit。
Easysearch — 国产化轻量搜索引擎
Easysearch 是基于 Elasticsearch 7.10 内核的国产化增强版本:API、DSL、SDK、索引格式高度兼容,但在内核、安全、中文能力、信创适配和运维工具方面做了不少增强。
AI 能力方面,原生支持向量检索、混合检索、RAG 集成、大模型 Embedding 接入。
Easysearch 还内置了 Web UI,只要部署了 Easysearch,就能直接访问内置的可视化页面,不用像 ELK 一样还要额外部署 Kibana。
它的 Web UI 大概长这样:

FluentBit — 轻量化日志采集器
FluentBit 是一个开源、轻量、高性能的日志/指标/追踪采集与转发器,适合对采集格式简单的日志做基础解析和路由。它用 C 语言实现,通常内存占用低于 10MB,零外部依赖,适合部署在每台服务器、容器节点或 K8s DaemonSet 上。
如果日志量大、存储成本高、日志格式简单、需要国产化合规,或者希望减少运维负担、更加轻量化,Easysearch + FluentBit 会更有优势。
下面介绍如何使用 Easysearch + FluentBit 搭建一套完整的日志监控。
部署 Easysearch
这里介绍使用 Docker 方式进行部署,其他部署方式可以参考官方文档。
Easysearch 官方文档:
https://docs.infinilabs.com/easysearch/main/

创建 .env 配置文件,配置自定义密码:
touch .env
echo "EASYSEARCH_INITIAL_ADMIN_PASSWORD=$(printf "%s%s%s@%s" "$(tr -dc a-z</dev/urandom|head -c4)" "$(tr -dc A-Z</dev/urandom|head -c3)" "$(tr -dc 0-9</dev/urandom|head -c2)" "$(tr -dc a-z0-9</dev/urandom|head -c3)")" | tee .env
容器内 Easysearch 用户的 uid 为 602,通过调整宿主机的目录权限,确保在容器内部 Easysearch 用户有权限读写挂载的数据卷:
sudo chown -R 602:602 /person/data/docker/easysearch
将镜像中的 config 目录复制到本地目录:
docker run --rm --env-file /person/data/docker/easysearch/.env -v /person/data/docker/easysearch:/work infinilabs/easysearch:2.3.1-2903 cp -rf /app/easysearch/config /work
启动容器:
docker run \
-d --restart always \
-p 9200:9200 \
-p 9300:9300 \
--ulimit memlock=-1:-1 \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-v /person/data/docker/easysearch/data:/app/easysearch/data \
-v /person/data/docker/easysearch/config:/app/easysearch/config \
-v /person/data/docker/easysearch/logs:/app/easysearch/logs \
--name easysearch --hostname easysearch \
infinilabs/easysearch:2.3.1-2903
启动成功后,查看容器是否启动成功或查看启动日志:
docker ps
docker logs 容器ID

启动成功后,访问 https://服务器IP:9200/ ,弹出的登录窗口输入用户名(admin)和密码(.env 文件中查看)。

访问 Easysearch Web UI:https://服务器IP:9200/_ui/#/home

配置 logback-spring.xml
日志源来自哪里呢?这里用一个市场主流的 SpringBoot 框架搭建的应用系统,来实现日志监控。
对于一个 SpringBoot 项目,日志的核心当然是它的 logback-spring.xml 配置文件,主要作用是日志的输出管理。
下面只展示一些 logback 的核心配置,其他配置根据自身需求可自行调整。
定义应用名称:
<!-- 从 Spring 环境动态获取应用名称,默认值兜底 -->
<springProperty name="APP_NAME" source="spring.application.name" defaultValue="iceberg-app"/>
日志输出路径:
<!-- 生产环境:输出到服务器指定目录 -->
<springProfile name="prod">
<property name="LOG_HOME" value="/person/logs/iceberg-cloud/${APP_NAME}"/>
</springProfile>
生成日志文件:
<!-- 生成简洁文本日志文件(年月日时分秒 + 日志内容),供 Fluent Bit 采集并写入 Easysearch -->
<appender name="FILE_JSON" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/application-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>50MB</maxFileSize>
<maxHistory>7</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
这段配置的要点:
- 按天 + 按大小滚动:单文件 50MB 触发切分,历史文件压缩为
.gz。
- 保留 7 天、总量上限 1GB,自动清理防止磁盘堆积。
异步化包装:
<!-- 将 FILE_JSON 包装为异步模式,避免日志 I/O 阻塞业务线程 -->
<appender name="ASYNC_JSON" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE_JSON"/>
<queueSize>512</queueSize>
<discardingThreshold>0</discardingThreshold>
</appender>
- 日志写盘 I/O 移出业务线程,不阻塞业务。
- 队列容量 512。
discardingThreshold=0:队列满时也不丢弃任何级别的日志,保证采集完整性。
这样,你的系统就可以在启动或者运行中生成一个 application.log 日志文件。

部署 Fluent Bit 采集日志并输出到 Easysearch
接下来,就需要用 FluentBit 去找到日志文件,然后进行数据采集。
创建 fluent-bit.yaml 文件并配置。
全局服务配置:
service:
flush: 1 # 设置数据刷新间隔
log_level: info # 设置 Fluent Bit 自身的运行日志级别(可选:error, warn, info, debug, trace)
daemon: "off" # 前台运行
http_server: "on" # 开启内置的 HTTP 监控服务,用于暴露内部运行指标(Metrics)
health_check: "on" # 开启健康检查端点(默认在 /api/v1/health)
http_listen: 0.0.0.0
http_port: 2020
storage.path: /person/logs/fluentbit/
# 同步模式:
# - normal:平衡性能和数据安全(推荐)
# - full:每次写入都同步到磁盘(最安全但性能较差)
# - light:最少同步操作(性能最好但可能丢数据)
storage.sync: normal
storage.backlog.mem_limit: 50MB
文本日志解析器:
parsers:
# 单行正则解析
- name: log_text
format: regex
regex: '^(?<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \[(?<level>[A-Z]+)\] (?<log>[\s\S]*)$'
time_key: time
time_format: '%Y-%m-%d %H:%M:%S.%L'
time_keep: true
服务输入源:
pipeline:
inputs:
# 管理端 (iceberg-admin)
- name: tail
tag: iceberg-admin
path: /person/logs/iceberg-cloud/iceberg-admin/application.log
parser: log_text
refresh_interval: 5
skip_long_lines: "on"
read_from_head: "false"
mem_buf_limit: 50MB
multiline: "off"
ignore_older: 72h
rotate_wait: 5
exit_on_eof: "false"
统一过滤器配置:
filters:
# --- 管理端 ---
- name: modify
match: iceberg-admin*
add:
- service_name iceberg-admin
输出目的地配置:
outputs:
# --- 统一输出通道:将所有服务的日志统一存入 Easysearch ---
- name: es # 使用 Elasticsearch 输出插件(Easysearch 完全兼容此协议)
match: "*" # 通配符 "*" 表示匹配所有经过 Filter 处理的日志
host: 目标 Easysearch 集群的主机 IP 或域名
port: 9200 # Easysearch 的 HTTP 通信端口
tls: "on"
tls.verify: "off"
http_user: admin # 访问 Easysearch 的认证用户名
http_passwd: saxmOSE46@7ih # 访问 Easysearch 的认证密码
logstash_format: "on" # 开启 Logstash 格式,使索引名称支持按时间(天)自动滚动
logstash_prefix: app-logs # 索引前缀,最终生成的索引名为 app-business-YYYY.MM.DD
retry_limit: false
把以上配置放到你的 fluent-bit.yaml 配置文件中即可。
启动容器:
docker run -d \
--name fluent-bit \
--restart unless-stopped \
-p 24224:24224 \
-p 2020:2020 \
-v /person/data/docker/fluentbit/fluent-bit.yaml:/fluent-bit/etc/fluent-bit.yaml \
-v /person/logs/iceberg-cloud:/person/logs/iceberg-cloud \
fluent/fluent-bit:5.1.0 \
-c /fluent-bit/etc/fluent-bit.yaml
注意:
- 2020 端口用于访问日志采集信息,一定要映射。
- 需要采集的宿主机日志文件,也要挂载到容器内部。
启动成功后,查看容器是否启动成功或查看启动日志:
docker ps
docker logs 容器ID

那么问题来了,系统既然已经生成了 application.log 日志文件,怎么知道 FluentBit 有没有采集成功呢?
访问:http://服务器IP:2020/api/v1/metrics
输出:

美化一下输出格式,可以看到 input 到 FluentBit 中 288 条:

output 到 Easysearch 也是 288 条:

可以让 AI 帮忙分析一下这段输出:

到这里,我们的 FluentBit 也成功采集到日志了,并且已经将数据落盘到 Easysearch。去 Easysearch Web UI 看看。
访问:服务器IP:9200/_ui/#/home
索引已经新建成功了:

日志也一目了然了:

至此,Easysearch + FluentBit 的基础日志监控就搭建完成了,后续大家可以自行扩展!
