系統日誌支援

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.