多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

微服务:Logback 与 Filebeat 关系

微服务:Logback 与 Filebeat 关系 目录能不能只使用 Logback不用 Filebeat只靠 Logback 直接网络上报的缺点生产环境痛点什么时候必须 / 建议上 Filebeat✅ 强烈建议使用 Filebeat 的场景✅ 可以不用 Filebeat 的场景两种架构对比方案 1Logback 写本地文件 Filebeat 采集生产主流方案 2Logback 直接 Appender 输出 Kafka/ES无 Filebeat补充现在也经常用 Loki 替代 ELK采集端依然是 Filebeat/Promtail总结一句话常见面试问题记忆点Logback应用内部日志输出组件Filebeat日志采集转发组件二者不是二选一是分工不同Logbacklogback‑springJava 应用把日志打印到本地文件 / 控制台属于应用程序内部的日志框架。Filebeat轻量采集器读取磁盘上已经生成的日志文件转发到 Elasticsearch / Loki / Kafka属于外部独立进程不属于业务应用。能不能只使用 Logback不用 Filebeat可以但有局限。 Logback 本身可以输出日志到本地磁盘文件也可以直接通过logback‑appender直接输出到 Kafka / Elasticsearch网络输出 也就是不用 Filebeat仅 Logback 也能完成日志上报很多小项目这么干。只靠 Logback 直接网络上报的缺点生产环境痛点网络抖动、ES/Kafka 故障会丢日志Logback 是业务线程同步 / 异步发送下游服务不可用时appender 缓冲区有限队列满直接丢弃日志没有持久化重试。抢占业务应用资源日志量大时序列化、网络 IO 占用 JVM 线程、堆内存高并发下会拖慢业务。多实例容器环境日志文件散落各个 Pod应用自己上报很难统一管控。应用重启内存中未发送的缓冲区日志直接丢失。核心业务程序不适合承担可靠日志转发的职责业务应该只管写日志转发交给独立 Agent。什么时候必须 / 建议上 Filebeat✅ 强烈建议使用 Filebeat 的场景容器 K8s 环境Pod 是临时的容器销毁容器内本地日志文件直接消失。 两种方案输出日志到stdout 标准输出Filebeat 采集容器 stdout挂载 PV 持久化日志文件Filebeat 读取宿主机挂载的日志。K8s 微服务几乎标配 Filebeat。多微服务实例日志需要集中检索ELK/EFK 栈几十上百个服务实例每个实例磁盘日志分散不可能登录每台机器看日志Filebeat 统一采集送入 ES 做日志检索。对日志可靠性有要求不能丢日志Filebeat 有本地文件偏移量记录、文件持久化队列、失败重试、背压机制。即使 Kafka/ES 挂掉Filebeat 会把日志缓存在本地磁盘下游恢复继续发送不会丢日志不影响 Java 业务进程。多来源日志统一采集不光 Java 应用 logback 日志还要采集 Nginx、网关、中间件的日志统一由 Filebeat 采集不需要各个组件各自写上报逻辑。日志量大QPS 高的生产业务不让日志上报的网络 IO 消耗 JVM 资源把采集转发剥离到独立进程。✅ 可以不用 Filebeat 的场景测试环境、小体量项目实例很少直接看本地日志使用 Logback 的 kafka‑appender 直接输出 Kafka并且能接受极端场景少量日志丢失使用云厂商日志服务 SDK 直接集成进应用本质 SDK 替代了 Filebeat 角色。两种架构对比方案 1Logback 写本地文件 Filebeat 采集生产主流Java应用 → Logback → 本地磁盘日志文件 → Filebeat(独立agent) → Kafka → LogStash → Elasticsearch优点业务 JVM 只做磁盘 IO不受下游日志系统故障影响Filebeat 保证传输可靠性重试、背压、记录读取 offset应用重启不丢磁盘上已经落盘的日志。方案 2Logback 直接 Appender 输出 Kafka/ES无 FilebeatJava应用 → Logback‑kafka‑appender → 直接发Kafka优点架构简单少部署一个组件 缺点下游故障会丢日志消耗 JVM 资源高并发不推荐生产。补充现在也经常用 Loki 替代 ELK采集端依然是 Filebeat/PromtailPromtail 是 Loki 生态的采集 Agent作用等价 Filebeat。总结一句话Logback 是写日志Filebeat 是读并转发日志职责不一样开发 / 小项目只用 Logback 没问题生产微服务尤其是 K8s 部署一定要上 Filebeat避免日志丢失、业务被日志 IO 拖累不要把日志上报可靠性交给业务应用交给独立采集 Agent。常见面试问题记忆点Q微服务中为什么不直接用 logback 的 kafka appender还要 filebeat A如果让业务应用承担日志网络发送当 Kafka 故障appender 队列溢出会丢弃日志同时占用业务线程与堆内存。Filebeat 是独立进程本地文件持久化 offset 记录下游故障会缓存重试隔离业务与日志采集保障日志可靠性。
返回列表