сообщение:
Jun 17 17:38:02 server2.test nginx: test.ru 192.168.1.121 - [17/Jun/2019:17:38:02 +0300] UNIX-TIME-1560782282.938 "GET / HTTP/1.1" 200
упала в файл по пути /var/log/test.ru/nginx_ac.log ?
Т.е. смысл в том чтобы в зависимсоти от доменного имени (в данном случае это test.ru) лог складывался в папку с названием доменного имени ?
nginx нельзя пячить ? Только на уровне сислога ?
Если все доменные имена известны заранее, то напиши filter с regexp’ом, и разнеси по разным destination’ам. Экстрактить поле из лога и использовать в качестве параметра конфига syslog-ng не умеет.
Можете втащить в syslog-ng кастомный parser на python’е, но имхо это медленно. Но работать будет. Из кастомного парсера можно забрать переменные и использовать их в destination.
Для всех кто холиварил тут и нес пургу вот выкладываю решение: Всего-то надо было задействовать штатный парсер: parser p_nginx_ac_ssl { csv-parser(columns("WEB.APP_HOSTNAME", "WEB.SOURCE_IP", "WEB.TRASH") flags(escape-double-char,strip-whitespace,greedy) delimiters(" ") ); }; И далее в пути куда складывать файлы логов указать переменную WEB.APP_HOSTNAME. Мне же тут с пеной у рта советовали прибивать гвоздями доменные имена, поднимать ансиблы чтобы добавлять в конфиг сислога новые домены, писать самодельные парсеры на питоне и т.д.! Но решение было простое, проблема в том что мне пришлось потратить значительное количество времени на вычитывание документации по syslog-ng, потому и задал сюда вопрос чтобы меня навели на правильный курс. Но нет.... это рашн комьюнити детка!
Обсуждают сегодня