Журнал доступа Apache неверно отформатирован - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь добавить систему мониторинга для анализа моих логов 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 по умолчанию для системы мониторинга.

Во-первых, этот дефис в скобках странный - почему он в скобках? Во-вторых, почему три поля вместо двух? В-третьих, когда я редактирую строку для «комбинированного» LogFormat в файле conf, он не меняет фактические журналы.

Единственный обходной путь, который я нашел, - это создать новый LogFormat с другим именем и изменить CustomLog для работы с ним, а не с «комбинированным» LogFormat. Она выглядит точно так же, как «объединенная» строка 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 голосов
/ 11 ноября 2018

Понял! Оказывается, в 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) и теперь все работает хорошо!

...