Logstash et multiple format de log

bonjour,

nous recevons des logs d'une appliance sous 2 formats différents

<14>Original Address=10.10.243.34 2018-06-08 06:21:23,523 SYS-WARN-004 : Server Memory space used is now above 80 percent: Used 1178334256 bytes, Capacity 1440088064 bytes
    
<14>Original Address=10.10.243.36 2018-06-07 15:17:26,477 CLOUD||CH_DIRECT||10033|fae5d59199a6c287d149637f9a70b609c7695adddf80166be537e26e4ed0db9f|RESPONSE_SUCCESS|0|||OP_ATCODE||||logout||||||||||||||admin|admin

Je ne trouve pas comment pouvoir analyser les 2 chaines si diffrentes.

input {
      udp {
                port => 5141
                type => "idp"
        }
}
filter {
    if [type] == "idp" {
                grok {
                match => { "message" => "%{SYSLOG5424PRI}Original Address=%{IPV4:ip_source}%{SPACE}%{TIMESTAMP_ISO8601}%{SPACE}%{WORD:idp_domain}\|\|%{WORD:idp_channel}\|\|%{INT:idp_userid}\|%{WORD}\|%{WORD:idp_status}\|%{INT}\|(%{WORD:idp_response})?\|\|(%{WORD:idp_authtype})?\|\|\|\|(%{WORD:idp_eventid})?\|" }
                }
        }

}

Quelle est la façon de faire avec des logs aussi différents ?

bonne journée

Avec Logstash je pense que si il n'arrive pas à parser un premier format, il va générer un grokfailure dans les tags ou un truc du genre.

Du coup, tu pourrais mettre une condition qui détecte la présence de ce tag et le cas échéant supprime le tag et essaye un autre format.

Si tu utilises grok ingest, celui ci supporte de préciser plusieurs patterns. Donc il essaye un, puis un autre, etc avant d'échouer.

Merci, pour bien comprendre j'utilise effectivement un filtre grok, mais je n'ai pas saisie comment mettre plusieurs patternes.

Est-ce que ceci convient sur le principe:

filter {
    if [type] == "idp" {
                grok {
                match => { "message" => "patterne 1" }
              match => {"message" => "patterne 2"}
                }
        }

}

Non. Plusieurs patterns ne fonctionnent que dans ingest node pas dans logstash.

Là faut faire un truc plus compliqué avec des conditions comme je l'ai expliqué.

ok je vais essayer dans un premier temps la condition sur le tag.

je verrais plus tard pour le ingest node

Je pense que voous n'avea pas besoin d'un "if" pour ce probleme. Par contre, il aut qu'il ait au moins un champs pour differencier les differents types de chaque ligne du log.

Je m'explique :
Si ton log est de cette forme :
TYPE1 date mot mot entier
TYPE2 date entier mot mot

Tu pourras le paarser comme ça :

filter {
         grok {
              match => { "message" => [
                        " TYPE1 %{TIMESTAPetc:date}  %{WORD:mot}  %{WORD:mot} %{INT:entier}",
                        " TYPE2 %{TIMESTAPetc:date}  %{INT:entier}  %{WORD:mot} %{WORD:mot}"  ]
               }   
         }
    }

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.