亿级 ELK 日志平台构建实践


亿级 ELK 日志平台构建实践

文章插图
 
本篇主要讲工作中的真实经历,我们怎么打造亿级日志平台,同时手把手教大家建立起这样一套亿级 ELK 系统 。日志平台具体发展历程可以参考上篇 「从 ELK 到 EFK 演进」
废话不多说,老司机们座好了,我们准备发车了~~~
整体架构
亿级 ELK 日志平台构建实践

文章插图
 
整体架构主要分为 4 个模块,分别提供不同的功能
Filebeat:轻量级数据收集引擎 。基于原先 Logstash-fowarder 的源码改造出来 。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择 。
Kafka: 数据缓冲队列 。作为消息队列解耦了处理过程,同时提高了可扩展性 。具有峰值处理能力,使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃 。
Logstash :数据收集处理引擎 。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用 。
Elasticsearch :分布式搜索引擎 。具有高可伸缩、高可靠、易管理等特点 。可以用于全文检索、结构化检索和分析,并能将这三者结合起来 。Elasticsearch 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎 。
Kibana :可视化化平台 。它能够搜索、展示存储在 Elasticsearch 中索引数据 。使用它可以很方便的用图表、表格、地图展示和分析数据 。
版本说明Filebeat: 6.2.4Kafka: 2.11-1Logstash: 6.2.4Elasticsearch: 6.2.4Kibana: 6.2.4相应的版本最好下载对应的插件具体实践我们就以比较常见的 Nginx 日志来举例说明下,日志内容是 JSON 格式
{"@timestamp":"2017-12-27T16:38:17+08:00","host":"192.168.56.11","clientip":"192.168.56.11","size":26,"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-","http_host":"192.168.56.11","url":"/nginxweb/index.html","domain":"192.168.56.11","xff":"-","referer":"-","status":"200"}{"@timestamp":"2017-12-27T16:38:17+08:00","host":"192.168.56.11","clientip":"192.168.56.11","size":26,"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-","http_host":"192.168.56.11","url":"/nginxweb/index.html","domain":"192.168.56.11","xff":"-","referer":"-","status":"200"}{"@timestamp":"2017-12-27T16:38:17+08:00","host":"192.168.56.11","clientip":"192.168.56.11","size":26,"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-","http_host":"192.168.56.11","url":"/nginxweb/index.html","domain":"192.168.56.11","xff":"-","referer":"-","status":"200"}{"@timestamp":"2017-12-27T16:38:17+08:00","host":"192.168.56.11","clientip":"192.168.56.11","size":26,"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-","http_host":"192.168.56.11","url":"/nginxweb/index.html","domain":"192.168.56.11","xff":"-","referer":"-","status":"200"}{"@timestamp":"2017-12-27T16:38:17+08:00","host":"192.168.56.11","clientip":"192.168.56.11","size":26,"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-","http_host":"192.168.56.11","url":"/nginxweb/index.html","domain":"192.168.56.11","xff":"-","referer":"-","status":"200"}Filebeat
【亿级 ELK 日志平台构建实践】为什么用 Filebeat,而不用原来的 Logstash 呢?
原因很简单,资源消耗比较大 。
由于 Logstash 是跑在 JVM 上面,资源消耗比较大,后来作者用 GO 写了一个功能较少但是资源消耗也小的轻量级的 Agent 叫 Logstash-forwarder 。


推荐阅读