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"
此轉換器與 UDP
或 TCP
輸入配接器一起使用,可用於接收和分析來自其他主機的 syslog 記錄。轉換器會建立一個訊息 Payload,其中包含來自 syslog 訊息的元素 Map。
Spring Integration 3.0 引入了方便的命名空間支援,用於在單一元素中設定 syslog 輸入配接器。
Syslog 輸入通道配接器
此元素包含 UDP
或 TCP
輸入通道配接器和 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 counting 和 non-transparent framing 。當未偵測到 octet counting 時,它會使用 ByteArrayLfSerializer 。若要使用不同的 non-transparent Framing,您可以為其提供一些其他還原序列化器。雖然還原序列化器可以同時支援 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
。它參考了具有 ID 為 converter
和 error-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 所需)。