質問: 転送先のサーバへsyslog転送を行ったが、 転送先サーバに出力されたメッセージが文字化けしていた。 調べたところ、syslog転送先のサーバの文字コードが転送元と異なっていた。 転送先、転送元のsyslogへ出力するメッセージの文字コードは変更できないので、 syslog転送時に文字コードの変換ができないか、またその方法を知りたかったため。
回答: CentOS/RHEL の rsyslog.conf の場合、動作のところは『フィルター アクション』という書式を取ります。たとえば ``` cron.* /var/log/cron.log ``` なら、cron ファシリティに属するメッセージをローカルの var/log/cron.log に追記します。 アクションの部分にはファイル名以外にも、以下のものが使えます。 1. ?DynamicFile - テンプレートを使う 2. @[(zNUMBER)]HOST:[PORT] - UDP でメッセージを転送 3. @@example.com:6514 - TCP でメッセージを転送 4. ^EXECUTABLE; TEMPLATE - プログラムを実行 5. :PLUGIN:DB_HOST,DB_NAME,DB_USER,DB_PASSWORD;[TEMPLATE] - データベースへの保存 文字コードを変換するには、アクション部分で nkf/iconv 等の文字コード変換フィルターに食わせたり、データベースに出力し、DB のトリガーで文字コード変換をするといった手法が考えられます。どちらもそれなりに、パイプやフィルター等の一般的な Linux/Unix の知識が必要です。 詳細は 20.2. RSYSLOG の基本設定 をごらんください (このリンク先は Redhat Enterprise 7.x / CentOS 7.x の場合)。