我有一个 Docker Swarm,其中运行着各种服务。我使用https://github.com/linuxserver/docker-syslog-ng添加了 syslog-ng OSE 服务。syslog-ng 堆栈具有以下 docker-compose.yml:
---
services:
syslog:
image: registry.local.net/syslog-ng:latest
ports:
- 514:514
volumes:
- /path/on/host/syslog-ng/config:/config
- /path/on/host/log:/log
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- LOG_TO_STDOUT=1
# healthcheck:
# test: ["CMD-SHELL", "/usr/sbin/syslog-ng-ctl healthcheck -c /config/syslog-ng.ctl || exit 1"]
# interval: 10s
# timeout: 2s
# retries: 3
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: on-failure
update_config:
parallelism: 1
delay: 10s
networks:
syslog:
networks:
syslog:
external: true
我的 syslog-ng.conf 文件是这样的:
@version: 4.2
@include "scl.conf"
options {
chain_hostnames(no);
flush_lines(0);
use_dns(no);
time_reopen(1);
};
source net {
tcp(ip(0.0.0.0) port(514));
};
template my_log_format {
template("$MSG\n");
};
filter f_access_log { program("httpd.access") };
destination d_logs {
file(
"/log/TEST"
owner("1000")
group("1000")
perm(0664)
template(my_log_format)
);
};
log {
source(net); filter(f_access_log); destination(d_logs);
};
我已经在 Docker Swarm 中配置了一个 Apache 服务,以使用 将其日志发送到 syslog-ng 服务logger -T -t httpd.accept -n syslog -P 514 --rfc3164
。
Syslog-ng 创建配置的日志文件,从 Apache 接收日志行,并定期将它们附加到配置的日志文件中。一切似乎都按我想要的方式进行。唯一的问题是 syslog-ng Docker 容器每 70-80 秒就会退出并重新启动一次。我尝试添加健康检查(上面已注释掉),但没有任何改变。检查已退出的容器显示,健康检查全部通过,直到容器以退出代码 137 退出,并且已退出容器的 docker 日志没有显示任何明显错误。
syslog-ng 当前日志文件显示以下内容(减去每行开头的时间戳):
Accepting connections; addr='AF_INET(0.0.0.0:514)'
syslog-ng starting up; version='4.8.1'
Syslog connection accepted; fd='14', client='AF_INET(10.0.6.244:37126)', local='AF_INET(0.0.0.0:514)'
在其中一个容器退出前的几秒,top
容器内部显示以下内容:
top - 08:31:26 up 169 days, 17:44, 0 user, load average: 1.13, 1.05, 1.05
Tasks: 15 total, 1 running, 14 sleeping, 0 stopped, 0 zombie
%Cpu(s): 23.8 us, 1.8 sy, 0.0 ni, 73.9 id, 0.0 wa, 0.2 hi, 0.2 si, 0.0 st
MiB Mem : 7652.9 total, 405.8 free, 2924.0 used, 4968.6 buff/cache
MiB Swap: 8192.0 total, 7883.4 free, 308.6 used. 4728.9 avail Mem
编辑:我以为我通过添加找到了解决方案
time-reap(30);
mark-freq(10);
到 syslog-ng 全局选项。在我最初做出该更改后,Docker 容器保持运行近 5 分钟,但现在即使使用这些选项,它也会每隔一分钟左右退出并重新启动一次。