syslog サポート
Spring Integration 2.2 は、syslog トランスフォーマー SyslogToMapTransformer
を導入しました。
この依存関係をプロジェクトに含める必要があります。
このトランスフォーマーは、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 に必要)で外部定義された接続ファクトリへの参照で構成されています。