Logstash 配置文件是什么格式?

Logstash 配置文件由 input、filter、output 三段组成,采用类 JSON 的插件语法(插件名 + 键值对)。本文详解三段结构、常用插件与多文件加载规则。

最佳实践
Logstash 配置文件是什么格式?封面

核心结构: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.conf10-filters.conf30-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。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台