Logstash使用手册
Logstash 是 Elastic Stack(ELK Stack)中的一个核心组件,用于数据收集、处理和传输。它通过灵活的配置实现数据的输入、过滤和输出。以下是 Logstash 的配置详解,包括配置文件结构、常用插件和示例。
1. Logstash 配置文件结构
Logstash 配置文件通常分为三个部分:
-
Input:定义数据输入源。
-
Filter:对数据进行处理和转换。
-
Output:定义数据输出目标。
配置文件的基本结构如下:
input {
# 输入插件配置
}
filter {
# 过滤插件配置
}
output {
# 输出插件配置
}
2. 常用插件
输入插件(Input Plugins)
-
file:从文件中读取数据。
-
beats:接收来自 Filebeat 或其他 Beats 的数据。
-
kafka:从 Kafka 主题中消费数据。
-
jdbc:从数据库中读取数据。
-
syslog:接收 Syslog 数据。
-
http:通过 HTTP 接收数据。
过滤插件(Filter Plugins)
-
grok:解析非结构化日志数据。
-
mutate:修改字段(如重命名、删除、替换)。
-
date:解析日期字段。
-
json:解析 JSON 格式的数据。
-
geoip:根据 IP 地址添加地理位置信息。
-
drop:丢弃不符合条件的事件。
-
clone:复制事件。
输出插件(Output Plugins)
-
elasticsearch:将数据发送到 Elasticsearch。
-
stdout:将数据输出到控制台(用于调试)。
-
kafka:将数据发送到 Kafka。
-
file:将数据写入文件。
-
jdbc:将数据写入数据库。
3. 配置示例
示例 1:从文件读取日志并输出到 Elasticsearch
input {
file {
path => "/var/log/nginx/access.log"
start_position => "beginning"
sincedb_path => "/dev/null" # 禁用 sincedb,用于测试
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
}
geoip {
source => "clientip"
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "nginx-access-logs-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug # 输出到控制台,用于调试
}
}
示例 2:从 Kafka 消费数据并输出到文件
input {
kafka {
bootstrap_servers => "localhost:9092"
topics => ["logs"]
}
}
filter {
json {
source => "message"
}
mutate {
rename => { "user" => "username" }
}
}
output {
file {
path => "/var/log/logstash/output.log"
codec => line { format => "%{message}" }
}
}
示例 3:从数据库读取数据并输出到 Elasticsearch
input {
jdbc {
jdbc_driver_library => "/path/to/mysql-connector-java.jar"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
jdbc_user => "root"
jdbc_password => "password"
schedule => "* * * * *" # 每分钟执行一次
statement => "SELECT * FROM orders"
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "orders"
}
}
4. 常用配置选项
输入插件(Input)
-
path(file 插件):指定文件路径。
-
start_position(file 插件):从文件的开头(
beginning
)或结尾(end
)开始读取。 -
bootstrap_servers(kafka 插件):Kafka 服务器地址。
-
topics(kafka 插件):Kafka 主题名称。
过滤插件(Filter)
-
match(grok 插件):定义日志解析规则。
-
source(json 插件):指定 JSON 字段。
-
rename(mutate 插件):重命名字段。
-
remove_field(mutate 插件):删除字段。
输出插件(Output)
-
hosts(elasticsearch 插件):Elasticsearch 地址。
-
index(elasticsearch 插件):索引名称。
-
path(file 插件):输出文件路径。
5. 高级配置
多管道配置
Logstash 支持多管道配置,适用于处理不同类型的数据流。
-
创建管道配置文件(如
pipelines.yml
):- pipeline.id: nginx path.config: "/etc/logstash/conf.d/nginx.conf" - pipeline.id: kafka path.config: "/etc/logstash/conf.d/kafka.conf"
-
启动 Logstash 时指定配置文件:
bin/logstash -f /etc/logstash/pipelines.yml
性能优化
-
批量处理:增加
pipeline.batch.size
和pipeline.batch.delay
。 -
多线程:配置
pipeline.workers
为 CPU 核心数。 -
JVM 调优:调整
jvm.options
中的堆内存大小。
6. 常见问题与解决
问题 1:Logstash 启动失败
-
原因:配置文件语法错误或插件未安装。
-
解决:
-
检查配置文件语法:
bin/logstash --config.test_and_exit -f /path/to/config.conf
-
安装缺失的插件:
bin/logstash-plugin install logstash-input-kafka
-
问题 2:数据未输出到 Elasticsearch
-
原因:Elasticsearch 连接失败或索引配置错误。
-
解决:
-
检查 Elasticsearch 是否正常运行。
-
确认
hosts
和index
配置正确。
-
问题 3:Grok 解析失败
-
原因:日志格式与 Grok 模式不匹配。
-
解决:
-
使用 Grok Debugger 调试 Grok 模式。
-
调整 Grok 模式以匹配日志格式。
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2022-02-26 SpringCloud(2)---入门篇
2022-02-26 SpringCloud(1)---入门篇
2022-02-26 分库分表(2) --- ShardingSphere(理论)
2022-02-26 分库分表(1) --- ShardingSphere(理论)