点一下关注吧!!!非常感谢!!持续更新!!!
目前已经更新到了:
- Hadoop(已更完)
- HDFS(已更完)
- MapReduce(已更完)
- Hive(已更完)
- Flume(已更完)
- Sqoop(已更完)
- Zookeeper(已更完)
- HBase(已更完)
- Redis (已更完)
- Kafka(已更完)
- Spark(已更完)
- Flink(已更完)
- ClickHouse(已更完)
- Kudu(已更完)
- Druid(已更完)
- Kylin(已更完)
- Elasticsearch(正在更新...)
章节内容
上节我们完成了如下的内容:
- Elasticsearch DocValues 机制原理
- Elasticsearch DocValues 压缩与禁用
简要介绍
Logstash 是一个开源的服务器端数据处理管道工具,主要用于实时收集、过滤、转换和输出数据。它可以从多种数据源(如日志文件、数据库、消息队列等)中收集数据,并经过自定义的过滤处理后,输出到目标系统(如 Elasticsearch、数据库或文件等)。作为 Elastic Stack(也称为 ELK Stack)的一部分,Logstash 通常与 Elasticsearch 和 Kibana 配合使用,用于实时日志处理、分析和可视化。
Logstash 的架构
Logstash 由三大核心组件组成:
-
输入(Inputs): 输入插件用于收集数据,它能够从各种不同的数据源获取信息。支持的数据源包括日志文件、数据库、Kafka、HTTP API、消息队列(如 RabbitMQ)、系统标准输入等。
-
过滤(Filters): 过滤器是数据处理和转换的关键部分。Logstash 使用过滤插件对输入的数据进行过滤和修改。常用的过滤插件有 grok、mutate、date、json、csv 等。你可以利用这些插件对数据进行解析、字段提取、格式化等处理。
-
输出(Outputs): 输出插件将处理后的数据发送到指定的目标位置。常用的输出插件包括 Elasticsearch、文件系统、Kafka、数据库、标准输出等。
此外,Logstash 还支持编码器(Encoders)和解码器(Decoders),用于将数据编码或解码成特定格式,例如 JSON、XML、CSV 等。
Logstash 的工作流程
Logstash 的工作流程如下:
- 数据输入(Input): Logstash 从数据源中收集原始数据,如应用程序日志、系统日志或网络流量日志等。
- 数据过滤(Filter): 收集到的数据通过配置的过滤器进行处理。这一步可以解析日志、过滤无用数据、格式化字段、添加或删除字段、进-行数据聚合等操作。
- 数据输出(Output): 最终经过处理的数据被输出到一个或多个目标系统,如 Elasticsearch 用于存储和搜索,或者输出到文件用于归档。
Logstash 的功能特性
- 多种输入插件支持: Logstash 支持多种输入源,几乎可以从任何类型的系统或文件中收集数据。这些输入源可以是本地的日志文件、数据库、HTTP、TCP、UDP 连接等。
- 强大的数据处理能力: Logstash 提供了丰富的过滤插件,可以对数据进行复杂的操作。通过 grok 插件,用户可以解析复杂的日志格式,提取关键信息。Logstash 还支持条件语句,可以根据条件对不同的数据进行不同的处理。
- 灵活的输出机制: Logstash 支持多种输出方式,可以将数据发送到多个目标系统。常见的输出包括 Elasticsearch、文件系统、标准输出、Kafka 等。
- 扩展性: Logstash 通过插件架构设计,用户可以根据需要开发和使用自定义插件,从而满足各种特殊需求。
- 实时性: Logstash 可以实时处理大量数据,适合于实时日志分析、事件响应、监控告警等场景。
- 错误处理和重试机制: Logstash 支持对处理失败的数据进行重试和错误处理,确保数据不丢失,并提供可靠的传输保障。
官方网站
shell
https://www.elastic.co/logstash
对应的页面截图如下:
Logstash就是一个具备实时数据传输能力的管道,负责将数据信息从管道的输入传出到管道的输出端,与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供里很多功能强大的滤网以满足你的各种应用场景。是一个 input | filter | output 的数据流。
项目下载
下载指定版本的Logstash,我这里适配着ES的版本,7.3版本:
shell
https://www.elastic.co/downloads/past-releases#logstash
这里放一个直达链接,7.3 版本的:
shell
https://www.elastic.co/downloads/past-releases/logstash-7-3-0
我这里直接下载到服务器上 h121.wzk.icu 节点。
shell
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.3.0.tar.gz
对应的截图如下图所示:
解压配置
shell
cd /opt/software
mv logstash-7.3.0 ../servers/
cd /opt/servers/logstash-7.3.0/
对应的截图如下所示:
Input插件
stdin与stdout
标准输入和标准输出,实现我们的数据从控制台输入,从控制台输出。
shell
cd /opt/servers/logstash-7.3.0/
bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
{
"@version" => "1",
"host" => "h121.wzk.icu",
"@timestamp" => 2024-08-16T08:33:13.126Z,
"message" => "hello"
}
运行之后,可以看到控制台对应的输出为如下的内容:
监控日志文件变化
修改配置
Logstash 使用一个名叫 FileWatch 的 Ruby Gem 库来监听文件变化,这个库支持glob展开路径,而且会记录一个叫 .sincedb 的数据库文件来跟踪被监听的日志文件的当前读取位置。所以,不要担心 Logstash 会漏掉你的数据。
shell
cd /opt/servers/logstash-7.3.0/config
vim monitor_file.conf
向其中写入对应的内容,并退出保存:
shell
input{
file{
path => "/opt/servers/es/logs/wzkicu-es.log"
type => "log"
start_position => "beginning"
}
}
output{
stdout{
codec=>rubydebug
}
}
写入的内容如下图所示:
补充一下:start_positon => beginning 或者是 end
检查配置
通过下面的指令进行检查:
shell
cd /opt/servers/logstash-7.3.0
bin/logstash -f /opt/servers/logstash-7.3.0/config/monitor_file.conf -t
如果成功会出现如下的内容:
shell
root@h121:/opt/servers/logstash-7.3.0# bin/logstash -f /opt/servers/logstash-7.3.0/config/monitor_file.conf -t
Thread.exclusive is deprecated, use Thread::Mutex
Sending Logstash logs to /opt/servers/logstash-7.3.0/logs which is now configured via log4j2.properties
[2024-08-16T10:54:39,712][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2024-08-16T10:54:40,796][INFO ][org.reflections.Reflections] Reflections took 43 ms to scan 1 urls, producing 19 keys and 39 values
Configuration OK
[2024-08-16T10:54:41,914][INFO ][logstash.runner ] Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash
root@h121:/opt/servers/logstash-7.3.0#
对应的截图如下图所示:
可以看到:"Configuration OK",说明我们的配置文件是正确的。
启动服务
shell
cd /opt/servers/logstash-7.3.0
bin/logstash -f /opt/servers/logstash-7.3.0/config/monitor_file.conf
启动结果如下图所示:
发送数据
我们监听到是ES的日志,只要你进行一些操作,就会看到日志被解析了:
其他参数
- Path => 表示监控的文件路径Type=>给类型打标记,用来区分不同的文件类型。
- Start_position=>从哪里开始记录文件,默认是从结尾开始标记,要是你从头导入一个文件就改成 beginning
- discover_interval=>多久去监听path下是否有文件,默认是15s exclude =>排除什么
- close_older=>一个已经监听中的文件,如果超过这个值的事件内没有更新内容,就关闭监听它的文件句柄。默认是3600秒,即1个小时。
- sincedb=>path监控库存放位置(默认的读取文件信息记录在哪个文件中),默认在:/data/plugins/inputs/file。
- sincedb_write_interval=>Logstash每隔多久写一次sincedb文件,默认是15秒
- start_interval=>Logstash每隔多久检查一次被监听文件状态(是否有更新),默认是1秒。