1

我正在使用带有 RemoteSyslogAppender 的 log4net 将日志发送到 logstash/elasticsearch。appender 会自动在消息前添加“<14>”,从而无法对堆栈跟踪进行分组。

在 log4net 发送的每条消息中,该数字都位于标识值之前。我尝试添加具有空值的“身份”标签,该标签已删除消息的“身份”,但 <14> 仍然存在。

<identity value=""/>

这是我当前的附加程序配置

<appender name="RemoteSyslogAppender" type="log4net.Appender.RemoteSyslogAppender" >
  <identity value="somemessage" />
  <param name="RemoteAddress" value="10.3.145.130" />
  <param name="RemotePort" value="5140" />
  <layout type="log4net.Layout.PatternLayout, log4net">
    <param name="ConversionPattern" value="%-5level - %message%newline" />
  </layout>
</appender>

使用这种配置,我仍然在“身份”值(一些消息)之前得到 <14>

"message" => "<14>somemessage:    at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost)",

logstash 配置在这里无关紧要,但如果有帮助,我可以稍后包含它,我现在正在使用 {%GREEDYDATA},一旦我弄清楚如何对它们进行分组,我将着手正确解析它。

谢谢

4

1 回答 1

3

正如RemoteSyslogAppender 文档所述,它为RFC 3164中定义的 BS​​D syslog 协议实现了一个客户端。该<14>字符串是该协议的一部分,描述了消息的功能和严重性,即系统的哪个部分发出了消息以及消息的重要性。有关完整说明,请参见第 4.1.1 节。

您可以使用 grok 删除或提取此值,例如:

filter {
  grok {
    match => ["message", "<%{INT}>%{GREEDYDATA:message}"]
    overwrite => ["message"]
  }
}

如果要将数值转换为人类可读的值,可以使用syslog_pri 过滤器

于 2015-05-09T17:53:22.700 回答