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