2015-02-08 3 views
11

Я хочу перенаправить журналы доступа nginx на номер stdout, чтобы иметь возможность анализировать их через journalctl (systemd).Nginx log to stderr

Существует тот же вопрос с утвержденным ответом. Have nginx access_log and error_log log to STDOUT and STDERR of master process Но это не работает для меня. С /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. 

и никаких признаков журналов доступа :(

ответ

5

Согласно с nginx documentation, то error_log директива поддерживает stderr в качестве аргумента. Таким образом, следующая конфигурация должна войти сообщения об ошибках в stderr:

http { 
    error_log stderr; 
    ... 
} 

К сожалению, access_log не поддерживает stdout в качестве аргумента. Тем не менее, должно быть возможно установить его на syslog (documentation) и получить systemd для включения вызовов syslog в его журнал.

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

конфигурации journald По умолчанию (я бегу Ubuntu 15.04) читает системный журнал, поэтому этот конфиг все, что нужно, чтобы иметь журналы просматриваться с journalctl -u nginx

+1

STDERR не работает для меня, но это конфигурационный сделал. Благодаря! – cortopy