Я настроил 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
и перейти в определенную папку?
Есть ли какие-либо предложение?
Если предположить, что ваше поле 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
для каждого клиента.