答案1
你的问题的答案按照要求简单来说就是:你不知道。 NGINX 不使用本地系统日志机制将其日志存储在文件中 - 它直接打开并处理它们。
NGINX 确实不是使用 rsyslog 或任何其他日志记录机制来存储其日志文件。NGINX 打开它们直接地,绕过rsyslogd
其余的系统日志守护进程。
然而 NGINX做有直接向syslog报告的机制。
这方面的例子(来自http://nginx.org/en/docs/syslog.html)如下:
# This will enable debug level logging and send to the remote syslog server at
# 192.168.1.1 on UDP port 514
error_log syslog:server=192.168.1.1 debug;
# This logs to a syslog server listening on a local UNIX socket.
access_log syslog:server=unix:/var/log/nginx.sock,nohostname;
# This logs to a remote syslog server at IPv6 address 2001:db8::1 on UDP port 12345
# using the reporting facility 'local7', tagging it as nginx, and logging with INFO
# level logging, using the default 'combined' format for logging.
access_log syslog:server=[2001:db8::1]:12345,facility=local7,tag=nginx,severity=info combined;
每个参数的详细信息位于链接的文档中。
不过你很可能会想用这个:
error_log syslog:server=192.168.1.3,facility=local7;
access_log syslog:server=192.168.1.3,facility=local7,severity=info;
只需确保配置远程系统日志服务器以local7
相应地处理 NGINX 条目的设施/通道。
答案2
@thomas-ward 给出了一个很好的答案,但不幸的是它对我没有用...经过一番挖掘后,我使用了以下 access_log
语法:error_log
/etc/nginx/nginx.conf
access_log syslog:server=unix:/dev/log,tag=nameThisSomethingElse,nohostname,severity=info combined_realip;
error_log syslog:server=unix:/dev/log,tag=nameThisSomethingElse,nohostname,severity=error;
...显然正在改变nameThisSomethingElse
。
这还combined_realip
需要nginx.conf
:
log_format combined_realip '$http_x_real_ip - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
然后在我的 rsyslog 配置中创建/etc/rsyslog.d/60-nameThisSomething.conf
:
echo "nameThisSomethingElse.* @@1.2.3.4:514" > /etc/rsyslog.d/60-nginx.conf
...显然改变了1.2.3.4
我的系统日志服务器。
我希望这有帮助!
答案3
理想的方法是通过日志转发器,例如流利位或者向量它将监视 nginx 创建的日志文件,跟踪它们并将它们发送到适当的目的地。您将在与 nginx 相同的机器上将 fluentbit/vector 作为服务运行。它们都是超轻量级的,因此您应该在资源方面没有问题。
你可以使用https://github.com/zinclabs/zincobserve作为另一台服务器上接收日志的目的地。
附言:我是来自 zincobserve 团队。