2015-02-08 8 views
11

stderr.Nginx günlüğü ben <code>journalctl</code> (systemd) aracılığıyla analiz edebilmek için <code>stdout</code> Nginx erişim günlükleri yönlendirmek istiyorum

onaylı cevapla aynı soru var. Have nginx access_log and error_log log to STDOUT and STDERR of master process Ama bu benim için çalışmaz. /dev/stderr ile open() "/dev/stderr" failed (6: No such device or address) elde ederim. /dev/stdout ile journalctl -u nginx numaralı erişim günlüğüne erişemiyorum.

nginx.service

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; 
    } 
} 

sitename.conf

daemon off; 

http { 
    access_log /dev/stdout; 
    error_log /dev/stdout; 
    ... 
} 
... 

nginx.conf

[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 

ben olası her parametreyi değiştirerek bu geçici çözüm için elimden geleni denedim yukarıdaki ve farklı nginx sürümleri (1.2, 1.6) ile ancak herhangi bir başarı olmadan kod.

Ben, gerçekten önceki cevabı özgü, yanlış spekülatif veya ortamdır düşünürken farklı bir iş parçacığı üzerinde tekrar bu soruyu yükseltmek böylece bu işi yapmak nasıl gerçekten ilgileniyorum.

$ journalctl -u nginx 

sadece

Feb 08 13:05:23 Username systemd[1]: Started A high performance web server and a reverse proxy server. 

gibi hatları ve nginx documentation göre erişim günlükleri :(

cevap

5

hiçbir iz içeren, error_log direktifi onun argüman olarak stderr destekler. Aşağıdaki yapılandırma dolayısıyla giriş yapmalıdır stderr'e hata iletileri:

http { 
    error_log stderr; 
    ... 
} 

Maalesef access_log onun argüman olarak stdout desteklemez. Bununla birlikte, syslog (documentation) 'a ayarlanmalı ve sistem günlüğüne syslog çağrıları dahil etmek için sistemd olunmalıdır.

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

Standart journald yapılandırması (Ubuntu 15.04 koşuyorum) syslog okur, bu nedenle bu yapılandırma o günlükleri benim için işe yaramadı journalctl -u nginx

+1

stderr'e ile görüntülenebilir olması yeterlidir, ancak bu yapılandırma yaptı. Teşekkürler! – cortopy