日志收集系统-探究

Kurtis7288 3年前
   <p>常用的日志收集系统有Syslog-ng,Scribe,Flume,当然还有ELK的LogStash.而目前互联网公司最长用的时Scribe和Flume,Scibe是非死book开源的,但是现在已经不维护,所以不推荐使用。</p>    <p><strong>Scribe</strong></p>    <p>Scribe是非死book开源的日志收集系统,在非死book内部已经得到大量的应用。Scribe是基于一个非阻断C++服务的实现。它能够从各种日志源上收集日志,存储到一个中阳存储系统。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/12a70171175bfb5ce37f3888ec843880.png"></p>    <p><strong>三个角色:</strong></p>    <ul>     <li>日志服务器      <ul>       <li>为了收集日志,每一台日志服务器上都会部署一个scribe客户端,它包含两个模块agent 和 local_server</li>       <li>Agent是以tail的方式读取本地目录下的日志文件,并将数据写到本地的Local_server</li>       <li>local_server通过zookeeper定位到Center_server</li>      </ul> </li>     <li>中心服务器      <ul>       <li>中心服务器作用就是把散落在各个机器的日志统一收集起来</li>       <li>Center_server和Local_server一样,只是配置不同,通过thrift进行通信</li>       <li>center_server收到数据后,根据配置将各个category的数据发向不同的方向,比如写到HDFS或者发到Kafka等</li>      </ul> </li>     <li>存储服务器      <ul>       <li>最终存储日志的地方</li>       <li>供计算框架以及搜索引擎框架计算使用</li>      </ul> </li>    </ul>    <p><strong>LogStash</strong></p>    <p>Logstash是ELK中的一个工具,在ELK中起到的作用是对日志进行收集、分析、过滤。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/e113352137d57dac35ce45915c509140.png"></p>    <p><strong>上图所示,由三个组件组成:</strong></p>    <ul>     <li>数据来源,支持较多输入源的插件      <ul>       <li>beats</li>       <li>file</li>       <li>http</li>       <li>jdbc</li>       <li>kafka</li>       <li>log4j</li>       <li>...</li>      </ul> </li>     <li>过滤器      <ul>       <li>json</li>       <li>csv</li>       <li>...</li>      </ul> </li>     <li>输出目的地      <ul>       <li>file</li>       <li>mongodb</li>       <li>rabbitmq</li>       <li>kafka</li>      </ul> </li>    </ul>    <p><strong>Flume</strong></p>    <p>Flume是分布式的、可靠的、高性能、可扩展的的日志收集框架。</p>    <p><strong>Flume的Agent</strong></p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/0650ab9259b603b2cbf58a428a097ebd.png"></p>    <p>Agent由三部分组成:</p>    <ul>     <li>Source: 数据源</li>     <li>Channel:包括两种fileChannel和Memorychannel</li>     <li>Sink:输出目的地</li>    </ul>    <p><img src="https://simg.open-open.com/show/258334c338861368b7a99e76367bb0c3.png"></p>    <p><strong>三个角色:</strong></p>    <ul>     <li>客户端日志收集层      <ul>       <li>在每个客户端部署一个Agent进程,负责对单机的日志手机工作</li>      </ul> </li>     <li>中心服务器      <ul>       <li>Collector层部署在中心服务器上,负责接收Agent层发送的日志,并且将日志根据路由规则写到响应的Store层</li>      </ul> </li>     <li>存储层</li>    </ul>    <p><strong>对比</strong></p>    <ul>     <li> <p>Scribe:C++编写,现在已经不再维护,不推荐使用</p> </li>     <li> <p>Logstash: 针对日志收集,搜索,计算,可视化有一系列的产品,并且可使用的插件以及社区较为活跃推荐使用</p> </li>     <li> <p>Flume: Java编写,较为灵活,并且吞吐量高。业界已经验证过,建议使用。</p> </li>    </ul>    <p><strong>总结</strong></p>    <p>从上面可以看出日志收集框架基本都是三个组件:</p>    <ul>     <li> <p>Agent : 部署在各个应用服务器,来收集应用的日志</p> </li>     <li> <p>Collector: 日志收集中心,把分散在Agent的统一统一收集到日志中心</p> </li>     <li> <p>Storage: 存储层,日志收集之后的存储</p> </li>    </ul>    <p><strong>注:</strong></p>    <p>这里的日志收集框架只是最简单的,如果数据量过大,以及考虑数据收集的可靠。可以在中间添加kafka或者redis等中间件,保证可靠以及缓冲等作用。</p>    <p> </p>    <p>来自:http://www.cnblogs.com/beginmind/p/6058194.html</p>    <p> </p>