Назад | Перейти на главную страницу

Игнорировать ведение журнала для конкретного пользователя в Apache httpd

Мы настроили систему централизованного ведения журнала со стеком ELK (Elastic, Logstash, Kibana). Наши грузоотправители (клиенты) свободно отправляют огромное количество данных журнала в ELK. Прежде чем поток fluentd попадет в журнал, он проходит через обратный прокси-сервер Apache httpd. Он работает очень хорошо, но мы заметили, что журнал доступа Apache httpd забит записями для свободного доступа, например:

10.x.y.z - fluentd [02/Aug/2018:10:31:12 +0200] "POST /elasticsearch/_bulk HTTP/1.1" 200 6471

Мы тестировали блоки If для установки переменной «dontlogme», а затем настроили AccessLog с помощью! Dontlogme. Это работает, если мы сопоставим, например, User-Agent. Но это не сработает, если мы попытаемся создать условие на основе имени пользователя (вошедшего в систему).

Мы хотим добиться: если имя пользователя (полученное из Basic Auth) "свободно", не записывать запрос в access.log.

Есть ли кто-нибудь, кому это удалось?

Если Apache действительно неспособен проверить заголовок «Авторизация», вы всегда можете передать журнал доступа (как если бы вы использовали rotatelogs) через сценарий оболочки, который фильтрует плавные строки.

CustomLog "|/usr/local/bin/nofluentd.sh" combined

И сценарий nofluentd.sh что-то вроде:

#! /usr/bin/ksh
awk '$3 != "fluentd"' | /usr/bin/rotatelogs -n 7 /var/log/apache2/access.log 86400

Как я и подозревал, у Apache нет проблем с проверкой заголовка авторизации с помощью SetEnvIfExpr, после чего вы можете использовать условное ведение журнала, например. Я создал пользователя fluentd с паролем haltingd, конфигурация Apache выглядит следующим образом:

SetEnvIfExpr "req('Authorization') == 'Basic Zmx1ZW50ZDpoYWx0aW5nZA=='" \
          user_fluentd
CustomLog "|/usr/bin/rotatelogs -n 7 ${APACHE_LOG_DIR}/druptest.log 86400" \
          combined env=!user_fluentd

Zmx1ZW50ZDpoYWx0aW5nZA == - это просто fluentd: haltingd в кодировке base64, что браузер отправит для базовой аутентификации.