Nginxアクセスログをstdout
にリダイレクトして、journalctl
(systemd)を介して分析できるようにします。
承認された回答と同じ質問があります。 nginx access_logとerror_logログをマスタープロセスのSTDOUTとSTDERRに記録します しかし、それは私には機能しません。 _/dev/stderr
_を使用すると、open() "/dev/stderr" failed (6: No such device or address)
が得られます。 _/dev/stdout
_を使用すると、_journalctl -u nginx
_にアクセスログがありません。
nginx.conf
_daemon off;
http {
access_log /dev/stdout;
error_log /dev/stdout;
...
}
...
_
sitename.conf
_server {
server_name sitename.com;
root /home/username/sitename.com;
location / {
proxy_pass http://localhost:3000/;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log on;
}
}
_
nginx.service
_[Service]
Type=forking
PIDFile=/run/nginx.pid
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=nginx
ExecStartPre=/usr/sbin/nginx -t -q -g 'master_process on;'
ExecStart=/usr/sbin/nginx -g 'master_process on;'
ExecReload=/usr/sbin/nginx -g 'master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
_
上記のコードで可能なすべてのパラメーターを異なるnginxバージョン(1.2、1.6)で変更することにより、これを回避するために最善を尽くしましたが、成功しませんでした。
私はこれをどのように機能させるかに本当に本当に興味があるので、前の答えが間違っている、推測的または環境固有であると考えるので、別のスレッドでこの質問をもう一度提起します。
_$ journalctl -u nginx
_
次のような行のみが含まれます
_ Feb 08 13:05:23 Username systemd[1]: Started A high performance web server and a reverse proxy server.
_
アクセスログの兆候はありません:(
nginxドキュメント によると、error_log
ディレクティブは、引数としてstderr
をサポートします。したがって、次の構成では、エラーメッセージをstderrに記録する必要があります。
http {
error_log stderr;
...
}
残念ながら、access_log
は引数としてstdout
をサポートしていません。ただし、それをsyslog
( documentation )に設定し、systemdにsyslog呼び出しをジャーナルに含めることは可能です。
server {
error_log syslog:server=unix:/dev/log;
access_log syslog:server=unix:/dev/log;
...
}
デフォルトのジャーナル構成(Ubuntu 15.04を実行しています)はsyslogから読み取るため、この構成でログをjournalctl -u nginx
で表示できるようになります。