簡體   English   中英

使用 Regexp 在 FluentD 中解析

[英]Parsing in FluentD with Regexp

我們正在嘗試解析我們在 AKS 群集中運行的某些服務生成的日志。 我們將 EFK 堆棧與以下版本一起使用:

Elasticsearch: 7.4.2 ,FluentD: 1.7.1 ,Kibana: 7.4.2

當我們在 FluentD 中使用以下配置 (json) 時,我們能夠在 Kibana 儀表板中看到日志 -

<source>
  @type tail
  @id in_tail_container_logs
  path /var/log/containers/*namespace*.log,
  pos_file /var/log/fluentd-containers.log.pos
  enable_stat_watcher false
  tag kubernetes.*
  read_from_head true
  <parse>
    @type json
    time_format %Y-%m-%dT%H:%M:%S.%NZ
  </parse>
</source>

我們需要使用正則表達式 ( regexp ) 解析日志並創建了一個。

示例日志 -

20-02-2020 08:31:42.931 [http-nio-8080-exec-1, abcd1234abcd, abcd1234abcd] INFO com.org.proj.az.controller.ModuleController.retrieveModulePortfolio - | PROJ-Module Microservice~retrieveModulePortfolio~GET~null~null~BusinessKeys[ProspectNumber:00000123456]~ Request Received for Portfolio with prospectNumber |

使用正則表達式 -

^(?<date>[^ ][^~][^abc]*)\s\[(?<threadcollection>[a-z\0-9;:,.]*)\]\s(?<log_level>\w+)\s(?<class_name>[^|]+)\|+\s(?<app_name>[^~]*)\~(?<app_operation>\w+)\~(?<http_operation>\w+)\~(?<transaction_id>[0-9a-z]+)\~(?<message_id>[0-9a-zA-Z]+)\~(?<business_keys>[^~]*)\~(?<log_message>[a-zA-Z\s:;,."']+)\|+

我們在 FluentD 中使用正則regexp解析日志的配置 -

    <source>
      @type tail
      @id in_tail_container_logs
      path /var/log/containers/*namespace.log,
      pos_file /var/log/fluentd-containers.log.pos
      enable_stat_watcher false
      tag kubernetes.*
      read_from_head true
      <parse>
        @type regexp
        expression /^(?<date>[^ ][^~][^abc]*)\s\[(?<threadcollection>[a-z\0-9;:,.]*)\]\s(?<log_level>\w+)\s(?<class_name>[^|]+)\|+\s(?<app_name>[^~]*)\~(?<app_operation>\w+)\~(?<http_operation>\w+)\~(?<transaction_id>[0-9a-z]+)\~(?<message_id>[0-9a-zA-Z]+)\~(?<business_keys>[^~]*)\~(?<log_message>[a-zA-Z\s:;,."']+)\|+/
        time_format %Y-%m-%dT%H:%M:%S.%NZ
        time_key date
        keep_time_key true
      </parse>
    </source>

使用此方法 ( regexp ) 時,不會匹配任何日志,並且 Kibana 儀表板為空。

根據文檔,您應該只使用模式本身,而不使用正則表達式定界符。

此外,如果您打算匹配數字,則不應在字符 class 中轉義0 ,但您必須要匹配方括號之間的任何內容,因此您需要[^\]\[]*

如果您不關心最后需要的捕獲組之后是什么,請使用.* ,無需使用\|+

采用

@type regexp
expression ^(?<date>[^ ][^~][^abc]*)\s\[(?<threadcollection>[^\]\[]*)\]\s(?<log_level>\w+)\s(?<class_name>[^|]+)\|+\s(?<app_name>[^~]*)\~(?<app_operation>\w+)\~(?<http_operation>\w+)\~(?<transaction_id>[0-9a-z]+)\~(?<message_id>[0-9a-zA-Z]+)\~(?<business_keys>[^~]*)\~(?<log_message>[a-zA-Z\s:;,."']+).*

請參閱正則表達式演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM