複数台のLINUXサーバーがあるので、ログの収集、監査に都合がいいなと思い導入した時の覚書。
CentOS6からrsyslogが採用されているようなので、後はrsyslog-mysqlを追加すれば良さそう。
# yum install rsyslog-mysql
上記でうまく行くのだが、DBサーバーなどすでにMysqlが入っている場合、今回は5.6だったためだと思うが、
依存でmysql-libsが入り、そしてそれが競合しまくってインストールできないことがある。
その場合は、rpmでrsyslog-mysqlを単独でインストールすれば出来そう。
また、mysql-libが無い場合や、使いたくない場合などはmysql-shared-compatで代用できるみたい。
今回はすでにmysql5.6が入っているDBサーバーに適用した記録。
・mysql-shared-compatとrsyslog-mysqlのインストール
# rpm -ivh MySQL-shared-compat-5.6.10-1.linux_glibc2.5.x86_64.rpm
# yum install yum-utils
# yumdownloader rsyslog-mysql
# rpm -ivh rsyslog-mysql-5.8.10-2.el6.x86_64.rpm
・DB作成
# mysql -u root -p < /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql
・ユーザー作成
mysql> GRANT ALL PRIVILEGES ON Syslog.* TO rsyslog@localhost IDENTIFIED BY 'hogehoge';
・rsyslogの設定
# vi /etc/rsyslog.conf
#$ModLoad immark.so # provides --MARK-- message capability の下に追記。
$ModLoad ommysql.so
*.* :ommysql:localhost,Syslog,rsyslog,password
(ファシリティ.プライオリティ :ommysql:ホスト,DB,ユーザ,パスワード)
・サービス再起動
# service rsyslog restart
上記の流れでDBに記録されることが確認できた。
ただ、デフォルトのテーブルはフィールドがやたらと多くNULLばっかりなんで必要な項目だけにカスタマイズする。
以下のフィールドで構成してみる。
CREATE TABLE SystemEventsCustom
(
ID INT UNSIGNED NOT NULL,
GeneratedTime DATETIME,
Facility SMALLINT,
Priority SMALLINT,
FacilityName VARCHAR(255),
PriorityName VARCHAR(255),
ProgramName VARCHAR(255),
FromHost VARCHAR(60),
Message TEXT,
CONSTRAINT PRIMARY KEY (ID)
);
rsyslogの設定を以下に変更。記録するのもプライオリティがerrレベル以上にする。
$ModLoad ommysql.so
$template mysqlCustom,"insert into SystemEventsCustom (GeneratedTime, Facility, Priority, FacilityName, PriorityName, ProgramName, FromHost, Message) values ('%timegenerated:::date-mysql%', %syslogfacility%, %syslogpriority%, '%syslogfacility-text%', '%syslogpriority-text%', '%programname%', '192.168.0.121', '%msg%')",SQL
*.err :ommysql:localhost,Syslog,rsyslog,password;mysqlCustom
※インサート文にIPアドレスを直接記述してるが、当初は%fromhost-ip%で行なっていたが、意図したものが取得できなかった。hostsとかサーバー側の設定の問題かもしれないが今回は手抜きです^^;
プロパティ一覧
http://www.rsyslog.com/doc/property_replacer.html
こんな感じでDBにログの収集が出来ましたー。