1. ElasticStack 的组成
- **
Beats
**:数据采集 LogStash
: 数据处理ElasticSearch
(核心引擎): 数据存储、查询和分析Kibana
: 数据探索与可视化分析
2. Filebeat
Filebeat
是本地文件的轻量型日志数据采集器。Beats
可以直接(或者通过Logstash
)将数据发送到Elasticsearch
,在那里你可以进一步处理和增强数据,然后在Kibana
中将其可视化。
2.1 Filebeat 工作原理
Filebeat 由两个主要组件组成:prospector
和harvester
。这些组件一起工作来读取文件(tail file)并将事件数据发送到您指定的输出
- **
Harvester
**:- 负责读取单个文件的内容
- 如果文件在读取时被删除或重命名,
Filebeat
将继续读取文件
- **
prospector
**:prospector
负责**管理harvester
**并找到所有要读取的文件来源- 如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个
harvester
Filebeat
目前支持两种prospector
类型:log
和stdin
Filebeat
如何保持文件的状态
Filebeat
保存每个文件的状态并经常将状态刷新到磁盘上的注册文件中- 该状态用于记住
harvester
正在读取的最后偏移量,并确保发送所有日志行- 如果输出(例如
Elasticsearch
或Logstash
)无法访问,Filebeat
会跟踪最后发送的行,并在输出再次可用时继续读取文件。- 在
Filebeat
运行时,每个prospector
内存中也会保存的文件状态信息,当重新启动Filebeat
时,将使用注册文件的数据来重建文件状态,Filebeat
将每个harvester
在从保存的最后偏移量继续读取Filebeat
存储唯一标识符以检测文件是否先前已采集过
Filebeat
如何确保至少一次交付
Filebeat
保证事件至少会被传送到配置的输出一次,并且不会丢失数据。Filebeat
能够实现此行为,因为它将每个事件的传递状态存储在注册文件中。- 在输出阻塞或未确认所有事件的情况下,
Filebeat
将继续尝试发送事件,直到接收端确认已收到。- 如果
Filebeat
在发送事件的过程中关闭,它不会等待输出确认所有收到事件。- 发送到输出但在
Filebeat
关闭前未确认的任何事件在重新启动Filebeat
时会再次发送。- 这可以确保每个事件至少发送一次,但最终会将重复事件发送到输出。
- 也可以通过设置
shutdown_timeout
选项来配置Filebeat
以在关闭之前等待特定时间
2.2 Filebeat 安装与配置
安装Filebeat
,创建配置文件itcast.yml
,控制台运行测试
1 | #创建如下配置文件 itcast.yml |
输入 hello 运行结果如下:
1 | hello |
2.3 读取文件
创建配置文件itcast-log.yml
1 | filebeat.inputs: |
在/test/
下创建a.log
文件,并输入如下内容hello world
,观察filebeat
输出:
1 | { |
2.4 自定义字段
1 | filebeat.inputs: |
2.5 输出到 Elasticsearch
1 | filebeat.inputs: |
2.6 读取 Nginx 日志文件
1 | filebeat.inputs: |
2.7 Filebeat 的 Module
日志数据的读取与处理可以不用手动配置的,在Filebeat
中,有大量的Module
,可以直接使用简化配置。
1 | ./filebeat modules list |
可以看到,内置了很多的module
,但都没有启用,如果需要启用需要进行enable
操作:
1 | /filebeat modules enable nginx #启动 |
2.8 nginx module 与 filebeat 配置
1 | - module: nginx |
1 | #vim itcast-nginx.yml |
若启动报错,需要在Elasticsearch
中安装ingest-user-agent、ingest-geoip
插件
3. Metricbeat
用于从系统和服务收集指标。Metricbeat
和Filebeat
一样,是一个轻量级的采集器,Metricbeat
由模块(Module
)和度量集(Metricset
)组成。Metricbeat
模块定义了从特定服务(如 Redis,MySQL 等)收集数据的基本逻辑。该模块指定有关服务的详细信息,包括如何连接,收集指标的频率以及要收集的指标。
Metricbeat
有 2 部分组成,一部分是Module
,另一部分为Metricset
。Module
- 收集的对象,如:
mysql、redis、nginx、操作系统
等;
- 收集的对象,如:
Metricset
- 收集指标的集合,如:
cpu、memory、network
等;
- 收集指标的集合,如:
- 以
Redis Module
为例:
3.1 安装配置
安装 Metricbeat,根据实际情况配置文件metricbeat.yml
1 | metricbeat.config.modules: |
启动:./metricbeat -e
查看module
列表:./metricbeat modules list
1 | Enabled: |
system module
默认启用的,其配置:
1 | cat system.yml |
3.2 Nginx Module
在 nginx 中,需要开启状态查询,才能查询到指标数据。
1 | # 配置nginx |
- 通过
192.168.56.13/nginx-status
查看nginx-status
Active connections
:正在处理的活动连接数server accepts handled requests
(连接数,握手数,处理请求总数)Reading: 0 Writing: 1 Waiting: 1
( 读取到客户端的 Header 信息数,返回给客户端 Header 信息数,已经处理完正在等候下一次请求指令的驻留链接)
配置Nginx Module(metricbeat/modules.d/nginx.yml)
1 | - module: nginx |
启动:./metricbeat -e
4. Logstash
Logstash
是ElasticStack
中的实时数据采集引擎,可以采集来自不同数据源的数据,并对数据进行处理后输出到多种输出源,是Elastic Stack
的重要组成部分。
4.1 Logstash 的数据处理过程
Inputs(Codecs)-->Filters-->Outputs(Codecs)
- 用户通过定义
pipeline
配置文件,设置需要使用的input
,filter
,output
,codec
插件,以实现特定的数据采集,数据处理,数据输出等功能
- 用户通过定义
Inputs
:用于从数据源获取数据,常见的插件如file, syslog, redis, beats
等Filters
:用于处理数据如格式转换,数据派生等,常见的插件如grok, mutate, drop, clone, geoip
等Outputs
:用于数据输出,常见的插件如elastcisearch,file, graphite, statsd
等Codecs
:Codecs
不是一个单独的流程,而是在输入和输出等插件中用于数据转换的模块,用于对数据进行编码处理,常见的插件如json,multiline
4.2 执行模型
- 每个
Input
启动一个线程,从对应数据源获取数据 Input
会将数据写入一个队列:默认为内存中的有界队列(意外停止会导致数据丢失)。为了防止数丢失Logstash
提供了两个特性:Persistent Queues
:通过磁盘上的queue
来防止数据丢失Dead Letter Queues
:保存无法处理的event
(仅支持Elasticsearch
作为输出源)
Logstash
会有多个pipeline worker
, 每一个pipeline worker
会从队列中取一批数据,然后执行filter
和output
(worker
数目及每次处理的数据量均由配置确定)
4.3 安装配置
下载Logstash
并解压,配置有三部分,如下:
1 | input { #输入 |
4.4 读取自定义日志
- 日志结构:
2019-11-23 21:21:21|ERROR|读取数据出错|参数:id=1002
,日志中的内容是使用“|”
进行分割的,使用,我们在处理的时候,也需要对数据做分割处理。 - 编写配置文件
1 | #vim itcast-pipeline.conf |
- 启动测试
1 | #启动 |
- 输出到
Elasticsearch
配置
1 | output { |
5. Elasticsearch + Logstash + Beats + Kibana 基础整合
1 | (读取) (发送) (写入) (读取) |
Filebeat
配置与启动:
1 | #vim itcast-dashboard.yml |
Logstash
配置与启动:
1 | #vim itcast-dashboard.conf |
ElasticSearch
启动与Kibana
启动:
1 | # ElasticSearch默认端口:9200 |