Я пытаюсь написать простую директиву протоколирования apache, и у меня возникает сбой. Я просто хочу найти 200 кодов ответов для централизации моих файлов журналов в ELK. Это пользовательский формат журнала, который я создал.
LogFormat "%s %h %l %u %t \"%r\" %b" remove
Вот трубный журнал
CustomLog "|/bin/grep -v '^200' /var/log/apache2/pi-mirror.com/access.log" remove
Я получаю следующую ошибку в журнале ошибок apache2.
AH00106: piped log program '/bin/grep -v '^200' /var/log/apache2/pi-mirror.com/access.log' failed unexpectedly
Кажется, я не могу понять, что здесь происходит. Я прочитал документы apache по конвейерному ведению журнала и не могу найти ничего, что мог бы делать неправильно.
Это работает на Apache2 2.4.7
Заранее благодарим за помощь.
НОТА
Изучая это дальше, я обнаружил, что apache 2.2 и apache 2.4 изменили способ, которым это делается. Ранее оболочка создавалась автоматически, но в новой версии 2.4 вы должны вручную указать оболочку. В результате я изменил свой синтаксис на этот
CustomLog "|$/bin/grep -v '^200' /var/log/apache2/pi-mirror.com/access.log" remove
Это изменение привело к следующему. По какой-то причине, когда я перезапускаю apache2, он выводит весь вывод этой команды на стандартный вывод, и я вижу все это со своего терминала. Но затем происходит сбой с тем же сообщением об ошибке. Это почти похоже на то, что apache не может запускать это постоянно, что заставляет меня задуматься, нужно ли мне что-то еще, чтобы исправить это.
Проблема в том, что ваш grep пытается фильтровать журнал на диске, но когда вы используете CustomLog с конвейером, все новые сообщения журнала отправляются в него, а не в файл, поэтому файл не существует. Вероятно, вы действительно хотите:
CustomLog "|/bin/grep -v '^200' | cat >> /var/log/apache2/pi-mirror.com/access.log" remove
Что это будет делать, так это обратный grep для 200 (то, что у вас было изначально), а затем он отобразит его в файле журнала. Для получения дополнительной информации см .: https://workshop.avatarnewyork.com/post/filtering-apache-piped-logs-to-centralize-logging-of-errors-and-warnings/