系统日志支持
Spring Integration 2.2 引入了 syslog 转换器:SyslogToMapTransformer
.
您需要将此依赖项包含到您的项目中:
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-syslog</artifactId>
<version>5.5.13</version>
</dependency>
compile "org.springframework.integration:spring-integration-syslog:5.5.13"
该转换器与入站适配器一起UDP
,TCP
可用于接收和分析来自其他主机的系统日志记录。转换器创建一个消息负载,其中包含来自 syslog 消息的元素映射。
Spring Integration 3.0 引入了方便的命名空间支持,用于在单个元素中配置 syslog 入站适配器。
从版本 4.1.1 开始,该框架现在支持扩展的 syslog 格式,如RFC 5424>中所指定。此外,当使用 TCP 和 RFC5424 时,都支持RFC 6587octet counting
中的non-transparent framing
描述。
Syslog 入站通道适配器
此元素包含一个UDP
或TCP
入站通道适配器和一个MessageConverter
用于将 syslog 消息转换为 Spring Integration 消息。的DefaultMessageConverter
委托SyslogToMapTransformer
,创建一条消息,其有效负载是Map
syslog 字段。此外,除消息外的所有字段也可用作消息中的标头,并带有前缀syslog_
。在此模式下,仅支持RFC 3164 (BSD) 系统日志。
从 4.1 版开始,DefaultMessageConverter
有一个名为asMap
(默认为true
)的属性。当它是false
时,转换器将消息有效负载保留为原始完整的 syslog 消息(在 a 中byte[]
),同时仍设置标头。
从 4.1.1 版开始,还支持 RFC 5424,使用RFC5424MessageConverter
. 在这种情况下,字段不会作为标头复制,除非asMap
设置为false
,在这种情况下,原始消息是有效负载,解码后的字段是标头。
要将 RFC 5424 与 TCP 传输一起使用,您必须提供额外的配置以启用 RFC 6587 中描述的不同成帧技术。适配器需要一个配置有RFC6587SyslogDeserializer . 默认情况下,此反序列化程序处理octet counting 并non-transparent framing 使用换行符 (LF) 来分隔 syslog 消息。它使用未检测到的ByteArrayLfSerializer 时间。octet counting 要使用不同的non-transparent 帧,您可以为它提供一些其他的解串器。虽然解串器可以同时支持octet counting 和non-transparent framing ,但仅支持后者的一种形式。如果在转换asMap 器false 上,则必须retainOriginal 在RFC6587SyslogDeserializer .
|
示例配置
以下示例定义了一个向通道UDP
发送消息syslogIn
的适配器(适配器 bean 名称为syslogIn.adapter
):
<int-syslog:inbound-channel-adapter id="syslogIn" port="1514" />
适配器侦听端口1514
。
以下示例定义了一个向通道UDP
发送消息fromSyslog
的适配器(适配器 bean 名称为syslogIn
):
<int-syslog:inbound-channel-adapter id="syslogIn"
channel="fromSyslog" port="1514" />
适配器侦听端口1514
。
以下示例定义了一个TCP
向通道发送消息syslogIn
的适配器(适配器 bean 名称为syslogIn.adapter
):
<int-syslog:inbound-channel-adapter id="bar" protocol="tcp" port="1514" />
适配器侦听端口1514
。
注意protocol
属性的添加。此属性可以包含udp
或tcp
。它默认为udp
.
以下示例显示了UDP
将消息发送到通道的适配器fromSyslog
:
<int-syslog:inbound-channel-adapter id="udpSyslog"
channel="fromSyslog"
auto-startup="false"
phase="10000"
converter="converter"
send-timeout="1000"
error-channel="errors">
<int-syslog:udp-attributes port="1514" lookup-host="false" />
</int-syslog:inbound-channel-adapter>
前面的示例还显示了两个SmartLifecycle
属性:auto-startup
和phase
。它引用了org.springframework.integration.syslog.MessageConverter
一个 ID 为converter
和 的自定义error-channel
。还要注意udp-attributes
子元素。您可以在此处设置各种 UDP 属性,如.UDP Inbound Channel Adapter Attributes中所定义。
当你使用udp-attributes 元素时,你必须在port 那里而不是inbound-channel-adapter 元素本身提供属性。
|
以下示例显示了TCP
将消息发送到通道的适配器fromSyslog
:
<int-syslog:inbound-channel-adapter id="TcpSyslog"
protocol="tcp"
channel="fromSyslog"
connection-factory="cf" />
<int-ip:tcp-connection-factory id="cf" type="server" port="1514" />
它还展示了如何引用外部定义的连接工厂,该工厂可用于高级配置(socket keep-alive 和其他用途)。有关详细信息,请参阅TCP 连接工厂。
外部配置的connection-factory 必须是 type server ,并且端口是在那里定义的,而不是在inbound-channel-adapter 元素本身上定义的。
|
以下示例显示了TCP
将消息发送到通道的适配器fromSyslog
:
<int-syslog:inbound-channel-adapter id="rfc5424Tcp"
protocol="tcp"
channel="fromSyslog"
connection-factory="cf"
converter="rfc5424" />
<int-ip:tcp-connection-factory id="cf"
using-nio="true"
type="server"
port="1514"
deserializer="rfc6587" />
<bean id="rfc5424" class="org.springframework.integration.syslog.RFC5424MessageConverter" />
<bean id="rfc6587" class="org.springframework.integration.syslog.inbound.RFC6587SyslogDeserializer" />
前面的示例配置为使用RFC 5424
转换器,并配置了对带有RFC 6587
解串器的外部定义连接工厂的引用(RFC 5424 要求)。