Apache访问日志格式错误

时间:2018-11-11 07:33:08

标签: apache amazon-web-services logging amazon-elastic-beanstalk

我正试图添加一个监视系统来解析我的Apache日志。我在AWS Elastic Beanstalk AMI(Amazon Linux,ami-655e8e0a)上运行。

查看我的apache conf文件(/etc/httpd/conf/httpd.conf),其中有以下片段:

<IfModule log_config_module>
    #
    # The following directives define some format nicknames for use with
    # a CustomLog directive (see below).
    #
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    #
    # The location and format of the access logfile (Common Logfile Format).
    # If you do not define any access logfiles within a <VirtualHost>
    # container, they will be logged here.  Contrariwise, if you *do*
    # define per-<VirtualHost> access logfiles, transactions will be
    # logged therein and *not* in this file.
    #
    #CustomLog "logs/access_log" common

    #
    # If you prefer a logfile with access, agent, and referer information
    # (Combined Logfile Format) you can use the following directive.
    #
    CustomLog "logs/access_log" combined
</IfModule>

示例实际日志行如下所示:

1.2.3.4 (-) - - [11/Nov/2018:06:41:59 +0000] "GET /myproj/ HTTP/1.1" 200 1500 "-" "ELB-HealthChecker/2.0"

查看conf文件中“组合”格式的定义,看来IP地址(%h)和时间戳(%t)之间应该只有两个字段,但是我算了三个(“ (-)”和两个“-”)。这将导致监视系统的默认Apache日志解析器失败。

首先,括号中的连字符很奇怪-括号中为什么有连字符?其次,为什么有三个字段而不是两个?第三,当我在conf文件中编辑“组合” LogFormat的行时,它不会更改实际日志。

我发现的唯一解决方法是创建一个具有不同名称的新LogFormat,并更改CustomLog以使其使用它,而不是使用“组合” LogFormat。它看起来像 'combined'LogFormat行,只是它的名称不同,但是日志很好用了-没有多余的((-)'部分,即:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" mytestformat
CustomLog "logs/access_log" mytestformat

实际上默认的“组合”定义是如何添加这个奇怪的“(-)”的?它来自哪里?为什么不能更改它?

谢谢。

1 个答案:

答案 0 :(得分:1)

知道了!事实证明,EBS AMI的/etc/httpd/conf.d/wsgi.conf文件会覆盖这些设置。该文件的最后一行是:

LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

我将其更改为:

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

(删除了%h和括号X-Forwarded-For周围的括号),现在一切正常!