我们目前正在docker上运行apache2 / mod-php网站,部署到google kubernetes。 为了利用谷歌云日志logging的严重级别过滤,我在apache.conf中创build了一个LogFormat ,它将日志输出写为结构化的JSON。 现在我在日志中看到两个访问日志输出。 1是格式正确的CustomLog,另一个似乎是某种默认访问日志。
这里是Apache的conf:
1 LogLevel info 2 3 LogFormat "{\"message\": \"%{X-Forwarded-For}i %l %u %t '%r' %>s %b '%{Referer}i' '%{User-Agent}i'\", \"severity\": \"INFO\"}" common 4 CustomLog /dev/stderr common 5 6 7 ErrorLogFormat "{\"message\": \"[%t] [%l] [pid %P] %F: %E: [client %a] %M\", \"severity\": \"ERROR\"}" 8 ErrorLog /dev/stderr 9 10 <VirtualHost *:80> 11 ServerName myhost.com 12 ServerAlias myhost.com 13 DocumentRoot /var/www/html/public/ 14 15 <Directory /> 16 AllowOverride All 17 Order allow,deny 18 Allow from all 19 20 RewriteEngine on 21 RewriteCond %{REQUEST_FILENAME} !-d 22 RewriteCond %{REQUEST_FILENAME} !-f 23 RewriteRule ^(.*)$ index.php?%{QUERY_STRING} [L] 24 </Directory> 25 26 <Directory ~ "\.svn"> 27 Order allow,deny 28 Deny from all 29 </Directory> 30 31 <Directory ~ "\.git"> 32 Order allow,deny 33 Deny from all 34 </Directory> 35 36 RemoteIPHeader X-Forwarded-For 37 RemoteIPTrustedProxy 10.0.0.0/24 38 39 </VirtualHost>
我的错误日志和信息日志在谷歌云存储中正确显示。 但是我不断看到其他访问日志条目。
样品:
这个日志不应该显示出来
::1 - - [13/May/2016:23:32:06 +0000] "GET /server-status?auto HTTP/1.1" 404 2970 "-" "Sysdig Agent/1.0"
这个日志应该显示出来
{"message": "- - - [13/May/2016:23:32:06 +0000] 'GET /server-status?auto HTTP/1.1' 404 2720 '-' 'Sysdig Agent/1.0'", "severity": "INFO"}
我已经尝试了许多不同的configuration,而且他们都没有解决这个问题。 任何想法这个不需要的访问日志输出来自哪里?
所以它看起来像这个版本的PHP的Apache的docker: FROM php:5.5-apache发送一个自定义的日志输出到进程。 这是有道理的,因为你会希望docker log运行时实际输出的东西。
为了解决这个问题,我们将注释掉以下几行:
45 LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined 46 LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined 47 LogFormat "%h %l %u %t \"%r\" %>s %O" common 48 LogFormat "%{Referer}i -> %U" referer 49 LogFormat "%{User-agent}i" agent 50 #51 CustomLog /proc/self/fd/1 combined