@zdravnik

Как выдернуть переменную из лог строки syslog-ng?

Как сделать так чтобы сообщение:
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) лог складывался в папку с названием доменного имени ?

Доменов много, поэтому перечислять их списком не вариант, нужно именно вырезать из сообщения
  • Вопрос задан
  • 204 просмотра
Пригласить эксперта
Ответы на вопрос 1
shabelski89
@shabelski89
engineer
Почему-то мне кажется что искать надо в строну rsyslog)
Не очень понял как наполняется исходный файл syslog-ng.
Но для разового парсинга можно сделать такую конструкцию
#!/bin/bash
while read domain; do echo "$domain" | mkdir ~/var/log/`grep -Po '(?<=nginx:\s).+(\.\D\S{1,3})'` 2>/dev/null; done < syslog
while read string; do echo "$string" | echo "$string" >> ~/var/log/`grep -Po '(?<=nginx:\s).+(\.\D\S{1,3})'`/nginx_ac.log  ; done < syslog

Построчно читает файл syslog(заменить на нужный), выдирает регуляркой домен создает для него папку и кладет в него строчку соответствующую этому домену.
Для себя не решил как быть, с тем что исходный файл syslog видимо постоянно обновляется, как сделать так что читать с места новой записи, может удалять строчку после чтения...
Жду что меня закидают палками.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы