web-dev-qa-db-ja.com

stderrへのNginxログ

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.
_

アクセスログの兆候はありません:(

13
Ivan Kleshnin

nginxドキュメント によると、error_logディレクティブは、引数としてstderrをサポートします。したがって、次の構成では、エラーメッセージをstderrに記録する必要があります。

http {
    error_log stderr;
    ...
}

残念ながら、access_logは引数としてstdoutをサポートしていません。ただし、それをsyslogdocumentation )に設定し、systemdにsyslog呼び出しをジャーナルに含めることは可能です。

7
hedgie
server {
    error_log syslog:server=unix:/dev/log;
    access_log syslog:server=unix:/dev/log;
    ...
}

デフォルトのジャーナル構成(Ubuntu 15.04を実行しています)はsyslogから読み取るため、この構成でログをjournalctl -u nginxで表示できるようになります。

14
m.kocikowski