CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页实践文章日志采集失败的6大经典雷区:从本地管理反模式到LoongCollector标准实践

日志采集失败的6大经典雷区:从本地管理反模式到LoongCollector标准实践

#可观测性#日志#分布式#运维#安全#存储

agenticOps | 2026-05-23

背景

观察系统的运行状态,排查疑难问题,日志作为一种历史悠久的可观测手段,始终扮演着不可替代的角色。科学的本地日志管理策略,不仅能在本地保留更完整历史记录,最小化性能开销,并且能为日志采集和后续分析提供便利。然而在实际运维中,我们时常遇到反例,这类管理缺陷带来的采集现在对于主流采集工具(LoongCollector(原iLogtail)、Filebeat、Fluentbit、Vector、OpenTelemetry Collector)均无法完美解决,唯有从源头解决才是最佳实践。在这里我们总结经验,希望给大家一些启发,一起让日志更好地为大家服务。

反模式

1. 使用copy truncate模式轮转日志,因两个动作非原子并创建新文件,可能导致日志丢失或重复采集

使用logrotate的copy truncate模式轮转日志的原理是先复制原日志文件,然后截断原文件。这种方式存在以下问题:

  1. copy动作产生的新文件可能被当作新的内容重复采集。因为文件系统的inode变化,采集器可能无法正确识别这是轮转后的旧文件。
  2. copy和truncate之间产生的日志可能丢失。在这两个操作之间有一个时间窗口,此时写入的内容既不在复制的文件中,又会被截断操作清除。
  3. truncate操作可能导致文件大小变小和头部内容变化,缩小文件或改变文件头部签名会导致采集器误判为新文件,造成重复采集。

因此,copy truncate模式可能导致日志重复采集、内容丢失或不一致的问题。

推荐使用create模式进行日志轮转,即创建新文件并重命名旧文件,这样可以保证文件的完整性和连续性。如果无法避免,请在配置采集配置时使用精确的路径名。

2. 使用NAS、OSS作为日志存储,因元信息不一致和ls性能低,可能导致日志采集截断或停止

网络附加存储(NAS)通常采用基于最终一致性的一致性模型,这在分布式系统中是常见的设计。在实时采集场景下,这可能导致以下问题:

  1. 文件元信息与实际内容不一致。由于最终一致性,文件大小等元数据可能先于实际内容更新。
  2. 读取到文件空洞。当元信息显示文件已增大,但实际内容尚未同步时,读取操作可能返回\0字符(文件空洞)。
  3. 数据延迟。写入操作的结果可能不会立即对读取操作可见,导致采集延迟。
  4. 数据丢失。由于NAS不支持inotify并且list性能低下,因此文件可能无法被发现,导致数据丢失。

这些问题可能导致采集到的数据与最终内容不一致。

建议使用EBS,自建机器使用本地磁盘,以保证日志读写的效率和一致性。如无法避免,请在消费端做好异常日志的兼容逻辑。

3. 多进程写日志,因数据互相覆盖,可能导致采集到的数据不完整

多进程并发写入同一日志文件是一种常见但不推荐的做法,它可能导致以下问题:

  1. 文件内容交叉。多个进程的写入可能相互交叉,导致日志条目混乱。
  2. 采集不完整。当文件发生写入事件时,采集器开始采集数据。但如果采集过程中其他进程继续写入,这些新写入的内容可能被跳过。
  3. 文件锁争用。多进程写入可能导致文件锁争用,影响写入性能和可靠性。

这种模式可能导致采集到的数据不完整且与文件的最终内容不一致。

推荐多进程写入各自不同文件,这样可以保证日志的完整性和顺序性。如无法避免,请在消费端做好异常日志的兼容逻辑。

4. 创建文件空洞释放日志文件空间,因改变文件签名和内容,可能导致日志重复采集或数据丢失

通过在文件头部创建空洞来释放日志文件空间是一种存在风险的做法,原因如下:

  1. 文件签名改变。LoongCollector(原iLogtail)为避免inode复用漏采数据,额外使用文件头部的内容作为文件唯一性的判断依据。创建空洞可能改变这个签名,导致采集器误判为新文件。
  2. 数据完整性问题。创建空洞实际上是用\0字符替换了原有内容,可能导致重要的历史日志丢失。
  3. 文件系统碎片化。频繁创建空洞可能导致文件系统碎片化,影响读写性能。

这种做法可能导致数据重复采集和历史数据丢失。

推荐使用标准的日志轮转机制来管理日志文件大小,如使用logrotate工具定期轮转日志文件,这样可以保证日志的完整性和可追溯性。如无法避免,建议使用fallocate而非truncate或dd,并在消费端做好异常日志的兼容逻辑。

5. 频繁覆盖写文件,因文件内容频繁变化,可能导致采集数据不完整或不一致

频繁覆盖写整个日志文件是一种不安全的日志管理方式,可能导致以下问题:

  1. 文件元信息与内容不一致。在覆盖过程中,文件大小等元信息可能先于实际内容更新,导致采集器读取到不完整或不一致的内容。
  2. 数据丢失风险。如果在日志采集过程中发生覆盖写入,可能导致采集读取到的数据内容错乱或丢失。
  3. 历史数据难以保留。频繁覆盖会导致无法保留历史日志,不利于问题追溯和分析。

这种做法可能导致采集到的内容与文件最终内容不一致,或完全丢失文件内容。

建议采用追加写入(append)的方式记录日志,并配合日志轮转机制管理文件大小。如无法避免,请在消费端做好异常日志的兼容逻辑。

6. 使用vim编辑文件保存,因创建新文件替换原文件,可能导致日志重复采集

使用vim编辑并保存文件时,vim的保存机制可能导致以下问题:

  1. inode变化。vim创建新文件替换原文件时,新文件的inode与原文件不同,可能导致采集器误判为新文件。
     
  2. 文件签名改变。新文件的头部内容可能与原文件不同,改变了文件签名,导致采集器无法正确识别。
  3. 文件内容丢失。当vim替换文件时,写入程序可能没有切换到新保存日志文件,可能导致日志内容丢失。

这种编辑方式可能导致日志重复采集或数据丢失。

如仅需查看日志,建议使用less、grep等只读工具。如无法避免,请在消费端做好去重和异常处理的逻辑。

总结

日志是系统运行的“黑匣子”,其管理质量直接影响故障排查效率与系统可靠性。通过规避本文提到的反模式,遵循使用日志库轮转、本地盘写入、单线程追加等最佳实践,可显著降低日志采集风险,提升可观测性能力。希望本文能为团队提供切实可行的参考,助力构建健壮、高效的日志管理体系。

文章大纲

推荐文章

超过 2000+ 位开发者正在阅读

给 OpenClaw 加上企业级 Memory

给 OpenClaw 加上企业级 Memory

4646 阅读

阿里云 STAROps 全域智能运维平台发布!

阿里云 STAROps 全域智能运维平台发布!

3453 阅读

阿里云正式发布 RCA Benchmark

阿里云正式发布 RCA Benchmark

2716 阅读

推荐视频

UModel 最佳实践 Vol.1 UModel 数据建模全景解读

UModel 最佳实践 Vol.1 UModel 数据建模全景解读

3854 观看50:35
云监控2.0全景:可观测范式升级与智能运维蓝图

云监控2.0全景:可观测范式升级与智能运维蓝图

2532 观看41:06

推荐工具

精选可观测领域开发者工具

云监

云监控 2.0 沙箱体验

7483 使用

免费

免费网络拨测工具

2746 使用