バックエンドに 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のイベントログで使いそうなフィールドがあるのが気になります。