我具有以下用于解析java stacktrace日志的流利配置:
@id fluentd-containers.log
@type tail
path /var/log/containers/*.log
pos_file /var/log/es-containers.log.pos
tag raw.kubernetes.*
read_from_head true
<parse>
@type multi_format
<pattern>
format json
time_key time
time_format %Y-%m-%dT%H:%M:%S.%NZ
</pattern>
<pattern>
format multiline
format_firstline /\d{4}-\d{1,2}-\d{1,2}/
format1 /^(?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}) \[(?<thread>.*)\] (?<level>[^\s]+)(?<message>.*)/
</pattern>
<pattern>
format /^(?<time>.+) (?<stream>stdout|stderr) [^ ]* (?<log>.*)$/
time_format %Y-%m-%dT%H:%M:%S.%N%:z
</pattern>
</parse>
</source>
我希望收到该日志,如syslog中所示,如下所示:
java.lang.NullPointerException: Name is null
at java.lang.Enum.valueOf(Enum.java:236)
at sa.com.stcs.tracking.events.ProfileType.valueOf(ProfileType.java:3)
at sa.com.stcs.geofence.GeofenceProfileRepository.mapToGeofenceProfile(GeofenceProfileRepository.java:110)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.Iterator.forEachRemaining(Iterator.java:116)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
但不幸的是,它涉及通过弹性搜索的基巴纳语,缺少新行\n
参见图片。
问题:我应该在哪里确切地引入新行特殊字符\n
。 ??
答案 0 :(得分:-1)
您不应使用\n
。如果您查看文档here,format_firstline
和format1
,则表示fluentd在找到与format_firstline
相匹配的正则表达式时会考虑一个新事件(即新的日志消息)。应该是您的情况下的日期。找到日期后,它将根据format1
解析日志消息。在遇到带有日期的行之前,它不会记录新行,因此您不必担心。
2019-11-28 22:22:14
),线程(例如:pool.thread.2
),级别(例如INFO
,ERROR
等)和消息(例如java.lang....
),直到找到以日期开头的下一行。 format1 /^(?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}) \[(?<thread>.*)\] (?<level>[^\s]+)(?<message>.*)
format_firstline /\d{4}-\d{1,2}-\d{1,2}/
format1 /^(?<logtime>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}.\d{1,9}) (?<log>.*)/