Syslog 支持

Syslog 支持

Spring Integration 2.2 引入了 syslog 转换器:SyslogToMapTransformer.spring-doc.cadn.net.cn

您需要将此依赖项包含在您的项目中:spring-doc.cadn.net.cn

Maven 系列
<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-syslog</artifactId>
    <version>6.0.9</version>
</dependency>
Gradle
compile "org.springframework.integration:spring-integration-syslog:6.0.9"

此 transformer 与UDPTCP入站适配器,可用于接收和分析来自其他主机的 syslog 记录。 转换器会创建一个消息负载,其中包含 syslog 消息中元素的映射。spring-doc.cadn.net.cn

Spring Integration 3.0 引入了方便的命名空间支持,用于在单个元素中配置 syslog 入站适配器。spring-doc.cadn.net.cn

从版本 4.1.1 开始,该框架现在支持 RFC 5424> 中指定的扩展 syslog 格式。 此外,当使用 TCP 和 RFC5424 时,两者octet countingnon-transparent framing支持 RFC 6587 中描述的。spring-doc.cadn.net.cn

Syslog 入站通道适配器

此元素包含一个UDPTCP入站通道适配器和MessageConverter将 syslog 消息转换为 Spring 集成消息。 这DefaultMessageConverterdelegates 到SyslogToMapTransformer,创建一条消息,其负载为Map的 syslog 字段。 此外,除消息之外的所有字段也可用作消息中的标头,并带有前缀syslog_. 在此模式下,仅支持 RFC 3164 (BSD) 系统日志。spring-doc.cadn.net.cn

从 4.1 版本开始,DefaultMessageConverter具有一个名为asMap(默认值为true). 当它是false,转换器将消息负载保留为原始的完整 syslog 消息(在byte[]),同时仍设置标头。spring-doc.cadn.net.cn

从 4.1.1 版本开始,还支持 RFC 5424,通过使用RFC5424MessageConverter. 在这种情况下,字段不会复制为标题,除非asMap设置为false,在这种情况下,原始消息是有效负载,而解码的字段是标头。spring-doc.cadn.net.cn

要将 RFC 5424 与 TCP 传输一起使用,您必须提供其他配置以启用 RFC 6587 中描述的不同成帧技术。 适配器需要一个 TCP 连接工厂,该工厂配置了RFC6587SyslogDeserializer. 默认情况下,此反序列化器处理octet countingnon-transparent framing通过使用换行符 (LF) 分隔 syslog 消息。 它使用ByteArrayLfSerializer什么时候octet counting未检测到。 要使用不同的non-transparentframing 中,你可以为它提供一些其他的 deserializer。 虽然 deserializer 可以同时支持octet countingnon-transparent framing,则仅支持后者的一种形式。 如果asMapfalse在转换器上,您必须设置retainOriginalconstructor 参数的RFC6587SyslogDeserializer.

示例配置

以下示例定义了一个UDP适配器,该适配器将消息发送到syslogInchannel(适配器 Bean 名称为syslogIn.adapter):spring-doc.cadn.net.cn

<int-syslog:inbound-channel-adapter id="syslogIn" port="1514" />

适配器侦听端口1514.spring-doc.cadn.net.cn

以下示例定义了一个UDP适配器,该适配器将消息发送到fromSyslogchannel(适配器 Bean 名称为syslogIn):spring-doc.cadn.net.cn

<int-syslog:inbound-channel-adapter id="syslogIn"
	channel="fromSyslog" port="1514" />

适配器侦听端口1514.spring-doc.cadn.net.cn

以下示例定义了一个TCP将消息发送到 Channel 的适配器syslogIn(适配器 Bean 名称为syslogIn.adapter):spring-doc.cadn.net.cn

<int-syslog:inbound-channel-adapter id="bar" protocol="tcp" port="1514" />

适配器侦听端口1514.spring-doc.cadn.net.cn

请注意,添加了protocol属性。 此属性可以包含udptcp. 它默认为udp.spring-doc.cadn.net.cn

以下示例显示了UDP将消息发送到 Channel 的适配器fromSyslog:spring-doc.cadn.net.cn

<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-startupphase. 它具有对自定义org.springframework.integration.syslog.MessageConverter的 ID 为converter以及一个error-channel. 另请注意udp-attributeschild 元素。 您可以在此处设置各种 UDP 属性,如 中所定义。UDP 入站通道适配器属性spring-doc.cadn.net.cn

当您使用udp-attributes元素中,您必须提供port属性,而不是inbound-channel-adapter元素本身。

以下示例显示了TCP将消息发送到 Channel 的适配器fromSyslog:spring-doc.cadn.net.cn

<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 连接工厂spring-doc.cadn.net.cn

外部配置connection-factory必须是 typeserver,并且端口是在那里定义的,而不是在inbound-channel-adapter元素本身。

以下示例显示了TCP将消息发送到 Channel 的适配器fromSyslog:spring-doc.cadn.net.cn

<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 6587deserializer(RFC 5424 需要)。spring-doc.cadn.net.cn