Модификация rsyslog Linux

Я настроил rsyslog и установил следующее значение:

$template serverlog, "/var/log/TEST/%HOSTNAME%/server.log"
local4.* ?serverlog

Теперь код создаст папку на основе % HOSTNAME% , но я хотел бы создать папку Сначала на имени сервера (название компании), а затем на HOSTNAME .

Например: у меня есть 3 сервера для 2 разных компаний ABCD и xyz , и их 3 имени сервера (имя хоста): abcdapp-1t abcdapp-2t abcdapp-3t

xyzapp-1t xyzapp-2t xyzapp-3t

Теперь, если я запустил указанный выше шаблон, он создаст разные папки в соответствии с именем хоста в / var / log / TEST / , но мне нужно создать 2 разных папки ABCD и XYZ и относительное имя хоста попадут в определенный каталог и создадут подпапку.

Например: required to выглядит так:

/var/log/TEST/ABCD/abcdapp-1t/server.log
/var/log/TEST/ABCD/abcdapp-2t/server.log
/var/log/TEST/ABCD/abcdapp-3t/server.log

/var/log/TEST/XYZ/xyzapp-1t/server.log
/var/log/TEST/XYZ/xyzapp-2t/server.log
/var/log/TEST/XYZ/xyzapp-3t/server.log

Поскольку у меня более 15 различных серверов клиентов, я не могу сделать это одним оператором.

Как я могу использовать операторы If else IF в rsyslog , чтобы я мог фильтровать по HOSTNAME и перейти в определенную папку?

Есть ли какие-либо предложение?

0
09.11.2016, 10:55
1 ответ

Если предположить, что ваше поле HOSTNAME имеет форму алфавитно-restofname , а начальная буквенная часть - это название вашей компании, вы можете отделить ее от поля с помощью средства замены свойства regexp . Измените свой шаблон на

$template serverlog, "/var/log/TEST/%hostname:R,ERE,1,FIELD:([^-]+)--end%/%HOSTNAME%/server.log"

Шаблон регулярного выражения - ([^ -] +) , что означает один или несколько символов, не включая - . Остальное указывает, что должна быть сохранена только первая группа захвата , 1 расширенного синтаксиса регулярного выражения , ERE . Если совпадений нет, сохраняется все ПОЛЕ .

У вас должен быть rsyslog версии 3.19.5 или новее или 4.1.5 или новее. См. Ссылку выше, чтобы при необходимости изменить регистр на верхний регистр.


В качестве альтернативы вы можете делать то, что хотите, если ваш rsyslog версии 7 или более поздней, используя RainerScript следующим образом:

$template myplate,"/var/log/TEST/%$.customer%/%hostname%/server.log"
if ($hostname startswith "abcd") then set $.customer = "ABCD";
if ($hostname startswith "xyz") then set $.customer = "XYZ";
action(type="omfile" dynaFile="myplate")
stop

Это создает шаблон с использованием локальной переменной $. Customer . Переменная устанавливается для каждого сообщения, когда имя хоста совпадает с каждым оператором if . Действие записывает сообщение в вычисляемый файл. Вы можете добавить еще один оператор if для каждого клиента.

0
28.01.2020, 04:49

Теги

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