2013年3月17日日曜日

rsyslog + MySQL

2014/11/07追記: ”データベースの作成の箇所”に赤字でコメントを追加


シスログを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 件のコメント:

コメントを投稿