シスログをMySQLに書き出す方法です。
今回の環境はCentOS6.4+rsyslogのVer7.2.6になり、こちらの記事のようにリポジトリを用意してある前提で話を進めます。
rsyslog-mysqlパッケージの導入
リポジトリに用意されているパッケージをインストールします。[root@cent6 ~]# yum install rsyslog-mysql
データベースの作成
インストールしたrsyslog-mysqlパッケージに、シスログをMySQLに書き出す為に必要なデータベースとテーブルを作成するSQL(青字の部分)が含まれているので、今回はそれをそのまま利用します。(2014/11/07追記:)
・SystemEventsテーブルのIDはint型で定義されていますが、受け取るログが多いと直ぐにあふれます。最初からbigint型にしておいたほうが良いと思います。
・デフォルトのMyISAMで運用していたら、比較的簡単に壊れました。最初からInnoDBにしておいたほうが無難です。
[root@cent6 ~]# rpm -ql rsyslog-mysql
/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog-mysql-7.2.6
/usr/share/doc/rsyslog-mysql-7.2.6/createDB.sql
[root@cent6 ~]#
以下のように実行(インポート)します。
※この作業で、「Syslog」データベース、その中に2つのテーブルが作成されます
[root@cent6 ~]# mysql -u root < /usr/share/doc/rsyslog-mysql-7.2.6/createDB.sql
[root@cent6 ~]# mysql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| Syslog |
| mysql |
+--------------------+
3 rows in set (0.00 sec)
mysql> use Syslog;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+------------------------+
| Tables_in_Syslog |
+------------------------+
| SystemEvents |
| SystemEventsProperties |
+------------------------+
2 rows in set (0.00 sec)
mysql>
ログ出力用ユーザの作成
rsyslogからMySQLへアクセスする為のユーザを以下のように作成します。※ここでは、ユーザ名をrsyslog、パスワードをpasswordとして作成しています
mysql> grant all privileges on Syslog.* to rsyslog@localhost identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>select host,user,password from mysql.user where user='rsyslog';
+-----------+---------+-------------------------------------------+
| host | user | password |
+-----------+---------+-------------------------------------------+
| localhost | rsyslog | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
+-----------+---------+-------------------------------------------+
1 row in set (0.00 sec)
mysql>
rsyslogの設定
/etc/rsyslog.confにMySQLにシスログを出力する為の設定(以下の2行)を追記します。※下記では、全てのログをMySQLに出力するよう設定しています
※MySQLに出力する為の書式は、:ommysql: / 接続ホスト / データベース名 / ユーザ名 / パスワード となります
module(load="ommysql")
*.* :ommysql:localhost,Syslog,rsyslog,password
設定を追加したら、rsyslogを再起動します。
動作確認
rsyslogの再起動が完了すると、MySQLにログが格納されるようになります。[root@cent6 ~]# mysql Syslog
mysql> show tables;
+------------------------+
| Tables_in_Syslog |
+------------------------+
| SystemEvents |
| SystemEventsProperties |
+------------------------+
2 rows in set (0.00 sec)
mysql> select * from SystemEvents \G
*************************** 1. row ***************************
ID: 1
CustomerID: NULL
ReceivedAt: 2013-03-17 23:34:43
DeviceReportedTime: 2013-03-17 23:34:43
Facility: 5
Priority: 6
FromHost: cent6
Message: [origin software="rsyslogd" swVersion="7.2.6" x-pid="18401" x-info="http://www.rsyslog.com"] start
NTSeverity: NULL
Importance: NULL
EventSource: NULL
EventUser: NULL
EventCategory: NULL
EventID: NULL
EventBinaryData: NULL
MaxAvailable: NULL
CurrUsage: NULL
MinUsage: NULL
MaxUsage: NULL
InfoUnitID: 1
SysLogTag: rsyslogd:
EventLogType: NULL
GenericFileName: NULL
SystemID: NULL
1 row in set (0.00 sec)
mysql>
0 件のコメント:
コメントを投稿