expressão regular do Rsyslog

0

Eu tenho um monte de mensagens syslog recebidas no meu servidor rsyslog, é um stormshield que envia diferentes categorias de mensagens (conexão, web, alarme) eu não posso configurar um recurso diferente para cada categoria, então eu preciso usar expressão regular para dividir as mensagens recebidas em arquivos diferentes.

Todas as mensagens são diferentes, mais ou menos campos na mensagem, mas há um tipo de log de campo para identificar a categoria:

Syslog message 
Msg = bullshitcontentbullshitcontent logtype:"connection" bullshitcontentbullshitcontent

Então a questão é: Como posso coletar a string do campo logtype com uma expressão regular POSIX que é compreensível pelo rsyslog e, se você souber como, dividir em arquivos diferentes dependendo do valor do logtype

    
por Poulpy 15.02.2017 / 14:40

1 resposta

0

Eu sei que isso é um pouco tarde, mas é possível. Eu não sei como você está recebendo esses logs (uma rede sugerida de pesquisa rápida, talvez), mas eu tenho uma configuração semelhante. Você pode usar os conjuntos de regras , para fazer (curiosamente) novos conjuntos de regras que não são t usado como padrão. E na linguagem de script inbuild, RainerScript , existe uma função re_match , que retorna true ou falsa.

ruleset(name="stormshield") {
    if re_match($msg, "your POSIX ERE regex") then {
        action(type="omfile" file="/your/file/name/here")
        stop
    } else if re_match(...) then { ... }
    else { ... }
}

$msg é uma referência ao log atual.

omfile é para o módulo de saída, então se você precisar de bancos de dados ou qualquer outra coisa, existem outras opções também.

E depois de ter terminado o if..else if...else outras coisas podem ir para lá. o stop é necessário para descartar a mensagem assim que terminar, caso contrário, ela também irá para outras regras. Eu acho que você pode adicionar um til ~ após a ação também para isso, mas você terá que verificar.

Como direcionar os logs para o conjunto de regras ( bind para ele, como dizem os documentos) depende da origem. para fontes de rede ou arquivo, há a função input e os módulos de entrada como "imtcp" e "imfile" que possuem um parâmetro de conjunto de regras. Você pode ter que obter pacotes extras para alguns dos módulos:

input(type="imfile" File="/input/file/here.log" Tag="..." Ruleset="ruleset name")
input(type="imtcp" Port="1234" Name="name" Ruleset="ruleset name")

e, finalmente, se você precisar enviar uma instalação específica, poderá usar call : local0.* call rulesetName (sem aspas para o nome que parece) por exemplo (escolha o que precisa de registro conforme necessário)

Eu acho que tenho muito disso ok. Acabei de ver os arquivos conf, então peço desculpas por qualquer erro ..

    
por 22.02.2017 / 23:46