使用Grok抓取多行

时间:2018-02-13 09:09:06

标签: logstash logstash-grok

以下是我需要使用logstash和logstash grok过滤器解析的日志示例:

2018-02-12 15:17:39.216 [DEBUG] [    60] [CashTransactionReportCommand] [4564 456] - Xml of valid cash: <NewDataSet>
  <Table>
    <transaction_id>546464</transaction_id>
    <device_trans_id>24</device_trans_id>
    <value>3.5000</value>
    <product_code>40</product_code>
    <product_pa_code>E1</product_pa_code>
    <catalog_number />
    <decimal_place>2</decimal_place>
    <site_id>2</site_id>
    <machineSeTime>2018-02-12T17:17:39.273+00:00</machineSeTime>
    <payment_method_id>3</payment_method_id>
    <actor_id>4566</actor_id>
    <operator_id>55</operator_id>
  </Table>
</NewDataSet>

我几乎拥有我需要的一切:

%{TIMESTAMP_ISO8601:log_timestamp} \[%{LOGLEVEL:loglevel}\] \[%{DATA:snId}\] \[%{WORD:snName}\] (?<test>\[\d+ \d+\]) %{GREEDYDATA:logmessage}

我唯一的问题是“logmessage”。我需要它包含通过“[4564 456]”的所有内容,直到示例结束。

1 个答案:

答案 0 :(得分:0)

为了能够解析消息(包括XML),您必须在同一个logstash事件中对所有行进行分组,以便在使用grok过滤器时,消息字段包含整个消息。这可以做到:

    使用多行编解码器在logstash中使用

Multiline in logstash

Multiline codec documentation

    带有多行选项的filebeat中的

Multiline in filebeat

Documentation of multiline option in filebeat configuration