1

Je suis nouveau à logstash et à désinstaller pour installer ELK pour l'un des usecase. J'ai trouvé cette question reliée à la mienne Why won't Logstash multiline merge lines based on grok'd field? Si le filtre multiligne ne fusionne pas les lignes sur les champs grok, comment puis-je fusionner les lignes 2 et 10 de l'exemple de journal ci-dessous? S'il vous plaît aider.Comment créer des lignes de fusion de filtre multiligne Logstash en fonction d'une valeur de champ dynamique?

Utilisation de modèles de Grok j'ai créé un champ « id » qui contient la valeur 715.

Line1 - 5/08/06 00:10:35.348 [BaseAsyncApi] [qtp19303632-51]: INFO: [714] CMDC flowcxt=[55c2a5fbe4b0201c2be31e35] method=contentdetail uri=http://10.126.44.161:5600/cmdc/content/programid%3A%2F%2F317977349~programid%3A%2F%2F9?lang=eng&catalogueId=30&region=3000~3001&pset=pset_pps header={} 
Line2 - 2015/08/06 00:10:35.348 [BaseAsyncApi] [qtp19303632-53]: INFO: [715] CMDC flowcxt=[55c2a5fbe4b0201c2be31e36] method=contentdetail uri=http://10.126.44.161:5600/cmdc/content/programid%3A%2F%2F1640233758~programid%3A%2F%2F1073741829?lang=eng&catalogueId=30&region=3000~3001&pset=pset_pps header={} 
Line3 - 2015/08/06 00:10:35.349 [TWCAsyncProcessor] [TWC-pool-3-thread-2]: INFO: [714:426] TWC request=MercurySortRequest 
Line4 - 2015/08/06 00:10:35.349 [TWCAsyncProcessor] [TWC-pool-3-thread-1]: INFO: [715:427] TWC request=MercurySortRequest 
Line5 - 2015/08/06 00:10:35.352 [BaseAsyncApi] [qtp19303632-54]: INFO: [716] CMDC flowcxt=[55c2a5fbe4b0201c2be31e37] method=contentdetail uri=http://10.126.44.161:5600/cmdc/content/programid%3A%2F%2F2144942810~programid%3A%2F%2F1953281601?lang=eng&catalogueId=30&region=3000~3001&pset=pset_pps header={} 
Line6 - 2015/08/06 00:10:35.354 [TWCAsyncProcessor] [TWC-pool-3-thread-1]: INFO: [716:428] TWC request=MercurySortRequest 
Line7 - 2015/08/06 00:10:35.359 [BaseAsyncApi] [qtp19303632-49]: INFO: [717] CMDC flowcxt=[55c2a5fbe4b0201c2be31e38] method=contentdetail uri=http://10.126.44.161:5600/cmdc/content/programid%3A%2F%2F2144942448~programid%3A%2F%2F2147355770?lang=eng&catalogueId=30&region=3000~3001&pset=pset_pps header={} 
Line8 - 2015/08/06 00:10:35.360 [TWCAsyncProcessor] [TWC-pool-3-thread-2]: INFO: [717:429] TWC request=MercurySortRequest 
Line9 - 2015/08/06 00:10:35.366 [TWCAsyncProcessor$TWCAsyncProcessorCallback$ReceiveCallback] [CMDC-pool-2-thread-41]: INFO: [715:427] TWC response status=200 hits=1 time=17 internal=10.42 
Line10 - 2015/08/06 00:10:35.367 [BaseAsyncApi] [CMDC-pool-2-thread-41]: INFO: [715] CMDC response status=200 CMDC=19ms TWC=17ms #TWC=1 

Répondre

1

Vous devez utiliser un filtre multiline avec stream_identity ensemble. La documentation here n'est pas clair sur ce qu'il est utilisé pour, mais votre stratégie de base serait quelque chose comme ceci:

if (!"multiline" in [tags]) { 
    grok { // parse out your identity field } 
    multiline { 
    stream_identity => "%{id}" 
    pattern => "." // match anything because we're gathering by id field 
    what => "previous" 
    periodic_flush => true 
    max_age => 5 // however many seconds it takes to get all of your lines together 
    add_tags => ["multiline" ] 
    } 
} else { 
    // process multiline event that's been flushed 
} 

Je ne l'ai pas essayé quelque chose comme ça depuis 1.5 est sorti, mais les docs disent que cela devrait fonctionner (en 1.4.2 et avant, le mécanisme de rinçage ne fonctionnait pas, donc vous pourriez perdre des événements).

+0

Merci d'avoir répondu. Votre suggestion fonctionne et j'ai pu fusionner les lignes. Je fais un poc pour voir comment ELK fonctionne pour nous. – Sowmya

+0

Je suis également tombé sur une préoccupation que le vidage peut entraîner des messages fragmentés. Pour l'instant, je travaille sur des données de test statiques et n'ai pas fait face à ce problème. Il existe une version alternative de Mulitline ici (https://github.com/johnarnold/logstash-multiline). Je dois essayer. – Sowmya

+0

Je crois que le mécanisme de rinçage est ce qui a été "fixé" entre 1.4.2 et 1.5. En 1.4.2, le rinçage était expérimental et vidangé à un taux fixe (c.-à-d. Toutes les 5 secondes) ... Je pense que dans la version la plus récente, il se base sur ce max_age - c'est-à-dire plusieurs secondes depuis le dernier événement. ligne. Je pense que dans la plupart des situations, cela fonctionnerait très bien. J'ai aussi écrit un plugin multiline_fixed une fois - où si vous savez à quoi ressembleront la première et la dernière ligne, ça va flush quand il atteindra la dernière ligne - je ne peux pas mettre la main sur ça maintenant :) – Alcanzar