AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 837585
Accepted
olivierg
olivierg
Asked: 2017-03-11 14:27:00 +0800 CST2017-03-11 14:27:00 +0800 CST 2017-03-11 14:27:00 +0800 CST

incapaz de filtrar mensagens mal formatadas no syslog-ng

  • 772

Estou entrando em contato com você sobre um problema que tenho com o syslog-NG. alguns de nossos dispositivos (principalmente switches HP e SANs) estão enviando mensagens syslog que não respeitam o syslog RFC 5424 ao que parece.

para lhe dar alguns exemplos:

se eu farejar a interface de rede do servidor, podemos ver essas mensagens "erradas" assim (como você pode ver, depois do PRI, podemos ver o PROGRAMA, depois fuso horário e campos separados por vírgulas. em resumo, campos mistos, campos ausentes etc. não é uma mensagem syslog padrão):

<190>raslogd: 2017/03/08-16:03:20, [SEC-1203], 53642, WWN 10:00:50:eb:1a:6c:21:38 | FID 128, INFO, cswc-mo8x-SAN01, Login information: Login successful via TELNET/SSH/RSH. IP Addr: 1.2.3.4

portanto, atualmente não consigo filtrar essas mensagens. Tentei definir um filtro regular e imprimir campos como MSGHDR, MSG, PRI etc., mas não consegui ver nada.

a ÚNICA MANEIRA de filtrar esta mensagem é apenas definindo a interface externa e um arquivo como saída, sem nenhum modelo.

por exemplo, se eu fizer um filtro como este:

destination d_INCOMING_ALL   { file("/app/syslog-ng/logs/incoming_all.log"); };

log {
  source(s_EXTERNAL);
  destination(d_INCOMING_ALL);
};

Eu posso ver as mensagens no arquivo de log, mas formatadas, de alguma forma (suponho que o syslog-NG as reformate):

[root@xxxxxxxxxxxx logs]# grep -i cswc incoming_all.log
Mar  9 09:44:20 cswc-mo8x-hpsan01 raslogd: 2017/03/09-08:34:50, [SEC-1203], 53647, WWN 10:00:50:eb:1a:6c:21:38 | FID 128, INFO, cswc-mo8x-SAN01, Login information: Login successful via TELNET/SSH/RSH. IP Addr: 1.2.3.4
[root@xm1p1034vmo logs]#

o problema é que não consigo filtrar essas mensagens assim (recebemos logs de mais de 1000 dispositivos) aí, preciso filtrar as mensagens vindas desses dispositivos! e a única maneira de fazer isso é no nome do host (cswc- ) ou no nome do programa (raslogd )

então tentei exibir os campos adicionando um modelo a esse arquivo, exemplo:

destination d_test { 
    file ("/app/syslog-ng/logs/test_olivier.log" 
    template("pri=${priority} date=${ISODATE} host=${HOST} program=${PROGRAM} message=${MSG}\n") 
    ); 
};

mas nada funciona, nada é exibido. Eu tentei todos os campos, MSG, MESSAGE, MSGHDR etc. não consigo exibir NADA. a única coisa que funciona é a análise sem filtros ou modelos.

naturalmente, se eu passar por todos os tipos de filtros, como esses abaixo, não funciona (pois os campos são misturados):

filter f_is_SAN     {
    host("cswc.*" flags(ignore-case));
};

o mesmo para:

filter f_is_SAN     {
    match(".*cswc.*" flags(ignore-case));
};

alguma dica sobre como criar filtros para essas mensagens provenientes desses dispositivos (no nome do host ou nome do programa)?

obrigado cumprimentos,

syslog syslog-ng filter
  • 2 2 respostas
  • 1264 Views

