Nxlog - 如何处理具有多个标头的多行日志

问题描述 投票:2回答:1

我想使用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输出应包含带有“good event”或“bad event”的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解析“good event”并定义它的HeaderLine和EndLine是没有问题的。

但我完全不知道如何解析两条不同的多线。你能给我任何暗示吗?

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

提前致谢。

multiline nxlog
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>

使用此正则表达式语句时,时间格式将匹配作为我的标题行。

© www.soinside.com 2019 - 2024. All rights reserved.