首页 > 解决方案 > 如何用循环替换if?

问题描述

这是我的信息:

03-08-2020 06:00:01  /soft/rilprdaglm/scripts/lance_autofd10.sos ---> /soft/rilprdaglm/scripts/wfc_automate_genere_G_WFL10.sos wfc1 wfc100 wfc2 wfc200 10 CLOCTRL 1
MESSAGE AUTOMATE 03/08/2020 06:00:01 : DEMARRAGE TRAITEMENT JOURNEE DU 20200731

(1 row affected)
/soft/rilprdaglm/scripts/wfc_automate_genere_G_WFL10.sos => MESSAGE AUTOMATE 03/08/2020 06:00:01 : POUR LA JOURNEE DU 20200731 L'ETAPE UNIP A PRIS 00H00
/soft/rilprdaglm/scripts/wfc_automate_genere_G_WFL10.sos => MESSAGE AUTOMATE (CYCLE G) 03/08/2020 06:00:01 : 
FIN DU TRAITEMENT UNIP () JOURNEE DU 20200731
(1 row affected)
     
 --- 
   1 

(1 row affected)
(1 row affected)
----------- Fichiers de traces
/soft/rilprdaglm/logs/appel_rmi_lancements_22646.log
/soft/ldsrmi/G_ILPRDAGLM_1/log/Loader_G_ILPRDAGLM_1_Report_E0_S472_Gwfc_ctr_unicrs_482.log
Lancer quand la tâche sera terminée
grep -h PROCESSUS /soft/ldsrmi/G_ILPRDAGLM_1/log/Loader_G_ILPRDAGLM_1_Report_E0_S472_Gwfc_ctr_unicrs_482.log
(1 row affected)
     
 --- 
   0 

(1 row affected)
(1 row affected)
/soft/rilprdaglm/scripts/wfc_automate_genere_G_WFL10.sos => MESSAGE AUTOMATE 03/08/2020 06:14:01 : POUR LA JOURNEE DU 20200731 L'ETAPE UNIC A PRIS 00H14
/soft/rilprdaglm/scripts/wfc_automate_genere_G_WFL10.sos => MESSAGE AUTOMATE (CYCLE G) 03/08/2020 06:14:01 : 
FIN DU TRAITEMENT UNIC () JOURNEE DU 20200731

     
 --- 
   0 

(1 row affected)
(1 row affected)
/soft/rilprdaglm/scripts/wfc_automate_genere_G_WFL10.sos => MESSAGE AUTOMATE 03/08/2020 06:14:01 : POUR LA JOURNEE DU 20200731 L'ETAPE CHGFI1 A PRIS 00H00
/soft/rilprdaglm/scripts/wfc_automate_genere_G_WFL10.sos => MESSAGE AUTOMATE (CYCLE G) 03/08/2020 06:14:01 : 
FIN DU TRAITEMENT CHGFI1 () JOURNEE DU 20200731


(1 row affected)
(1 row affected)
/soft/rilprdaglm/scripts/wfc_automate_genere_G_WFL10.sos => MESSAGE AUTOMATE 03/08/2020 06:14:01 : POUR LA JOURNEE DU 20200731 L'ETAPE RCOU A PRIS 00H00
/soft/rilprdaglm/scripts/wfc_automate_genere_G_WFL10.sos => MESSAGE AUTOMATE (CYCLE G) 03/08/2020 06:14:01 : 
FIN DU TRAITEMENT RCOU () JOURNEE DU 20200731
(1 row affected)
     


这是我的logstash.conf

 if [message] =~ "ETAPE"
  
  {
  
  grok {  
     match => { "message" => "%{URIPATHPARAM:source} %{NOTSPACE:msg} %{WORD:msg} %{WORD:type} %{DATE_EU:date} %{TIME:heure} %{NOTSPACE:msg} %{WORD:msg} %{WORD:msg} %{WORD:msg} %{WORD:msg} %{WORD:msg} (?<etape>\S+[[:punct:]][A-Z]{5}) %{WORD:nom_tache} %{WORD:msg} %{WORD:msg} %{WORD:temps_execution}"}
      }
  }

我想用一个循环替换if,这样每次当它找到“ETAPE”这个词时都会执行grok过滤器。在kibana中它只显示第一个“ETAPE”。需要帮助。由于我的研究,我不能用于或者同时

标签: elasticsearchlogstashkibanalogstash-grok

解决方案


从所提供的信息中很难确定,但在我看来,您在那里只有一个“消息”字段。

如果是这样,您可能会发现split过滤器插件对于将消息拆分为单独的行很有用。那么您现有的条件和 grok 配置应该Just Work.

Logstash 没有“循环”的概念。它只在每个事件中运行一次。如果您希望发生多件事,则需要将数据放入多个事件中。

还有其他过滤器插件 - 以及输入编解码器 - 如果split不满足您的需求,它们将创建更多事件。


推荐阅读