日志收集系统-探究

经常使用的日志收集系统有Syslog-ng,Scribe,Flume,固然还有ELK的LogStash.而目前互联网公司最长用的时Scribe和Flume,Scibe是Facebook开源的,可是如今已经不维护,因此不推荐使用。redis

Scribe

Scribe是Facebook开源的日志收集系统,在facebook内部已经获得大量的应用。Scribe是基于一个非阻断C++服务的实现。它可以从各类日志源上收集日志,存储到一个中阳存储系统。mongodb

三个角色:json

  • 日志服务器
    • 为了收集日志,每一台日志服务器上都会部署一个scribe客户端,它包含两个模块agent 和 local_server
    • Agent是以tail的方式读取本地目录下的日志文件,并将数据写到本地的Local_server
    • local_server经过zookeeper定位到Center_server
  • 中心服务器
    • 中心服务器做用就是把散落在各个机器的日志统一收集起来
    • Center_server和Local_server同样,只是配置不一样,经过thrift进行通讯
    • center_server收到数据后,根据配置将各个category的数据发向不一样的方向,好比写到HDFS或者发到Kafka等
  • 存储服务器
    • 最终存储日志的地方
    • 供计算框架以及搜索引擎框架计算使用

LogStash

Logstash是ELK中的一个工具,在ELK中起到的做用是对日志进行收集、分析、过滤。服务器

上图所示,由三个组件组成:框架

  • 数据来源,支持较多输入源的插件
    • beats
    • file
    • http
    • jdbc
    • kafka
    • log4j
    • ...
  • 过滤器
    • json
    • csv
    • ...
  • 输出目的地
    • file
    • mongodb
    • rabbitmq
    • kafka

Flume

Flume是分布式的、可靠的、高性能、可扩展的的日志收集框架。分布式

Flume的Agent工具

Agent由三部分组成:性能

  • Source: 数据源
  • Channel:包括两种fileChannel和Memorychannel
  • Sink:输出目的地

三个角色:搜索引擎

  • 客户端日志收集层
    • 在每一个客户端部署一个Agent进程,负责对单机的日志手机工做
  • 中心服务器
    • Collector层部署在中心服务器上,负责接收Agent层发送的日志,而且将日志根据路由规则写到响应的Store层
  • 存储层

对比

  • Scribe:C++编写,如今已经再也不维护,不推荐使用插件

  • Logstash: 针对日志收集,搜索,计算,可视化有一系列的产品,而且可以使用的插件以及社区较为活跃推荐使用

  • Flume: Java编写,较为灵活,而且吞吐量高。业界已经验证过,建议使用。

总结

从上面能够看出日志收集框架基本都是三个组件:

  • Agent : 部署在各个应用服务器,来收集应用的日志

  • Collector: 日志收集中心,把分散在Agent的统一统一收集到日志中心

  • Storage: 存储层,日志收集以后的存储

注: 这里的日志收集框架只是最简单的,若是数据量过大,以及考虑数据收集的可靠。能够在中间添加kafka或者redis等中间件,保证可靠以及缓冲等做用。

相关文章
相关标签/搜索