2

我想用 nxlog 预处理以下日志结构,然后将其发送到 graylog。

我的自定义应用程序日志结构:

timestamp;field1;field2; ---- Start of good event ----
timestamp;field3;field4;field5;field6
timestamp;field7;field8;field9;field10
timestamp;field11;field12; --- End of good event ---
timestamp;FAIL;field13;field14
timestamp;FAIL;field15;field16

nxlog 的 GELF 输出应包含带有“好事件”或“坏事件”的 full_message。

“好事件”= 1 行如下:

timestamp;field1;field2; ---- Start of good event ----;timestamp;field3;field4;field5;field6;timestamp;field7;field8;field9;field10;timestamp;field11;field12; --- End of good event ---

“坏事件”应包含 1 行,如下所示:

timestamp;FAIL;field13;field14; timestamp;FAIL;field15;field16 

我用 xm_multiline 解析“好事件”并将其定义为 HeaderLine 和 EndLine 没有问题。

但我完全不知道如何解析两条不同的多线。请给我任何提示好吗?

是否可以将 if-else 语句与“InputType”一起使用?我的意思是“如果条件 1 则 InputType 好事件和一些动作,否则 InputType 坏事件和一些动作”。或者它需要完全不同的方法——例如没有使用 xm_multiline 而是某种正则表达式魔法?

提前致谢。

4

1 回答 1

0

您仍然可以使用 xm_multiline。您只需要使用正则表达式定义两种不同的模式。

由于您没有提供配置,因此我将使用我的配置作为不同的日志格式。

我有一个 java 应用程序,我需要监控它的日志,因为它不使用一致的时间格式,所以消息可能如下所示:

2019-04-24 00:00:13,952 WARN  [SemaphoreArrayListManagedConnectionPool] (QuartzScheduler_quartzScheduler-wildflyapp0201401_ClusterManager) IJ000604: Throwable while attempting to get a new connection: null: javax.resource.ResourceException: IJ031084: Unable to create connection
 new connection: null: javax.resource.ResourceException: IJ031084: Unable to create connection
        at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createLocalManagedConnection(LocalManagedConnectionFactory.java:336)
        at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:343)

或者像这样:

14:00:34,426 INFO  [stdout] (default task-73) com.xyz.england.idserver.comp.impl.Service DEBUG  [Get][db113034-ecc6-4c0d-86f2-moo3e33942f2] Job Package id.
14:00:34,426 INFO  [stdout] (default task-73) [DEBUG 2019-04-24 14:00:34,426]  [Get][db113034-ecc6-4c0d-86f2-moo3e33942f2] Job Package id.
14:00:34,427 INFO  [stdout] (default task-39) com.xyz.england.idserver.comp.impl.Service DEBUG  [Get][0c4d63c0-74d7-4599-bc40-mooa84cf62ea] Job Package id.
14:00:34,427 INFO  [stdout] (default task-39) [DEBUG 2019-04-24 14:00:34,425]  [Get][0c4d63c0-74d7-4599-bc40-mooa84cf62ea] Job Package id.

如果日志使用一种或其他时间格式,我可以使用以下两种配置之一:

<Extension java_multiline>
    Module          xm_multiline
    HeaderLine      /^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d /
</Extension>

OR

<Extension java_multiline>
    Module          xm_multiline
    HeaderLine      /^\d\d:\d\d:\d\d,\d\d\d/
</Extension>

由于情况并非如此,我不得不使用交替将它们包含在单个语句中,特别是使用管道符号,即 OR 操作数:

<Extension java_multiline>
    Module          xm_multiline
    HeaderLine      /^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d |^\d\d:\d\d:\d\d,\d\d\d /
</Extension>

使用此正则表达式语句,任何一种时间格式都将与我的标题行匹配。

于 2019-04-24T21:13:57.117 回答