Logstash 配置文件是什么格式?
Logstash 配置文件由 input、filter、output 三段组成,采用类 JSON 的插件语法(插件名 + 键值对)。本文详解三段结构、常用插件与多文件加载规则。
核心结构:Logstash 配置文件(.conf)由 input {}、filter {}、output {} 三个顶级区块组成,分别定义数据从哪里来、如何加工、发到哪里去;每个区块内部是"插件名 + 键值对"的声明式语法,filter 段可省略。
三段式骨架
input {
# 输入插件配置
}
filter {
# 过滤/加工插件配置(可选)
}
output {
# 输出插件配置
}
input:定义数据来源
一个配置文件可以有多个输入插件:
input {
file {
path => "/var/log/syslog"
start_position => "beginning"
}
tcp {
port => 5140
}
}
path 指定读取的文件路径;start_position => "beginning" 让首次读取从文件开头开始(默认只读新增内容)。
filter:解析与加工
常用插件包括 grok(正则模式提取)、mutate(字段增删改/类型转换)、date(时间解析)、json(JSON 解析)、geoip(IP 地理信息):
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
}
mutate {
remove_field => [ "message" ]
}
}
filter 内插件按书写顺序依次执行,条件判断用 if [level] == "ERROR" { ... }。
output:定义去向
output {
elasticsearch {
hosts => ["http://es:9200"]
index => "app-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug } # 调试期保留,上线前删掉
}
多文件与加载顺序
/etc/logstash/conf.d/ 下的所有 .conf 文件会被按文件名字典序拼接成一个完整管道,不是独立运行。因此常用数字前缀管理顺序:00-inputs.conf、10-filters.conf、30-outputs.conf。
观测云对照
如果维护 Logstash 管道成本过高,可以换用 DataKit + Pipeline。 观测云用 DataKit 统一采集,Pipeline 用 grok 做解析(语法与 Logstash 一脉相承),支持在线调试、即时生效,无需管理多文件拼接与进程重启。
常见问题(FAQ)
Q:filter 段可以不写吗?
A:可以。不加工数据时整个 filter 区块可省略,input 直接进 output。
Q:改完配置如何校验?
A:用 logstash --config.test_and_exit -f /etc/logstash/conf.d/ 做语法检查,通过后再重启。
Q:一个事件会经过所有 output 吗?
A:会,除非用条件语句分流。事件依次经过 input → filter → 每个匹配的 output。