Syslog 支援

Spring Integration 2.2 引入了 syslog 轉換器:SyslogToMapTransformer

您需要將此相依性包含到您的專案中

  • Maven

  • Gradle

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

此轉換器與 UDPTCP 輸入配接器一起使用,可用於接收和分析來自其他主機的 syslog 記錄。轉換器會建立一個訊息 Payload,其中包含來自 syslog 訊息的元素 Map。

Spring Integration 3.0 引入了方便的命名空間支援,用於在單一元素中設定 syslog 輸入配接器。

從 4.1.1 版開始,框架現在支援擴充的 syslog 格式,如 RFC 5424> 中所指定。此外,當使用 TCP 和 RFC5424 時,也支援 RFC 6587 中描述的 octet countingnon-transparent framing

Syslog 輸入通道配接器

此元素包含 UDPTCP 輸入通道配接器和 MessageConverter,用於將 syslog 訊息轉換為 Spring Integration 訊息。DefaultMessageConverter 委派給 SyslogToMapTransformer,建立一個訊息,其 Payload 是 syslog 欄位的 Map。此外,除了訊息之外的所有欄位也作為標頭在訊息中提供,並以 syslog_ 作為前綴。在此模式下,僅支援 RFC 3164 (BSD) syslog。

自 4.1 版以來,DefaultMessageConverter 具有一個名為 asMap 的屬性(預設為 true)。當它為 false 時,轉換器會將訊息 Payload 保留為原始完整 syslog 訊息(在 byte[] 中),同時仍設定標頭。

自 4.1.1 版以來,也支援 RFC 5424,透過使用 RFC5424MessageConverter。在這種情況下,除非 asMap 設定為 false,否則欄位不會複製為標頭,在這種情況下,原始訊息是 Payload,而解碼的欄位是標頭。

若要將 RFC 5424 與 TCP 傳輸一起使用,您必須提供額外的設定,以啟用 RFC 6587 中描述的不同 Framing 技術。配接器需要一個 TCP 連線 Factory,該 Factory 配置了 RFC6587SyslogDeserializer。依預設,此還原序列化器透過使用換行符號 (LF) 來分隔 syslog 訊息,處理 octet countingnon-transparent framing。當未偵測到 octet counting 時,它會使用 ByteArrayLfSerializer。若要使用不同的 non-transparent Framing,您可以為其提供一些其他還原序列化器。雖然還原序列化器可以同時支援 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。它參考了具有 ID 為 convertererror-channel 的自訂 org.springframework.integration.syslog.MessageConverter。另請注意 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" />

它也顯示了如何參考外部定義的連線 Factory,該 Factory 可用於進階設定(Socket Keep-Alive 和其他用途)。如需更多資訊,請參閱 TCP 連線 Factory

外部設定的 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 轉換器,並配置了對外部定義的連線 Factory 的參考,該 Factory 具有 RFC 6587 還原序列化器(RFC 5424 所需)。