rsyslog很强大,但是它的文档并不那么明确。我不知道如何解析日志文件并以GELF格式将其直接路由到Graylog。
我已经找到了一些关于在rsyslog中输出g亲自的文档,但我不知道如何继续。
到目前为止,它试图将下面的conf放在/etc/rsyslog.d/01-access.conf中,但这似乎不适用于…
template(name="gelf" type="list") {
constant(value="{\"version\":\"1.1\",")
constant(value="\"host\":\"")
property(name="hostname")
constant(value="\",\"short_message\":\"")
property(name="msg" format="json")
constant(value="\",\"timestamp\":\"")
property(name="timegenerated" dateformat="unixtimestamp")
constant(value="\",\"level\":\"")
property(name="syslogseverity")
constant(value="\"}")
}
input(type="imfile"
File="/var/log/apache2/access.log"
Tag="apache-access"
)
if $programname == 'apache-access' then {
action(
type="omfwd"
Target="GRAYLOG-IP"
Port="12201"
Protocol="tcp"
template="gelf"
)
stop
}发布于 2016-06-30 05:39:54
您会遇到此问题,因为通过tcp发送无法使用rsyslog,这是因为G精灵的空字节消息分隔符规范。在官方的rsyslog文档中:(http://www.rsyslog.com/doc/v8-stable/tutorials/gelf_forwarding.html)“请注意,上面的情况只适用于UDP传输。当使用TCP时,Graylog需要一个Null字节作为消息分隔符。这在rsyslog中目前是不可能的。”但是,您的示例应该通过udp工作。
一句忠告,我肯定会建议签出rsyslog过滤规则,因为您的示例将继续消息处理(请查看倾斜字符)。
发布于 2020-04-09 18:35:47
来自:https://www.rsyslog.com/doc/master/tutorials/gelf_forwarding.html
在使用TCP时,Graylog需要一个Null字节作为消息分隔符。因此,要使用TCP,需要通过TCP_FrameDelimiter选项更改分隔符。
action(type="omfwd" target="graylogserver" port="12201" protocol="tcp" template="gelf" TCP_FrameDelimiter="0" KeepAlive="on")https://serverfault.com/questions/785776
复制相似问题