harry’s memorandum

おれおれメモ

バックエンドに Mysql を使用して rsyslog を インストール

新世代 Syslog の Syslog-ng は高性能、高機能なのですが、採用しにくい点がありました。

  • 古いsyslog.confのフォーマット互換がない
  • 商用ディストリビューションではSuSEぐらいしかリポジトリに入っていない

うれしいことに CentOS5.2 には RSyslog という次世代 Syslog が標準でリポジトリに入っていました。この RSyslog はバックエンドにMysqlなどのデータベースを使用することができるそうです。ログの監査証跡に都合がよい機能なのでインストールしてみました。

  • TCPでシスログ転送が可能
  • BackendにDatabaseの使用が可能
  • シスログの圧縮転送が可能
  • syslogd.confと互換性のある設定ファイルを使用可能

インストール

rsyslogとrsyslog-mysqlをインストールします。

# yum install rsyslog rsyslog-mysql

古いsysklogを停止してアンインストールします。

# /etc/init.d/syslog stop
# rpm -e sysklogd

自動起動するように設定して rsyslog を起動します。

# chkconfig --level 345 rsyslog on
# chkconfig --list | grep rsyslog
rsyslog         0:off   1:off   2:off   3:on    4:on    5:on    6:off
# /etc/init.d/rsyslog start

DBの設定

rsyslog-mysql に サンプルのsqlがあるのでそれを使います。何に使うか分かりませんがたくさんのフィールドがあります。*1

# locate createDB
/usr/share/doc/rsyslog-mysql-2.0.0/createDB.sql
# mysql -uroot
mysql> source /usr/share/doc/rsyslog-mysql-2.0.0/createDB.sql
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Syslog             |
| mysql              |
| test               |
+--------------------+
mysql> grant all privileges on Syslog.* to 'syslog'@'%' identified by 'password';
mysql> use Syslog;
mysql> show tables;
+------------------------+
| Tables_in_Syslog       |
+------------------------+
| SystemEvents           |
| SystemEventsProperties |
+------------------------+
2 rows in set (0.00 sec)

mysql> show fields from SystemEvents;
+--------------------+------------------+------+-----+---------+----------------+
| Field              | Type             | Null | Key | Default | Extra          |
+--------------------+------------------+------+-----+---------+----------------+
| ID                 | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| CustomerID         | bigint(20)       | YES  |     | NULL    |                |
| ReceivedAt         | datetime         | YES  |     | NULL    |                |
| DeviceReportedTime | datetime         | YES  |     | NULL    |                |
| Facility           | smallint(6)      | YES  |     | NULL    |                |
| Priority           | smallint(6)      | YES  |     | NULL    |                |
| FromHost           | varchar(60)      | YES  |     | NULL    |                |
| Message            | text             | YES  |     | NULL    |                |
| NTSeverity         | int(11)          | YES  |     | NULL    |                |
| Importance         | int(11)          | YES  |     | NULL    |                |
| EventSource        | varchar(60)      | YES  |     | NULL    |                |
| EventUser          | varchar(60)      | YES  |     | NULL    |                |
| EventCategory      | int(11)          | YES  |     | NULL    |                |
| EventID            | int(11)          | YES  |     | NULL    |                |
| EventBinaryData    | text             | YES  |     | NULL    |                |
| MaxAvailable       | int(11)          | YES  |     | NULL    |                |
| CurrUsage          | int(11)          | YES  |     | NULL    |                |
| MinUsage           | int(11)          | YES  |     | NULL    |                |
| MaxUsage           | int(11)          | YES  |     | NULL    |                |
| InfoUnitID         | int(11)          | YES  |     | NULL    |                |
| SysLogTag          | varchar(60)      | YES  |     | NULL    |                |
| EventLogType       | varchar(60)      | YES  |     | NULL    |                |
| GenericFileName    | varchar(60)      | YES  |     | NULL    |                |
| SystemID           | int(11)          | YES  |     | NULL    |                |
+--------------------+------------------+------+-----+---------+----------------+
24 rows in set (0.00 sec)

mysql> show fields from SystemEventsProperties;
+---------------+------------------+------+-----+---------+----------------+
| Field         | Type             | Null | Key | Default | Extra          |
+---------------+------------------+------+-----+---------+----------------+
| ID            | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| SystemEventID | int(11)          | YES  |     | NULL    |                |
| ParamName     | varchar(255)     | YES  |     | NULL    |                |
| ParamValue    | text             | YES  |     | NULL    |                |
+---------------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
> flush privileges;

rsyslog.confの修正

rsyslog.confを修正します。$ModLoad ommysql.so の ".so" を付け忘れないようにしてください。

# sudo vim /etc/rsyslog.conf
$ModLoad ommysql.so
*.*                     :ommysql:localhost,Syslog,syslog,password

# sudo /etc/init.d/rsyslog restart

DBにログが書き込まれていることの確認

# mysql -usyslog Syslog -p
Enter password:
mysql> show tables;
+------------------------+
| Tables_in_Syslog       |
+------------------------+
| SystemEvents           |
| SystemEventsProperties |
+------------------------+
mysql> select ReceivedAt,Message from SystemEvents;
+---------------------+-----------------------------------------------+
| ReceivedAt          | Message                                       |
+---------------------+-----------------------------------------------+
| 2009-02-17 00:01:01 |  (root) CMD (run-parts /etc/cron.hourly)      |
| 2009-02-17 00:08:01 |  (root) CMD (/usr/local/bin/ddns_reload.pl)   |
+---------------------+-----------------------------------------------+

*1:テーブルの中をみるとWindowsのイベントログで使いそうなフィールドがあるのが気になります。