ELK日志系统架构
部署架构
数据采集层
这一层主要收集日志,也可以做一些简单的数据处理和过滤。通常有两种方式:
- 、日志采集客户端监,比如filebeat、logstash、Flume、Logagent、rsyslog、fluentd等
- 、直接从程序中将日志写入消息队列或es集群
消息队列
由于数据处理层中的logstash不能持久化存储数据,为防止异常时日志无法储存到es集群中,通常会加一层消息队列作为缓存和持久化存储数据,一般选择kafka或redis。
数据处理
日志写入es集群前,通常需要做一些数据处理,比如清理一些无效日志、对一些日志做格式化处理、根据不同的类型写入不同的索引等,由于这块可能比较消耗时间和性能,所以官方建议使用比较轻量级的filebeat来收集日志,将日志处理的操作放在服务端做。虽然logstash的功能十分强大,但是其缺点也一直然人诟病,就是在解析时对日志的消费速率会有很大影响。新版的es中针对这点也做了相应的策略,推出的ignest node可以用来处理数据。
数据存储
Es集群分布式存储数据,采用lucene作为其底层检索引擎,在上层提供了丰富的查询的api,方便快速查询想要的数据
数据展示
可以通过简单的配置kibana或grafana,就能图形化展示出es中存储的信息。也可以通过api的调用自己实现图形化的展示。