我想使用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 ---
“坏事件”应包含如下一行:
timestamp;FAIL;field13;field14; timestamp;FAIL;field15;field16
使用xm_multiline解析“good event”并定义它的HeaderLine和EndLine是没有问题的。
但我完全不知道如何解析两条不同的多线。你能给我任何暗示吗?
是否可以将if-else语句与“InputType”一起使用?我的意思是“如果condition1然后InputType好事件和一些动作,否则InputType坏事件和一些动作”。或者它需要完全不同的方法 - 例如没有xm_multiline用法但是某种正则表达式魔法?
提前致谢。
答案 0 :(得分: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>
使用此正则表达式语句,两种时间格式都将与我的标题行匹配。