ログメッセージをSyslogサーバーに転送したい

投稿者: Anonymous

ログを出力するプログラムが複数あり、ログへの出力は Syslog を使っておらず普通のテキストファイルに結果を追記しています。これらのログファイルを Syslogサーバーに転送するにはどうしたら良いでしょうか。

プログラムはそれぞれ次の言語で組まれています。

  • Java
  • Perl
  • Ruby

サーバー環境は CentOS6, 7, RHEL6 が混在していて それぞれのローカルディスク上に出力しています。以下は例ですが 物理、仮想合わせて50台くらいです。

(例)

  • CentOS6: /var/log/application.log
  • CentOS7: /var/log/appname/system.log
  • RHEL6: /opt/app/logs/error.log

Syslogサーバーは RHEL6 で Syslog-ng が動いています。

追記

また、各ログファイルは出力するプログラムの書式で、エラー、デバッグ、ワーニングが出力されているので ローカルログ毎に 条件を指定できて Error, Warning, Debug, Info レベルで Syslog出力できるのが理想です。

解決

secでログファイルを読み込んで、正規表現などでフィルターして logger に渡す方法が考えられます。

[/etc/sec/application-log.rules]
type=Single
ptype=RegExp
pattern=(正規表現)
desc=application.log Error
action=pipe '$0' /bin/logger -p local1.error

type=Single
ptype=RegExp
pattern=(正規表現)
desc=application.log Warning
action=pipe '$0' /bin/logger -p local1.warning

    :

(コマンド)
    /usr/bin/sec --conf=/etc/sec/application-log.rules --input=/var/log/application.log

1行ごとに logger を実行するのは負荷が高いかもしれません。
ログレベルごとにファイルに書き出して “tail -f” + logger” と組み合わせるとか。

[/etc/sec/application-log.rules]
type=Single
ptype=RegExp
pattern=(正規表現)
desc=application.log Error
action=write /var/log/application.log.error $0

type=Single
ptype=RegExp
pattern=(正規表現)
desc=application.log Warning
action=write /var/log/application.log.warning $0
    :

(コマンド)
    /usr/bin/sec --conf=/etc/sec/application-log.rules --input=/var/log/application.log
    tail -f /var/log/application.log.error | logger -p local1.error
    tail -f /var/log/application.log.warning | logger -p local1.warning
        :
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *