系统日志支持

Spring Integration 2.2 引入了 syslog 转换器:SyslogToMapTransformer

项目需要此依赖项

  • Maven

  • Gradle

<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-syslog</artifactId>
    <version>7.0.0</version>
</dependency>
compile "org.springframework.integration:spring-integration-syslog:7.0.0"

此转换器,与 UDPTCP 入站适配器结合使用,可用于接收和分析来自其他主机的 syslog 记录。转换器创建一个消息负载,其中包含 syslog 消息中元素的映射。

Spring Integration 3.0 引入了便捷的命名空间支持,用于在单个元素中配置 syslog 入站适配器。

从版本 4.1.1 开始,该框架现在支持 RFC 5424> 中指定的扩展 syslog 格式。此外,当使用 TCP 和 RFC5424 时,支持 RFC 6587 中描述的 octet counting(八位字节计数)和 non-transparent framing(非透明帧)。

Syslog 入站通道适配器

此元素包含 UDPTCP 入站通道适配器和一个 MessageConverter,用于将 syslog 消息转换为 Spring Integration 消息。DefaultMessageConverter 委托给 SyslogToMapTransformer,创建一个消息,其负载是 syslog 字段的 Map。此外,除消息外的所有字段也作为消息头提供,并以 syslog_ 为前缀。在此模式下,仅支持 RFC 3164 (BSD) syslog。

自版本 4.1 以来,DefaultMessageConverter 有一个名为 asMap 的属性(默认为 true)。当它为 false 时,转换器将消息负载保留为原始完整的 syslog 消息(以 byte[] 形式),同时仍设置消息头。

自版本 4.1.1 以来,通过使用 RFC5424MessageConverter 也支持 RFC 5424。在这种情况下,字段不会作为消息头复制,除非 asMap 设置为 false,在这种情况下,原始消息是负载,解码的字段是消息头。

要将 RFC 5424 与 TCP 传输一起使用,您必须提供额外的配置以启用 RFC 6587 中描述的不同帧技术。适配器需要一个配置了 RFC6587SyslogDeserializer 的 TCP 连接工厂。默认情况下,此反序列化器通过使用换行符 (LF) 分隔 syslog 消息来处理 octet countingnon-transparent framing。当未检测到 octet counting 时,它使用 ByteArrayLfSerializer。要使用不同的 non-transparent 帧,您可以为其提供一些其他反序列化器。虽然反序列化器可以同时支持 octet countingnon-transparent framing,但只支持后者的一种形式。如果转换器上的 asMapfalse,则必须在 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 属性。此属性可以包含 udptcp。默认为 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-startupphase。它引用了一个自定义的 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" />

它还展示了如何引用外部定义的连接工厂,该连接工厂可用于高级配置(套接字保持活动和其他用途)。更多信息,请参阅 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 反序列化器(RFC 5424 所需)的外部定义的连接工厂。

© . This site is unofficial and not affiliated with VMware.