使用 Grok 抓取多行
Grabbing multiple lines using 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]”直到示例结束的所有内容。
为了能够解析消息,包括 XML,您必须将所有行分组在同一个 logstash 事件中,以便在使用 grok 过滤器时,消息字段包含整个消息。可以这样做:
- 在带有多行编解码器的 logstash 中
- 在带有多行选项的 filebeat 中
以下是我需要使用 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]”直到示例结束的所有内容。
为了能够解析消息,包括 XML,您必须将所有行分组在同一个 logstash 事件中,以便在使用 grok 过滤器时,消息字段包含整个消息。可以这样做:
- 在带有多行编解码器的 logstash 中
- 在带有多行选项的 filebeat 中