Modificação do rsyslog do Linux

0

Eu configurei rsyslog e configurei o seguinte valor:

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

Agora, o código criará uma pasta com base em %HOSTNAME% , mas eu gostaria de criar a pasta Primeiro no nome do servidor (nome da empresa) e, em seguida, HOSTNAME .

Por exemplo: tenho três servidores para as duas empresas diferentes ABCD e xyz e seus três nomes de servidor (nome do host) são: abcdapp-1t abcdapp-2t abcdapp-3t

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

Agora, se eu executar o modelo acima, ele criará pastas diferentes de acordo com o nome do host em /var/log/TEST/ , mas eu preciso criar duas pastas diferentes ABCD e XYZ e o nome do host relativo entrará em um diretório específico e criará uma subpasta .

Por exemplo: necessário para se parecer com isso:

/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

Como tenho mais de 15 servidores diferentes de clientes, não posso fazê-lo em uma declaração.

Como posso usar as declarações If else IF em rsyslog , para que eu possa filtrar por HOSTNAME e passar para uma pasta específica?

Existe alguma sugestão?

    
por varun 09.11.2016 / 09:40

1 resposta

0

Se assumirmos que seu campo HOSTNAME está no formato alphabetic-restofname e a parte alfabética inicial é o nome da sua empresa, você pode separá-lo do campo usando o replacer de propriedade do regexp . Altere seu modelo para

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

O padrão regexp é ([^-]+) , o que significa que um ou mais caracteres não incluem - . O restante especifica que somente o primeiro grupo de captura ,1 da sintaxe de expressão regular estendida ,ERE deve ser mantido. Se não houver correspondência, todo o FIELD será mantido.

Você deve ter a versão 3.19.5 ou posterior do rsyslog, ou 4.1.5 ou posterior. Veja o link acima para alterar para maiúsculas, se desejado.

Alternativamente, você deve ser capaz de fazer o que quiser, se o seu rsyslog for da versão 7 ou posterior, usando o RainerScript da seguinte forma:

$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

Isso cria um modelo usando uma variável local $.customer . A variável é definida para cada mensagem quando o nome do host é correspondido por cada instrução if . O action grava a mensagem no arquivo calculado. Você pode adicionar outra declaração if para cada cliente.

    
por 09.11.2016 / 20:31

Tags