🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 企业级日志解决方案设计 ![](https://box.kancloud.cn/1a39e73cb80d2d8e09e1cae3751bc7c9_1393x937.png) ## 1\. 组件说明 * filebeat:部署在每台应用服务器、数据库、中间件中,负责日志抓取与聚合日志 * 日志聚合:把多行日志合并成一条,例如exception的堆栈信息等 * logstash:通过各种filter结构化日志信息,并把字段transform成对应的类型 * elasticsearch:负责存储和查询日志信息 * kibana:通过ui展示日志信息、还能生成饼图、柱状图等 ## 2\. ELK常见部署架构 ### 2.1. Logstash作为日志收集器 * 这种架构是比较原始的部署架构,在各应用服务器端分别部署一个Logstash组件,作为日志收集器,然后将Logstash收集到的数据过滤、分析、格式化处理后发送至Elasticsearch存储,最后使用Kibana进行可视化展示,这种架构不足的是:Logstash比较耗服务器资源,所以会增加应用服务器端的负载压力![](https://box.kancloud.cn/d144c01ed1ba18bb04029efd5f7a963e_358x207.png) ### 2.2. Filebeat作为日志收集器 * 该架构与第一种架构唯一不同的是:应用端日志收集器换成了Filebeat,Filebeat轻量,占用服务器资源少,所以使用Filebeat作为应用服务器端的日志收集器,一般Filebeat会配合Logstash一起使用,这种部署方式也是目前最常用的架构![](https://box.kancloud.cn/5c1a4c112eb00689e21285ecb4adc36d_579x189.png) ### 2.3. 引入缓存队列的部署架构 * 该架构在第二种架构的基础上引入了Kafka消息队列(还可以是其他消息队列),将Filebeat收集到的数据发送至Kafka,然后在通过Logstasth读取Kafka中的数据,这种架构主要是解决大数据量下的日志收集方案,使用缓存队列主要是解决数据安全与均衡Logstash与Elasticsearch负载压力![](https://box.kancloud.cn/8834ccf1fdecc19116b59b24913e6bd2_936x269.png) ### 2.4. 以上三种架构的总结 * 第一种部署架构由于资源占用问题,现已很少使用,目前使用最多的是第二种部署架构,至于第三种部署架构个人觉得没有必要引入消息队列,除非有其他需求,因为在数据量较大的情况下,Filebeat 使用压力敏感协议向 Logstash 或 Elasticsearch 发送数据。如果 Logstash 正在繁忙地处理数据,它会告知 Filebeat 减慢读取速度。拥塞解决后,Filebeat 将恢复初始速度并继续发送数据