syslog サポート

Spring Integration 2.2 は、syslog トランスフォーマー SyslogToMapTransformer を導入しました。

この依存関係をプロジェクトに含める必要があります。

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

このトランスフォーマーは、UDP または TCP 受信アダプターとともに、他のホストから syslog レコードを受信および分析するために使用できます。トランスフォーマーは、syslog メッセージの要素のマップを含むメッセージペイロードを作成します。

Spring Integration 3.0 は、単一の要素で syslog 受信アダプターを構成するための便利な名前空間サポートを導入しました。

バージョン 4.1.1 以降、フレームワークは RFC 5424> [IETF] (英語) で指定されている拡張 syslog 形式をサポートするようになりました。さらに、TCP および RFC5424 を使用する場合、RFC 6587 [IETF] (英語) で説明されている octet counting と non-transparent framing の両方がサポートされます。

Syslog Inbound Channel Adapter

この要素には、UDP または TCP 受信チャネルアダプターと、syslog メッセージを Spring Integration メッセージに変換する MessageConverter が含まれます。DefaultMessageConverter は SyslogToMapTransformer に委譲し、syslog フィールドの Map であるペイロードを持つメッセージを作成します。さらに、メッセージ以外のすべてのフィールドもメッセージのヘッダーとして使用可能になり、接頭辞 syslog_ が付けられます。このモードでは、RFC 3164 [IETF] (英語) (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 counting および non-transparent framing を処理します。octet counting が検出されない場合、ByteArrayLfSerializer を使用します。異なる non-transparent フレーミングを使用するには、他のデシリアライザーを提供できます。デシリアライザーは octet counting と non-transparent framing の両方をサポートできますが、後者の 1 つの形式のみがサポートされます。asMap がコンバーターで false である場合、RFC6587SyslogDeserializer で retainOriginal コンストラクター引数を設定する必要があります。

構成例

次の例では、syslogIn チャネルにメッセージを送信する UDP アダプターを定義しています(アダプター Bean 名は syslogIn.adapter です)。

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

アダプターはポート 1514 で listen します。

次の例では、fromSyslog チャネルにメッセージを送信する UDP アダプターを定義しています(アダプター Bean 名は syslogIn です)。

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

アダプターはポート 1514 で listen します。

次の例では、チャネル syslogIn にメッセージを送信する TCP アダプターを定義しています(アダプター Bean 名は syslogIn.adapter です)。

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

アダプターはポート 1514 で listen します。

protocol 属性が追加されていることに注意してください。この属性には udp または tcp を含めることができます。デフォルトは udp です。

次の例は、チャネル fromSyslog にメッセージを送信する UDP アダプターを示しています。

<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>

上記の例は、2 つの SmartLifecycle 属性、auto-startup および phase も示しています。ID が converter および error-channel のカスタム org.springframework.integration.syslog.MessageConverter への参照があります。udp-attributes 子要素にも注目してください。.UDP 受信チャネルアダプターの属性で定義されているように、ここでさまざまな UDP 属性を設定できます。

udp-attributes 要素を使用する場合は、inbound-channel-adapter 要素自体ではなく、port 属性を指定する必要があります。

次の例は、チャネル fromSyslog にメッセージを送信する TCP アダプターを示しています。

<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 要素自体ではなくそこで定義されます。

次の例は、チャネル fromSyslog にメッセージを送信する TCP アダプターを示しています。

<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 に必要)で外部定義された接続ファクトリへの参照で構成されています。