UbuntuではSynapticを使って、rsyslogパッケージとともに、MySQLにログを格納するためのrsyslog-mysqlパッケージをインストールすることができます(画面1)。
rsyslog-mysqlパッケージのインストールで、MySQLを設定するためのウィザードが自動的に開始されます。ウィザード(画面2)でMySQLを準備するには、リスト9のとおり、事前にMySQL側でデータベースの作成とユーザー権限の追加を行っておく必要がります。
# mysql -u root -p ←MySQLのクエリモードを開始します。 Enter password: ←MySQLの管理用パスワードを入力 ※「mysql>」プロンプトに続けて、次のようなSQLクエリを入力します (データベース「Syslog」の作成) CREATE Database Syslog; (権限の設定 ユーザー:rsyslog、パスワード:password) GRANT ALL PRIVILEGES ON Syslog.* TO rsyslog@localhost IDENTIFIED BY 'password';
設定ウィザード終了後、テーブルが作成されているか確認します。なおUbuntuのrsyslog-mysqlパッケージでは、rsyslogのMySQLに関わる追加設定は「/etc/rsyslog.d/mysql.conf」で行います。設定方法は前述の「rsyslogの準備」と同様です。
# mysql -u rsyslog -p ←MySQLのクエリモードを開始します。 Enter password: ←「password」を入力 mysql> show tables; +------------------------+ | Tables_in_Syslog | +------------------------+ | SystemEvents | | SystemEventsProperties | +------------------------+ 2 rows in set (0.00 sec)
続いて、ログをリモートサーバに転送する方法や、リモートからログを受け付ける方法を解説しましょう。rsyslogでは、シスログ転送で一般的に利用されるUDPに加え、信頼性の高いTCPを使ってログを送受信することができます。
リモートクライアントからのログをUDPで受信する場合は「imudpモジュール」を、TCPで受信する場合は「imtcpモジュール」を組み込みます。それぞれデフォルトで514番ポートが使用されますが、ほかのサービスポートを使用する場合は、「$UDPServerRun」や「$InputTCPServerRun」でポート番号を指定します。
この際、不特定ホストのログを受信しないよう「$AllowedSender」でクライアントを制限することができます。クライアントの指定には、IPアドレスやネットワークアドレス、ドメイン名、ホスト名などを用いることができます。ただし、ホスト名をFQDNで指定する際は、DNSでIPアドレスが引けるよう事前に登録しておく必要があります。rsyslog起動時にIPアドレスが引けないホスト名は、$AllowedSenderの対象から除外されるようになっています(リスト11)。
##UDPを使用する場合 $ModLoad imudp #ポート番号の指定 $UDPServerRun 514 #アクセス制限 $AllowedSender UDP, 127.0.0.1, 192.168.0.0/24, *.example.jp, host.example.jp ##TCPを利用する場合 $ModLoad imtcp #ポート番号の指定 $InputTCPServerRun 514 #アクセス制限 $AllowedSender TCP, 127.0.0.1, 192.168.0.0/24, *.example.jp, host.example.jp
ログを送信するリモートクライアントの設定はリスト12のとおりです。UDPで転送するには「@」を、TCPで転送するには「@@」を、リモートサーバのアドレスの前にそれぞれ付けます。
#UDPで送信する場合 *.* @192.168.1.10 *.* @192.168.2.20:1514 #ポート番号を指定する場合 #TCPで送信する場合 *.* @@192.168.1.10 *.* @@192.168.2.20:1514 #ポート番号を指定する場合
リモートサーバにログを送信する際、転送パフォーマンスの悪化によってログの送信漏れが発生しないよう、スプールを使用することも可能です。スプールを使用することで、サーバにログを送信する前に一時的にログを蓄えることができます。
スプールを使用する場合は、リスト13のように「$WorkDirectory」でスプールディレクトリを指定します。ここで指定するディレクトリは事前に作成しておきます。
スプールをメモリに持たずにディスクに書き出すよう設定するには、「$ActionQueueType」で「Disk」を指定します。リモートサーバとの通信が切断した場合など、ログ送信の再試行回数は「$ActionResumeRetryCount」で指定できます。デフォルトは「0」で、再試行は行いません。また「-1」を指定した場合、再試行を永久に繰り返します。
#スプールディレクトリの指定 $WorkDirectory /var/spool/rsyslog #スプール方式の指定 $ActionQueueType Disk #ログ送信の再試行回数(-1で無限に再試行を実行) $ActionResumeRetryCount 5 #スプールディレクトリに作られるキューのファイル名「例:queue.00000001」 $ActionQueueFileName queue #シャットダウン時にメモリ上のキューを保存 $ActionQueueSaveOnShutdown on
# mkdir /var/spool/rsyslog
ここで紹介した以外にも、オフピーク時にだけログを送信したり、送信サーバのダウンを検知して2番目のサーバに切り替えるといったことも可能です。そうした、より細かな設定方法については、付属ドキュメント「rsyslog_reliable_forwarding.html」や、rsyslog配布元の「Reliable Forwarding of syslog Messages with Rsyslog」に記されていますので、そちらを参考にしてください。
以上、rsyslogの活用方法をいくつか紹介しました。
ディスクへの書き出しタイミングやディスクのチューニングに関しては、第3回で紹介したsyslog-ngの方が細かな設定が可能ですが、ログの転送方式ではrsyslogの方がバリエーションに富んでいます。単にメールやデータベースにログを送信するだけでなく、文字列一致などの条件指定も可能です。さらに、セキュリティを考慮して、シスログの転送にTLSを使用することもできます。
rsyslogのさらなる活用については、次のドキュメントを参考にしてください。
rsyslogのドキュメント
http://www.rsyslog.com/doc
rsyslogの活用事例
http://wiki.rsyslog.com/index.php/Configuration_Samples
次世代シスログデーモンのインストールと活用法テーマに、6回に渡って解説してきました。シスログはインエターネット創世記から長期にわたり使用されている伝統的なプロトコルですが、syslog-ngやrsyslogのような次世代を担う新たなデーモンにより、今後もインターネットを支える重要なプロトコルとしての役割を担っていくことでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.