ELK-基础
ELK系统简介
ELK其实是Elasticsearch,Logstash 和 Kibana三个产品的首字母缩写,这三款都是开源产品。
- ElasticSearch(简称ES),是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。
- Logstash,是一个数据收集引擎,主要用于进行数据收集、解析,并将数据发送给ES。支持的数据源包括本地文件、ElasticSearch、MySQL、Kafka等等。
- Kibana,为 Elasticsearch 提供了分析和 Web 可视化界面,并生成各种维度表格、图形。
graph LR
A["日志文件.log"] --> B["Logstash<br/>(日志采集)"] --> C["Elasticsearch<br/>(存储和搜索)"] --> D["Kibana<br/>(可视化和生成报表)"]
style A fill:#ffc0cb,stroke:#333,stroke-width:2px
style B fill:#ffff00,stroke:#333,stroke-width:2px
style C fill:#4e8aee,stroke:#333,stroke-width:2px
style D fill:#ff00ff,stroke:#333,stroke-width:2pxELK 平台是一套完整的日志集中处理解决方案,将 Elasticsearch、Logstash 和 Kibana 三个开源工具配合使用,满足更强大的用户对日志的查询、排序、统计需求。其核心价值在于实现日志的集中化管理,解决了传统方式下日志分散、检索效率低、分析困难的问题,极大提高了运维效率、系统性能监控和安全性分析的能力
核心组件
Elasticsearch (ES)
Elasticsearch 是 ELK 栈的核心,负责数据的存储、索引和检索。
- 近实时 (NRT): 从文档索引到可搜索的延迟很短(通常约 1 秒)。
- 集群 (Cluster) & 节点 (Node): 一个集群由一个或多个节点组成,共同存储数据并提供联合索引和搜索功能。节点是集群中的一台服务器。
- 索引 (Index): 一类文档的集合(类似于关系型数据库中的“数据库”)。索引名称必须小写。
- 文档 (Document): 可被索引的基本信息单元,以 JSON 格式表示(类似于关系型数据库中的“行”)。
- 分片 (Shard) & 副本 (Replica): 索引可以被分成多个分片以实现水平扩展和并行操作。每个分片可以有零个或多个副本,提供高可用性。
| 关系型数据库 | Elasticsearch |
|---|---|
| 数据库 (Database) | 索引 (Index) |
| 表 (Table) | 类型 (Type) (7.x 版本后逐渐废弃) |
| 行 (Row) | 文档 (Document) |
| 列 (Column) | 字段 (Field) |
Logstash
官网:https://www.elastic.co/cn/logstash
Logstash 是一个灵活的数据处理管道,工作流程分为三个阶段:
- Input (输入): 从各种数据源(如文件、数据库、消息队列、监控数据等)采集数据。
- Filter (过滤): 解析、转换和丰富数据。常用过滤器包括:
- Grok: 解析非结构化的日志数据并将其结构化为有意义的字段。
- Date: 解析日期字段。
- Mutate: 修改字段,例如重命名、删除、替换。
- Output (输出): 将处理后的数据发送到目的地,最常见的是 Elasticsearch,也可以是其他存储或中间件。
Kibana
官网:https://www.elastic.co/cn/kibana
Kibana 是 Elasticsearch 数据的窗口,提供以下主要功能:
- Discover: 交互式地探索和搜索 Elasticsearch 中的数据。
- Visualize: 基于数据创建各种图表(柱状图、折线图、饼图等)、地图和图形。
- Dashboard: 将多个可视化图形整合到一个仪表板中,进行综合展示和监控。
- Canvas: 创建高度自定义的动态数据报告。
- Machine Learning: 提供机器学习功能,用于异常检测。
- Stack Management: 管理和管理 Elastic Stack 的功能。
Filebeat
官网:https://www.elastic.co/cn/beats/filebeat
轻量型日志采集器
Filebeat 是什么?
Filebeat 是用于转发和集中日志数据的轻量级传送程序。作为服务器上的代理安装,Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或Logstash进行索引。
工作原理
启动Filebeat时,它将启动一个或多个输入源,这些输入将在为日志数据指定的位置中查找。对于Filebeat所找到的每个日志,Filebeat都会启动收集器harvester进程。每个收集器harvester都读取一个日志以获取新内容,并将新日志数据发送到libbeatlibbeat会汇总事件并将汇总的数据发送到为Filebeat配置的输出。
Filebeat可以保持每个文件的状态,并且频繁地把文件状态从注册表里更新到磁盘。这里所说的文件状态是用来记录上一次Harvster读取文件时读取到的位置,以保证能把全部的日志数据都读取出来,然后发送给output。如果在某一时刻,作为output的ElasticSearch或者Logstash变成了不可用,Filebeat将会把最后的文件读取位置保存下来,直到output重新可用的时候,快速地恢复文件数据的读取。在Filebaet运行过程中,每个Prospector的状态信息都会保存在内存里。如果Filebeat出行了重启,完成重启之后,会从注册表文件里恢复重启之前的状态信息,让FIlebeat继续从之前已知的位置开始进行数据读取。
Filebeat 和 Logstash区别
logstash是jvm跑的,资源消耗比较大,启动一个logstash就至少需要消耗500M左右的内存(这就是为什么logstash启动特别慢的原因),而filebeat只需要10来M内存资源。常用的ELK日志采集方案中,大部分的做法就是将所有节点的日志内容通过filebeat发送到logstash,logstash根据配置文件进行过滤。然后将过滤之后的文件输送到elasticsearch中,通过kibana去展示。
Metricbeat
logstash是负责采集数据的,是入口,流向为logstash-> ES->kibana,但是它的资源消耗很大,有时候没那么多内存给他占用,同时有些定制的采集指标logstash无法满足。所以我们想使用轻量级的采集工具metricbeat来实现采集,流向为metricbeat-> ES->kibana,可以获取系统级的 CPU 使用率、内存、文件系统、磁盘 IO 和网络 IO 统计数据,还可针对系统上的每个进程获得与 top 命令类似的统计数据。同时Metricbeat 提供多种内部模块,用于从服务中收集指标,例如 Apache、NGINX、MongoDB、MySQL、PostgreSQL、Prometheus、Redis 等等。
ELK 工作流程
ELK 系统处理日志的典型流程可以概括为以下几步:
- 日志收集: 在各个应用服务器上,通过 Logstash 或更轻量的 Filebeat 等采集器监控并收集日志文件的变化。
- 日志处理与传输: 采集到的日志数据可以被直接或通过消息队列(如 Kafka)发送给 Logstash。Logstash 使用配置好的过滤器(如 Grok)对日志进行解析、清洗、格式转换,将其变成结构化的 JSON 数据。
- 存储与索引: 处理后的结构化数据被输出到 Elasticsearch 集群。Elasticsearch 会对数据进行索引和存储,建立倒排索引,以便实现快速搜索。
- 可视化与分析: 用户通过 Kibana 访问 Elasticsearch 中存储的数据,可以进行搜索、生成图表、构建实时监控仪表盘等操作。
flowchart LR
A[应用/系统日志] --> B[Filebeat<br>轻量级日志采集器]
B -- 原始日志数据 --> C[Logstash<br>数据处理管道]
C -- 已解析的结构化数据 --> D[Elasticsearch<br>存储与搜索引擎]
D -- 数据查询与展示 --> E[Kibana<br>可视化平台]
F[(消息队列<br>Kafka/Redis)] --> C
B -- 原始日志数据 --> F
style A fill:#ffc0cb,stroke:#333,stroke-width:2px
style B fill:#ffff00,stroke:#333,stroke-width:2px
style C fill:#90ee90,stroke:#333,stroke-width:2px
style D fill:#0000ff,stroke:#333,stroke-width:2px,color:#fff
style E fill:#ff00ff,stroke:#333,stroke-width:2px,color:#fff
style F fill:#ffa500,stroke:#333,stroke-width:2px