# ELK
:一个对大量数据(通常是日志)进行采集、存储、展示的系统,又称为 ELK Stack 或 Elastic Stack ,由 Elastic 公司发布。
# 原理
# 组件
ELK 系统主要由以下软件组成:
- ElasticSearch
- 用于存储数据,并支持查询。
- Logstash
- 用于收集日志数据,解析成格式化数据之后,发送到 ES 中存储。
- Kibana
- 一个基于 node.js 运行的 Web 服务器,用于查询、管理 ES 。
ELK 系统还可以选择加入以下软件:
- Beats
- 采用 Golang 语言开发,用于采集日志数据。比 Logstash 更轻量级,但功能较少。
- Beats 程序有多种类型:
- Filebeat :用于采集日志文件。
- Packetbeat :用于采集网络数据包的日志。
- Winlogbeat :用于采集 Windows 的 event 日志。
- Metricbeat :用于采集系统或软件的性能指标。
- Auditbeat :用于采集 Linux Audit 进程的日志。
- 用户也可以基于 Beats 框架开发自定义的 Beats 程序。
- Elastic Agent
- v7.8 版本新增的软件,用于采集日志数据。它集成了不同类型的 Beats 的功能。
- Observability
- 为 Kibana 扩展了一些日志可视化的功能,比如实时查看日志、设置告警规则。
- Security
- 用于监控一些安全事项。
- APM(Application Performance Monitoring)
- 用于采集、监控应用程序的性能指标。
- Enterprise Search
- 提供搜索功能,可以集成到业务网站的搜索栏中。
总结:
- 上述软件都是由 Elastic 公司开发。
- 这些软件运行时可能需要 JDK、node.js 等环境,不过从 v7.0 版本开始,二进制发行版都已经自带了。
- 部署时,ELK 系统中各个软件的版本应该尽量一致,否则可能不兼容。
# 工作流程
ELK 的主要工作流程:
- 在每个主机上部署 Beats 进程,自动采集日志,然后发送到 Logstash 。
- Logstash 将日志解析成 JSON 格式,然后发送到 ES 中存储。
- 用户使用 Kibana ,从 ES 中查询日志数据并展示。
考虑到整个工作流程的耗时、Kibana 网页刷新的耗时,用户查看最新日志大概有几秒的延迟。
关于 Logstash 与 Beats :
- 早期,是用 Logstash 采集日志然后发送到 ES 中存储。
- 后来,由于 Logstash 消耗内存较多,采集日志的效率较低,因此开发了轻量级的 Beats 程序来取代 Logstash 。
- Beats 不擅长解析日志文本。因此通常不会让 Beats 直接将原始日志发送到 ES ,而是先发送到 Logstash 进行解析,再由 Logstash 发送到 ES 。
- 如果日志的并发量太大,可以让 Beats 将采集的日志先发送到 Kafka 缓冲,然后让 Logstash 从 Kafka 获取数据。
# 相关概念
Flume
- :一个命令行工具,用于日志采集。类似于 Logstash ,但功能较少。
- 由 Cloudera 公司采用 Java 语言开发,2012 年成为 ASF 的顶级项目。
- 通过 tail -f 的方式采集日志文件的内容,因此重启采集进程之后会重复采集。
Fluentd
- :一个命令行工具,用于日志采集。类似于 Logstash ,也有丰富的插件。
- 2011 年由 Treasure Data 公司发布,采用 Ruby 语言开发。
- 采集的数据解析为 JSON 对象,可以输出到 ES、MongoDB、Kafka 等。
- 可以替换 ELK 系统中的 Logstash ,组成 EFK 。
Loki
- :一个包括日志采集、存储、展示的系统,由 Grafana Labs 公司发布。包括以下组件:
- Promtail :用于采集日志文件。
- Loki :用于存储日志数据。
- Grafana :用于展示日志数据。
- 借鉴了 Prometheus 的工作方式,给日志数据添加一些键值对格式的标签,从而筛选日志。比 ELK 的查询、显示速度快很多,但不支持全文搜索。
- :一个包括日志采集、存储、展示的系统,由 Grafana Labs 公司发布。包括以下组件: