2017-04-07 1 views
0

Je suis en train d'analyser un ensemble de journaux où un champ me donne des problèmes. Le format estAttraper un motif séparé par des virgules avec Grok

tête (ip, date, etc.) field1 = données, les données field2 de =, les données Field3 de =, les données FIELD4 de = J'ai un analyseur général qui lu quelque chose comme

match => [ "message","%{DATA:..header..} %{DATA}=%{DATA:service},%{DATA}=%{DATA:roles}],%{DATA}=%{DATA:macaddress},%{DATA}=%{DATA:nasip}"] 

Quelques fois la partie "valeur" du champ "rôles" ressemble à la valeur , [Admin]. Ceci est géré par le] en% {DATA} =% {DATA: rôles}], mais dans d'autres cas, je reçois

subvalue1, subvalue2, subvalue3, 

ou

subvalue1, subvalue2, subvalue3, subvalue4, 

ou

subvalue1, subvalue2, 

et l'analyseur capture uniquement le sous -val1. Comme vous pouvez le voir ... il y a un nombre variable de sous-vals et ils sont difficiles à attraper quand le] manque.

Voici un exemple du genre de problèmes la création du journal:

local1--debug--10.47.130.2--2017-03-24--2017-03-24T11:29:51-‌​04:00--11:29:51,545 10.241.186.253 ZTP0 SESSION 20 1 0 Common.Username=LABF5CHK,Common.Service=F5_HealthCHK,Common.‌​Roles=Employee, [User Authenticated],Common.NAS-IP-Address=xxxxxxxxxxxx,Common.Req‌​uest-Timestamp=2017-‌​03-24 11:27:56-04 

Y at-il un travail autour de cela?

+0

Je peux améliorer ma réponse si vous fournissez quelques exemples de journaux –

Répondre

1

Pour les données séparées par des virgules de longueur variable, je suggère de capturer l'ensemble des valeurs dans un seul champ, puis d'analyser ce champ en utilisant le csv filter.

Pour analyser un ensemble de paires clé = valeur, je suggère d'utiliser le kv filter.

Alors votre config fonctionne quelque chose comme ça

filter { 
    grok { 
    match => [ "message","%{DATA:..header..} %{GREEDYDATA:kv_pairs}"] 
    } 
    kv { 
    source => "kv_pairs" 
    field_split => "," 
    } 
    csv { 
    # assumes that the key was 'roles' 
    source => "roles" 
    target => "role_list" 
    } 
} 

Je ne suis pas sûr du format exact de vos messages du journal, mais le filtre kv au sujet peut-être bousiller si vos messages ont un format qui n » t séparer la liste subvalue csv de la liste des paires k = v comme ceci:

...,key=value,roles=subval1,subval2,subval3,key2=value2... 

ou ouvre une liste avec [ mais ne se ferme pas.

Editer: Il semble que ce premier cas de rupture est en fait ce que vous faites face.

Si la section rôles est toujours au même endroit, suivi par la même clé, vous pourriez le faire correspondre à l'aide

...Common.‌​Roles=%{DATA:roles},Common.NAS-IP-Address=%{DATA:nasip}... 

Si ces paires de valeurs sont consitently dans le même arrangement, en utilisant ce modèle devrait fonctionner. Si un champ est tout à fait cohérent ou appariable par une expression rationnelle plus spécifique que .*?, vous devez l'utiliser, utilisez donc les noms/modèles de touches réels au lieu de %{DATA}= car cela risque facilement de ne pas correspondre.

+0

local1 - debug - 10.47.130.2--2017-03-24--2017-03-24T11: 29: 51-04: 00--11 : 29: 51,545 10.241.186.253 ZTP0 SESSION 20 1 0 Common.Username = LABF5CHK, Common.Service = F5_HealthCHK, Common.Roles = Employé, [Utilisateur authentifié], Commun.NAS-IP-Address = xxxxxxxxxxxx, Common.Request-Timestamp = 2017-03-24 11: 27: 56-04 – ScipioAfricanus

+0

C'est un exemple de ligne de journal ... voir mon problème? Cant vraiment utiliser le filtre csv, je ne pense pas. – ScipioAfricanus

+0

Oui, je peux voir pourquoi ce problème est vraiment vicieux –