【问题标题】:How to replace if with a loop?如何用循环替换if?
【发布时间】:2021-06-01 02:01:10
【问题描述】:

这是我的信息:

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”。需要帮助。由于我的研究,我可以' t 使用 for 或 while

【问题讨论】:

    标签: elasticsearch logstash kibana logstash-grok


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 2021-07-27
      相关资源
      最近更新 更多