将 NGINX 日志发送到远程 syslog 服务器

将 NGINX 日志发送到远程 syslog 服务器

如何写入 Nginx 配置/etc/rsyslog.conf以将 Nginx 日志转发到另一台服务器?

我写了这个配置rsyslog但是我认为它不完全正确:

在此处输入图片描述

答案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 团队。

相关内容