OSSECでPostgreSQL9.3のログ監視

OSSECでPostgreSQLのログを監視対象にしたのにアラートが上がらない場合の対処方法を記します。

バージョンは以下の通りです。

OSSEC:2.8.3
PostgreSQL:9.3
OSはUbuntu 14.04で試しています。

●原因

PostgreSQLのログ(デフォルトでは/var/log/postgresql/postgresql-9.3-main.log)を見ると

2015-09-14 13:58:58 JST LOG:  database system is ready to accept connections

OSSECのソースコード(https://github.com/ossec/ossec-hids/blob/master/src/logcollector/read_postgresql_log.c)を見てみると

 /* PostgreSQL messages have the following format:
 * [2007-08-31 19:17:32.186 ADT] 192.168.2.99:db_name
 */
 if ((str_len > 32) &&
 (str[0] == '[') &&
 (str[5] == '-') &&
 (str[8] == '-') &&
 (str[11] == ' ') &&
 (str[14] == ':') &&
 (str[17] == ':') &&
 isdigit((int)str[1]) &&
 isdigit((int)str[12])) {

PostgreSQLのデフォルトのログフォーマットは”2016-09-12 13:58:58 JST”。

一方、OSSECがPostgreSQLのログ解析対象とするフォーマットは”[2007-08-31 19:17:32.186 ADT]”。

このフォーマットが一致していないためOSSECがPostgreSQLのログとして認識できていないことが原因でした。

 

●対処

対処としては以下の3つの方法があります。

  1. PostgreSQLのログフォーマットをOSSECのログ解析フォーマットに合わせる
  2. OSSECのログ解析フォーマットをPostgreSQLのログフォーマットに合わせる
  3. PostgreSQLのログフォーマットをsyslogやapacheなどの別のログと認識させる

1.の方法の場合はPostgreSQLのログ出力フォーマットを変えるだけでできます。

2.の方法の場合はOSSECのソースコードを修正する必要があり手間が大きいかつ、OSSECがアップグレードされる度に該当部分を修正する必要がでてきます。(今後、ログ解析フォーマットが変更される可能性もあります)

3.の方法の場合はPostgreSQLのルールが適用される前に別のルールが適用されてしまうなど、設定が複雑になってしまいます。また2.と同様にアップグレードの度に設定を見直す必要が出てきます。

ということで変更が簡単かつOSSECのアップグレードに影響されない1.の方法で今回は対処したいと思います。

PosgreSQLの設定ファイル(/etc/postgresql/9.3/main/postgresql.conf)を以下のように編集し、

(変更前)log_line_prefix = '%t '
         ↓
(変更後)log_line_prefix = '[%t] %h: '

PostgreSQLの設定を再読み込みします。

$ sudo service postgresql reload

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*