23.6. Rsyslog モジュールの使用
モジューラーの設計上、rsyslog は、追加の機能が含まれる各種 モジュール を提供します。モジュールはサードパーティーによる書き込みが可能であることに注意してください。ほとんどのモジュールは、追加入力 (以下の Input Modules 参照) または出力 (以下の Output Modules 参照) を提供します。その他のモジュールは、各モジュールに固有の機能を提供します。モジュールは、モジュールの読み込み後に利用可能になる追加の設定ディレクティブを提供する場合があります。モジュールを読み込むには、以下の構文を使用します。
module(load=”MODULE”)
MODULE は希望のモジュールを表します。たとえば、rsyslog を有効にして標準テキストファイルを syslog メッセージに変換する Text File Input Module (imfile
) を読み込む場合は、/etc/rsyslog.conf
設定ファイルの以下の行を指定します。
module(load=”imfile”)
rsyslog は多くのモジュールを提供し、これらは以下の主なカテゴリーに分けられます。
-
入力モジュール: 入力モジュールは、さまざまなソースからメッセージを収集します。入力モジュールの名前は、常に
imfile
およびimjournal
のように接頭辞im
で始まります。 -
出力モジュール: 出力モジュールはメッセージをネットワーク上に送信したり、データベース内に保存したり、暗号化するなど、様々なターゲットにメッセージを発行するための機能を提供します。出力モジュールの名前は常に
omsnmp
やomrelp
などのように接頭辞om
で始まります。 -
パーサーモジュール: これらのモジュールは、カスタムの解析ルールの作成や不正な形式のメッセージ解析に使用されます。C プログラミング言語についてある程度の知識があれば、独自のメッセージパーサーが作成できます。パーサーモジュールの名前は常に
pmrfc5424
やpmrfc3164
のように接頭辞pm
で始まります。 -
メッセージ修正モジュール: メッセージ修正モジュールは、syslog メッセージの内容を変更します。このモジュールの名前は、
mm
接頭辞で始まります。mmanon
、mmnormalize
、mmjsonparse
といったメッセージ修正モジュールは、メッセージの匿名化や正常化に使用されます。 -
文字列生成モジュール - 文字列生成モジュールは、メッセージ内容を基にして文字列を生成し、rsyslog で用意されているテンプレート機能と密接に機能します。テンプレートに関する詳細は 「テンプレート」 を参照してください。文字列生成モジュールの名前は、
smfile
またはsmtradfile
のように常に接頭辞sm
で始まります。 - ライブラリーモジュール - ライブラリーモジュールは、他の読み込み可能なモジュール用の機能を提供します。これらのモジュールは、必要であるのにユーザーが設定できない場合に rsyslog が自動的に読み込みます。
利用可能なモジュールのリストと、そのモジュールの詳しい説明は、http://www.rsyslog.com/doc/rsyslog_conf_modules.html を参照してください。
rsyslog はモジュールを読み込む際に、モジュールに対して一部の機能とデータへのアクセスを提供します。これはセキュリティー上の脅威となる可能性があります。セキュリティーリスクを最小限にするために、信頼できるモジュールのみを使用するようにしてください。
23.6.1. テキストファイルのインポート
テキストファイル入力モジュールは imfile
と省略され、rsyslog がテキストファイルを syslog メッセージのストリームに変換できるようにします。imfile
を使用して、独自のテキストファイルログを作成するアプリケーションからログメッセージをインポートできます。imfile
を読み込むには、/etc/rsyslog.conf
に以下を追加します。
module(load=”imfile” PollingInterval=”int”)
複数のファイルをインポートする場合でも、imfile
を一度読み込むだけで十分です。PollingInterval モジュール引数は、接続済みテキストファイルの変更に対して rsyslog チェックをどのくらいの頻度で行うか指定します。デフォルトの間隔は 10 秒で、変更するには int を秒で指定した時間間隔に置き換えます。
インポートするテキストファイルを特定するには、/etc/rsyslog.conf
で以下の構文を使用します。
# File 1 input(type="imfile" File="path_to_file" Tag="tag:" Severity="severity" Facility="facility") # File 2 input(type="imfile" File="path_to_file2") ...
入力テキストファイルを指定するために必要な設定:
- path_to_file をテキストファイルへのパスに置き換えます。
- tag: をこのメッセージのタグ名に置き換えます。
必要なディレクティブ以外に、テキスト入力に適用可能な設定がいくつかあります。severity を適切なキーワードで置き換えて、インポートされたメッセージの重要度を設定します。facility を、メッセージを作成したサブシステムを定義するキーワードに置き換えます。重要度と機能のキーワードは、機能または優先度ベースのフィルターで使用されたものと同じものです (「フィルター」 を参照)。
例23.15 テキストファイルのインポート
Apache HTTP サーバーはログファイルをテキスト形式で作成します。rsyslog の処理機能を apache エラーメッセージに適用するには、まず imfile
モジュールを使用してメッセージをインポートします。/etc/rsyslog.conf
に以下を追加します。
module(load=”imfile”) input(type="imfile" File="/var/log/httpd/error_log" Tag="apache-error:")
23.6.2. データベースへのメッセージのエクスポート
ログデータの処理は、テキストファイルではなくデータベース内で実行するとより速く、より便利なものになります。使用される DBMS のタイプに基づいて、ommysql
、ompgsql
、omoracle
、ommongodb
などの出力モジュールを選択します。別の方法としては、libdbi
ライブラリーに依存する一般的な omlibdbi
出力モジュールを使用します。omlibdbi
モジュールは、Firebird/Interbase、MS SQL、Sybase、SQLite、Ingres、Oracle、mSQL、MySQL、および PostgreSQL のデータベースシステムをサポートします。
例23.16 データベースへの rsyslog メッセージのエクスポート
rsyslog メッセージを MySQL データベースに保存するには、/etc/rsyslog.conf
に以下を追加します。
module(load=”ommysql”)
. action(type”ommysql”
server=”database-server”
db=”database-name”
uid=”database-userid”
pwd=”database-password”
serverport=”1234”)
最初に出力モジュールが読み込まれ、その後に通信ポートが指定されます。上記の例では、サーバー名、データベース名、認証データなどの追加情報は、最後の行で指定されています。
23.6.3. 暗号化トランスポートの有効化
ネットワーク転送の機密性と統合性は、TLS または GSSAPI 暗号化プロトコルのいずれかによって提供されます。
Transport Layer Security (TLS) は、ネットワーク上の通信セキュリティーを提供するために設計された暗号プロトコルです。TLS を使用すると、rsyslog メッセージは送信前に暗号化され、送信者と受信者間で相互認証が行われます。TLS の設定は 「TLS を使用した暗号化メッセージ転送の設定」 を参照してください。
Generic Security Service API (GSSAPI) は、プログラムがセキュリティーサービスにアクセスするためのアプリケーションプログラミングインターフェイスです。rsyslog と接続して使用するには、機能している Kerberos 環境が必要です。GSSAPI の設定は、「GSSAPI を使用した暗号化メッセージ転送の設定」 を参照してください。
TLS を使用した暗号化メッセージ転送の設定
TLS を経由して暗号化トランスポートを使用するには、サーバーとクライアント両方を設定する必要があります。
- 公開鍵、秘密鍵、証明書ファイルを作成し、「新しい鍵と証明書の生成」 を参照します。
サーバー 側で、
/etc/rsyslog.conf
設定ファイルで以下を設定します。gtls netstream ドライバーをデフォルトドライバーに設定します。
global(defaultnetstreamdriver="gtls")
証明書ファイルへのパスを指定します。
global(defaultnetstreamdrivercafile="path_ca.pem" defaultnetstreamdrivercertfile="path_cert.pem" defaultnetstreamdriverkeyfile="path_key.pem")
簡潔な設定ファイルを好む場合は、グローバルディレクティブをすべて 1 つのブロックに統合できます。
以下を置き換えます。
- path_ca.pem を、公開鍵へのパスに置き換え
- path_cert.pem を、証明書ファイルへのパスに置き換え
- path_key.pem を、秘密鍵へのパスに置き換え
imtcp モジュールを読み込み、ドライバーオプションを設定します。
module(load=”imtcp” StreamDriver.Mode=“number” StreamDriver.AuthMode=”anon”)
サーバーを起動します。
input(type="imtcp" port="port″)
以下を置き換えます。
-
number はドライバーモードを指定します。TCP オンリーモードを有効にするには、
1
を使用します。 port を、リスナーを起動するポート番号に置き換えます。たとえば
10514
にします。anon
設定は、クライアントが認証されていないことを意味します。
-
number はドライバーモードを指定します。TCP オンリーモードを有効にするには、
クライアント 側の
/etc/rsyslog.conf
設定ファイルで以下を設定します。公開鍵を読み込みます。
global(defaultnetstreamdrivercafile="path_ca.pem")
path_ca.pem を公開鍵へのパスで置き換えます。
gtls netstream ドライバーをデフォルトドライバーに設定します。
global(defaultnetstreamdriver="gtls")
ドライバーを設定し、実行するアクションを指定します。
module(load=”imtcp” streamdrivermode=”number” streamdriverauthmode=”anon”) input(type=”imtcp” address=”server.net” port=”port”)
number、anon、port を、サーバーと同じ値に置き換えます。
上記リストの最後の行で、例のアクションがサーバーから指定の TCP ポートにメッセージを転送します。
GSSAPI を使用した暗号化メッセージ転送の設定
rsyslog では、GSSAPI とのやり取りは imgssapi モジュールによって提供されます。GSSAPI 転送モードをオンにするには、以下を実行します。
/etc/rsyslog.conf
に以下の設定をします。$ModLoad imgssapi
このディレクティブは、imgssapi モジュールを読み込みます。
以下のように入力を指定します。
$InputGSSServerServiceName name $InputGSSServerPermitPlainTCP
on
$InputGSSServerMaxSessions number $InputGSSServerRun port- name を、GSS サーバーの名前に置き換えます。
- number を置き換え、サポートされる最大セッション数を設定します。デフォルトで、この数字は制限されていません。
port を、GSS サーバーを起動したい選択ポートに置き換えます。
$InputGSSServerPermitPlainTCP on
設定により、サーバーは同じポートでプレーン TCP メッセージを受信できます。デフォルトでオフになっています。
設定ファイルリーダーが /etc/rsyslog.conf
設定ファイルで $InputGSSServerRun ディレクティブに遭遇すると、imgssapi
モジュールはすぐに初期化されます。このため、$InputGSSServerRun より後に設定されている補助オプションは無視されます。設定を有効にするには、すべての imgssapi 設定オプションを、$InputGSSServerRun の前に配置する必要があります。
例23.17 GSSAPI の使用
以下の設定では、ポート 1514 上の GSS サーバーが有効になります。この設定では、同一ポート上でプレーンの tcp syslog メッセージの受信も許可されます。
$ModLoad imgssapi $InputGSSServerPermitPlainTCP on $InputGSSServerRun 1514
23.6.4. RELP の使用
Reliable Event Logging Protocol (RELP) は、コンピューターネットワークにおけるデータロギング用のネットワーキングプロトコルです。信頼性のあるイベントメッセージの配信を提供するように設計されています。これは、メッセージ損失が許されない環境で便利なものです。
RELP の設定
RELP を設定するには、/etc/rsyslog.conf
ファイルを使用してサーバーとクライアントの両方を設定します。
クライアントを設定するには、以下を実行します。
必須モジュールを読み込みます。
module(load="imuxsock") module(load="omrelp") module(load="imtcp")
以下のように TCP 入力を設定します。
input(type="imtcp" port="port″)
port を、必要なポートに置き換えてリスナーを開始します。
トランスポート設定を設定します。
action(type="omrelp" target="target_IP″ port="target_port″)
target_IP と target_port をターゲットサーバーを識別する IP アドレスとポートに置き換えます。
サーバーを設定するには、以下を実行します。
モジュールの読み込みを設定します。
module(load="imuxsock") module(load="imrelp" ruleset="relp")
クライアント設定と同様の TCP 入力を設定します。
input(type="imrelp" port="target_port″)
target_port をクライアントと同じ値に置き換えます。
ルールを設定し、実行するアクションを選択します。次の例では、log_path はメッセージを保存するためのパスを指定しています。
ruleset (name="relp") { action(type="omfile" file="log_path") }
TLS を使用した RELP の設定
TLS を使用して RELP を設定するには、認証を設定する必要があります。続いて、/etc/rsyslog.conf
ファイルを使用してサーバーとクライアントの両方を設定する必要があります。
- 公開鍵、秘密鍵、証明書ファイルを作成します。手順は、「新しい鍵と証明書の生成」 を参照してください。
クライアントを設定するには、以下を実行します。
必須モジュールを読み込みます。
module(load="imuxsock") module(load="omrelp") module(load="imtcp")
以下のように TCP 入力を設定します。
input(type="imtcp" port="port″)
port を、必要なポートに置き換えてリスナーを開始します。
トランスポート設定を設定します。
action(type="omrelp" target="target_IP″ port="target_port″ tls="on" tls.caCert="path_ca.pem" tls.myCert="path_cert.pem" tls.myPrivKey="path_key.pem" tls.authmode="mode" tls.permittedpeer=["peer_name"] )
以下を置き換えます。
- target_IP と target_port を、ターゲットサーバーを識別する IP アドレスとポートにそれぞれ置き換えます。
- path_ca.pem、path_cert.pem、および path_key.pem を、証明書ファイルのパスに置き換えます。
- mode を、トランザクションの認証モードに置き換えます。"name" または "fingerprint" のいずれかを使用します。
peer_name を、許可されたピアの証明書フィンガープリントに置き換えます。これを指定した場合、
tls.permittedpeer
は、選択したピアグループへの接続を制限します。tls="on" の設定は、TLS プロトコルを有効にします。
サーバーを設定するには、以下を実行します。
モジュールの読み込みを設定します。
module(load="imuxsock") module(load="imrelp" ruleset="relp")
クライアント設定と同様の TCP 入力を設定します。
input(type="imrelp" port="target_port″ tls="on" tls.caCert="path_ca.pem" tls.myCert="path_cert.pem" tls.myPrivKey="path_key.pem" tls.authmode="name" tls.permittedpeer=["peer_name","peer_name1","peer_name2"] )
強調した値をクライアントと同じものに置き換えます。
ルールを設定し、実行するアクションを選択します。次の例では、log_path はメッセージを保存するためのパスを指定しています。
ruleset (name="relp") { action(type="omfile" file="log_path") }