0%

日志收集系统设计

使用场景

  1. 问题排查

在分布式系统中,同一个应用可能部署在多台机器上,如果日志没有集中搜集起来,通过日志排查问题时需要查找每台机器上的日志,排查过程也会消耗性能,可能影响线上业务。

  1. 离线场景

日志可用来统计PV、UV 等指标,用于 OLAP、机器学习模型训练等场景。

  1. 实时场景

可用日志流中实时解析出有价值的信息,用于实时 OLAP、实时模型训练、风控等。

问题挑战

  1. 数据量大
  2. 业务线多
  3. 易用性,无侵入

架构设计

  1. 日志接入(agent)

    日志收集 Agent,部署在应用服务器上,用于收集应用日志

    考虑到接入成本和对业务的影响,考虑与已有日志框架集成(如通过 Log4j 框架的 appneder 集成)

    Agent日志收集过程设计成异步的,降低对业务系统的性能影响

  2. 日志收集中心(collector)

    agent 收集上来的日志,通过日志中心转发到对应的 topic

  3. 消息队列(mq)

    日志收集中心的日志,根据业务线和 topic 的映射关系进行转发,kafka 下游可写入 hdfs 或 es

参考文档

  1. 云原生下日志方案的架构设计 - 知乎
  2. 日志收集系统-探究 - 简书