gpt4 book ai didi

docker - docker 日志记录到系统日志的严重性级别

转载 作者:行者123 更新时间:2023-12-02 18:25:23 26 4
gpt4 key购买 nike

我有一个 syslog-ng从运行在同一应用程序上的其他容器收集日志的容器,并且正常日志记录按预期工作:每个容器发送其日志,syslog-ng 将它们保存在单独的文件中,如 syslog-ng.conf 中所定义.
我也在尝试将错误日志保存在不同的文件中。我假设从另一个容器内抛出到 STDERR 的所有内容都应该被 syslog-ng 视为错误,所以当我启动这样的容器时:

docker run -dit --log-driver syslog --log-opt syslog-address=tcp://my_syslog:601 alpine echo "boom" > /dev/stderr
然后我希望 syslog-ng 将其理解为错误,但事实并非如此。
这是我的 syslog-ng.conf 的摘录在 syslog-ng 容器内:
@version: 3.25
source s_net {
network(transport(tcp) port(601));
network(transport(udp) port(514));
};
destination d_error_file {
file("/tmp/errors");
};
filter f_errors {
level(err .. emerg);
};
log {
source(s_net);
filter(f_errors);
destination(d_error_file);
};
如何告诉 syslog-ng 将 STDERR 消息视为错误?

最佳答案

我原来的回复设了/dev/stderr消息来源被误导了。我以为syslog-ng正在主机中运行。
syslog-ng当在容器中运行时,docker 守护进程从正在运行的容器中收集日志并通过网络将其发送到系统日志服务器。
这就是为什么必须在网络源上执行过滤的原因,就像您所做的那样。
我设置了以下项目来演示示例。

.
├── data
│   └── syslog-ng
│   ├── conf
│   │   └── syslog-ng.conf
│   └── logs
│   ├── errors
│   └── syslog
├── docker-compose.yml
└── hack.sh
docker-compose.yml
version: '3.8'

services:
hack:
image: alpine
command: /hack.sh
logging:
driver: syslog
options:
syslog-address: "tcp://host.docker.internal:601"
depends_on:
- syslog
volumes:
- '$PWD/hack.sh:/hack.sh'
syslog:
container_name: syslog-ng
image: balabit/syslog-ng:latest
volumes:
- '$PWD/data/syslog-ng/conf/syslog-ng.conf:/etc/syslog-ng/syslog-ng.conf'
- '$PWD/data/syslog-ng/logs:/var/log'
ports:
- 514:514
- 601:601
hack.sh :一个记录到 stderr 和 stdout 的 shell 脚本
#!/bin/sh

while :
do
echo "boom" >/dev/stderr;
echo "no boom";
sleep 2;
done
./data/syslog-ng/conf/syslog-ng.conf : 过滤器 info/var/log/syslogerror/var/log/error
@version: 3.29
@include "scl.conf"

source s_net {
udp(
ip("0.0.0.0")
);

network(
ip("0.0.0.0")
transport(tcp)
port(601)
);

};

filter f_errors {
level(err .. emerg);
};
filter f_info {
level(info);
};

destination d_file {
file("/var/log/syslog");
};
destination d_error_file {
file("/var/log/errors");
};

log {
source(s_net);
filter(f_info);
destination(d_file);
};
log {
source(s_net);
filter(f_errors);
destination(d_error_file);
};
除了为非错误消息创建不同的过滤器之外,上面的 syslog-ng 几乎没有区别。配置和您提供的配置。

关于docker - docker 日志记录到系统日志的严重性级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64444634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com