获取 logstash 将特定日志写入文件

获取 logstash 将特定日志写入文件

我正在尝试将 shadowsocks docker 中的日志放入一个文件中,以便可以将其与 fail2ban 集成。容器将日志输出到 stdout,它已经通过 docker-compose 与我的 ELK 堆栈(也是 docker)集成:

version: '3.9'
services:
  shadowsocks:
    image: shadowsocks/shadowsocks-libev
    ...
    logging:
      driver: gelf
      options:
        gelf-address: "udp://10.0.0.1:12201"
        tag: "shadowsocks"

我认为将 shadowsocks 日志写入文件的最简单方法是通过 logstash,其输出配置如下:

output {
    redis {
        host => "redis-cache"
        data_type => "list"
        key => "logstash"
    }

    if [tag] == "shadowsocks" {
        file {
            path => "/tmp/shadowsocks/shadowsocks-%{+YYYY-MM-dd}.log"
            codec => json
        }
    }
}

不幸的是,它从不写入任何日志。我认为问题出在条件语句上,if [tag] == "shadowsocks"因为当我删除它时,它会正常写入日志文件(当然,它会将所有内容写入日志文件,而不仅仅是 shadowsocks 日志)。

我做错了什么以及如何让 logstash 仅将 shadowsocks 日志写入文件?

相关内容