# syslog 支持
# syslog 支持
Spring Integration2.2 引入了 syslog 转换器:SyslogToMapTransformer
。
你需要在项目中包含此依赖项:
Maven
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-syslog</artifactId>
<version>5.5.9</version>
</dependency>
Gradle
compile "org.springframework.integration:spring-integration-syslog:5.5.9"
此转换器与UDP
或TCP
入站适配器一起,可用于接收和分析来自其他主机的 syslog 记录。Transformer 创建一个消息有效负载,其中包含来自 syslog 消息的元素的映射。
Spring Integration3.0 引入了方便的名称空间支持,用于在单个元素中配置 SYSLOG 入站适配器。
从版本 4.1.1 开始,该框架现在支持扩展的 SYSLOG 格式,如RFC 5424> (opens new window)中所指定的。此外,当使用 TCP 和 RFC5424 时,octet counting
和non-transparent framing
中描述的RFC 6587 (opens new window)都是支持的。
# syslog 入站通道适配器
这个元素包含UDP
或TCP
入站通道适配器和MessageConverter
以将 SYSLOG 消息转换为 Spring 集成消息。将DefaultMessageConverter
委托给SyslogToMapTransformer
,创建一条消息,其有效负载为 syslog 字段的Map
。此外,除消息之外的所有字段也可以作为消息中的标题使用,并以syslog_
作为前缀。在此模式下,只支持RFC 3164 (opens new window)syslogs。
从版本 4.1 开始,DefaultMessageConverter
有一个名为asMap
的属性(缺省值是true
)。当它是false
时,转换器将消息有效负载作为原始完整的 SYSLOG 消息(在byte[]
中),同时仍然设置头。
从版本 4.1.1 开始,通过使用RFC5424MessageConverter
也支持 RFC5424。在这种情况下,字段不会被复制为标题,除非asMap
被设置为false
,在这种情况下,原始消息是有效载荷,而解码的字段是标题。
要在 TCP 传输中使用 RFC5424,你必须提供额外的配置,以启用 RFC6587 中描述的不同帧技术, 适配器需要一个配置有 RFC6587SyslogDeserializer 的 TCP 连接工厂,默认情况下,这个反序列化器通过使用 LineFeed 来分隔 syslog 消息来处理 octet counting 和non-transparent framing 。当未检测到 octet counting 时,它使用ByteArrayLfSerializer 。来使用不同的 non-transparent 帧,你可以为它提供一些其他的反序列化器。虽然反序列化器可以同时支持 octet counting 和non-transparent framing ,但只支持后者的一种形式。如果 asMap 在转换器上是false ,则必须在RFC6587SyslogDeserializer 中设置retainOriginal 构造函数参数。 |
---|
# 示例配置
下面的示例定义了一个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 入站通道适配器属性中所定义的。
当使用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 必须是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
反序列化器(RFC5424 所需)的外部定义的连接工厂的引用。
← 流支持 TCP 和 UDP 支持 →