2 respostas

  • Voted
  1. iwaseatenbyagrue
    2017-03-25T01:15:14+08:002017-03-25T01:15:14+08:00

    Na verdade, o syslog-ng não está reformatando-os, está adicionando um cabeçalho syslog adequado:

    9 de março 09:44:20 cswc-mo8x-hpsan01 raslogd: 2017/03/09-08:34:50, [SEC-1203], 53647, WWN 10:00:50:eb:1a:6c:21:38 | FID 128, INFO, cswc-mo8x-SAN01, Informações de login: Login bem-sucedido via TELNET/SSH/RSH. Endereço IP: 1.2.3.4

    O seguinte é adicionado pelo syslog:

    9 de março 09:44:20 cswc-mo8x-hpsan01

    O resto é a mensagem original:

    raslogd: 2017/03/09-08:34:50, [SEC-1203], 53647, WWN 10:00:50:eb:1a:6c:21:38 | FID 128, INFO, cswc-mo8x-SAN01, Informações de login: Login bem-sucedido via TELNET/SSH/RSH. Endereço IP: 1.2.3.4

    Portanto, o syslog-ng concorda com você que essas mensagens não são compatíveis com RFC.

    Em termos de configuração de filtros, isso significa que você não tem muito com o que brincar.

    Pessoalmente, estou mais acostumado com o rsyslog (onde você pode inspecionar a mensagem com regex, por exemplo, procurando raslogd- embora isso não seja necessariamente eficiente).

    No entanto, o cabeçalho que o syslog-ng pode adicionar oferece algumas coisas para você continuar:

    • parece que o syslog-ng é capaz de relatar um nome de host, que eu tenderia a assumir que é resolvido a partir do IP de origem. Portanto, você pode pelo menos filtrar o ip de origem, usando host ou netmask :

      filter hp_hosts { (host(192.168.0.25)) };

    • seu filtro de host atual está falhando porque não há campo HOST nas mensagens - os documentos para o hostestado do filtro:

      Ou seja, o syslog-ng OSE irá comparar a expressão do filtro com o conteúdo da macro ${HOST}.

    • no entanto, você tem um nome de host (pelo menos em seu exemplo) na mensagem, portanto, considere o uso de um filtro de mensagem .

    Dito isto - para mim, se fosse possível obter uma lista dos IPs de origem de todos esses dispositivos (e só espero que isso seja possível), então eu usaria o filtro de máscara de rede - parece provável que seja mais eficiente do que as outras opções.

    • 1
  2. Best Answer
    olivierg
    2017-03-28T06:45:20+08:002017-03-28T06:45:20+08:00

    mmh eu encontrei uma solução que parece estar funcionando

    Estou reutilizando o destino "cópia local" como fonte

    por exemplo :

    Eu tenho um filtro de log regular mantendo uma cópia de tudo:

    destination d_INCOMING_ALL       { file("/app/syslog-ng/logs/incoming_all.log"); };
    log {
      source(s_EXTERNAL);
      destination(d_INCOMING_ALL); 
    };
    

    a mensagem é mantida naquela "cópia local" sendo reformatada. Posso então reler este arquivo em uma fonte e aplicar os filtros a ele. está sujo, mas funciona:

    source s_NON_RFC_COMPLIANT {   # new source
        file("/app/syslog-ng/logs/incoming_all.log" follow-freq(10));
    };
    
    ....
    
    destination d_INCOMING_ALL {
        file("/app/syslog-ng/logs/incoming_all.log");    # old destination where we keep a local copy of EVERYTHING
    };
    
    ....
    
    log {      # local copy of everything
      source(s_EXTERNAL);
      destination(d_INCOMING_ALL);
    };
    
    ....
    
    other filters here
    
    ....
    
    filter f_is_Network     {
      host("cswc.*" flags(ignore-case))       # we want to filter on hosts called cswc-something or program raslogd
      or program("raslogd" flags(ignore-case));
    };
    
    log {    # new source for HP stuff here
      source(s_NON_RFC_COMPLIANT);
      filter(f_is_Network);              # add the filters you need
      destination(<your_final_destination_here>);
      flags(final);
    };
    
    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve