我正在尝试将 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 日志写入文件?