Digamos que eu queira filtrar logs para usar arquivos diferentes por ID de usuário, posso escrever uma regra por uid como aqui:
if $msg contains 'uid=500' then /var/log/uid/500
if $msg contains 'uid=501' then /var/log/uid/501
if $msg contains 'uid=502' then /var/log/uid/502
Eu gostaria de escrever uma única linha usando uma captura regexp como esta:
if $msg contains 'uid=\([0-9]+\)' then /var/log/uid/\1
É possível e como por favor?
Você pode fazer isso usando um substituto de propriedade . Coloque em sua
rsyslog.conf
linha ou similar definindo um modelo que seja o formato desejado do nome do arquivo e use-o na ação quando você corresponder à linha de entrada. Por exemplo,O modelo diz que a variável do modelo
myfile
é a string que inclui amsg
propriedade substituída por uma correspondência de regex (R), estendida (ERE), captura de grupo 1 (1) (e se não houver correspondência, mantenha o FIELD original). O regex real é a.*?uid=([0-9]+).*
parte. O--end
é uma parte obrigatória da%...:R,...--end%
sequência.As linhas a seguir são o teste Rainer Script usual para as linhas que você deseja combinar e onde colocar o resultado.