#logstudy 01 rsyslog入門

88
2012-02-18 #logstudy 01 発表資料 rsyslog入門 株式会社ハートビーツ 滝澤 隆史

Upload: takashi-takizawa

Post on 24-Jun-2015

24.556 views

Category:

Technology


4 download

DESCRIPTION

#logstudy 01 rsyslog入門

TRANSCRIPT

Page 1: #logstudy 01 rsyslog入門

2012-02-18 #logstudy 01 発表資料

rsyslog入門 株式会社ハートビーツ 滝澤 隆史

Page 2: #logstudy 01 rsyslog入門

私は誰

• 氏名: 滝澤 隆史 @ttkzw

• 所属: 株式会社ハートビーツ ▫ MSPやってます

• 何やっている人 ▫ メーラMuttの国際化や日本語対応パッチ作者

▫ SpamAssassinの日本語対応パッチ作者

2

Page 3: #logstudy 01 rsyslog入門

アジェンダ

• syslogの復習

• rsyslogの概要

• rsyslogの機能

Page 4: #logstudy 01 rsyslog入門
Page 5: #logstudy 01 rsyslog入門

syslogとは

• syslogはカーネルやアプリケーションから通知されたイベント メッセージをsyslogサーバに送り、ログファイルに記録する仕組み

• sendmailのログの仕組みとしてEric Allmanがsyslogデーモンとプロトコルを作った。

• それが他のシステムでも使われて普及してデファクト スタンダードになった。

• RFC 3164 "The BSD syslog Protocol" ▫ BSD syslogの実際の動作を後追いでまとめたもの

▫ "Standard"ではなく"Infomational"

Page 6: #logstudy 01 rsyslog入門

syslogとは

syslogサーバ (collector)

装置 (device)

記録 --- -- -

ログファイル

UNIXソケットあるいはUDPで一方的に送る。 通知確認はない。

リレー (relay)

Page 7: #logstudy 01 rsyslog入門

syslogの流れ

アプリケーション

syslogサーバ

ログ ファイル

<30>Feb 18 12:34:56 hostname prog[1234]: content

Feb 18 12:34:56 hostname prog[1234]: content

*.info;mail.none;authpriv.none /var/log/messages authpriv.* /var/log/secure mail.* /var/log/maillog mail.info /var/log/mailinfo

設定ファイル /etc/syslog.conf

syslog API経由でsyslogメッセージ を出力

設定ファイルのルールに一致したファイルに記録

Page 8: #logstudy 01 rsyslog入門

FacilityとSeverity

• syslogメッセージはメッセージのPriority(優先度)を示すために、FacilityとSeverityのコードを持つ ▫ コードはヘッダファイルsyslog.hを参照。

• Facility(ファシリティ) ▫ メッセージの種類を示す。

• Severity(重大度) ▫ メッセージの重大度を示す。 ▫ OSによってはこれをPriorityと呼んでいることがある。

• syslog.conf ▫ facility.severityの形式で示す。 ▫ 例) mail.info

Page 9: #logstudy 01 rsyslog入門

Facility コード Facility 意味

0 kern カーネル メッセージ

1 user ユーザー レベル メッセージ

2 mail メール

3 daemon システム デーモン

4 auth セキュリティ/ 認証メッセージ

5 syslog syslogサーバーの 内部生成メッセージ

6 lpr ラインプリンター

7 news ネット ニューズ

8 uucp UUCP

9 cron クロック デーモン

コード Facility 意味

10 authpriv セキュリティ/認証 (プライベート)

11 ftp FTP

16 local0 ローカル利用のために予約

17 local1 ローカル利用のために予約

18 local2 ローカル利用のために予約

19 local3 ローカル利用のために予約

20 local4 ローカル利用のために予約

21 local5 ローカル利用のために予約

22 local6 ローカル利用のために予約

23 local7 ローカル利用のために予約

Page 10: #logstudy 01 rsyslog入門

Severity

コード Serverity 意味

0 emerg 致命的。システムが利用不能。

1 alert 警戒。すぐに行動しろ。

2 crit 危機的

3 err エラー

4 warning 警告

5 notice 通知

6 info 情報提供

7 debug デバッグ レベルのメッセージ。

Page 11: #logstudy 01 rsyslog入門

syslogメッセージの構造

大項目 小項目 例 説明

PRI <30> Priority(Facility, Severity)※

HEADER TIMESTAMP Feb 18 12:34:56 タイムスタンプ

HOSTNAME hostname ホスト名

MSG TAG prog プログラム名やプロセス名

CONTENT [1234]: content メッセージの内容

<30>Feb 18 12:34:56 hostname prog[1234]: content

※PRIはFacilityのコードを8倍して、Severityのコードを加えた十進数の値を<>で囲ったもの。deamon(3)とinfo(6)の場合は3×8+6で30となり、PRIの値としては"<30>"となる

Page 12: #logstudy 01 rsyslog入門

syslog.conf

• syslogdの設定ファイル

• syslogメッセージのfacilityとseverityに対応した出力先のルールを設定する。

*.info;mail.none;authpriv.none /var/log/messages authpriv.* /var/log/secure mail.* /var/log/maillog mail.info /var/log/mailinfo

Page 13: #logstudy 01 rsyslog入門

syslog.confの書き方

• ルールはセレクタとアクションから構成される。

▫ 例)mail.info /var/log/mailinfo

▫ "mail.info"がセレクタ

▫ "/var/log/mailinfo"がアクション

▫ セレクタとアクションの間はタブ文字で区切る。

• セレクタに一致したメッセージをアクションに示した出力先に出力する。

• ルールに一致したからといって、そこで評価を停止することはない。以降のルールも評価する点に注意。

• "#"で始まる行と空行は無視される。

Page 14: #logstudy 01 rsyslog入門

セレクタ

• facilityとseverityの組み合わせ

• facility.severityの形式で記述

▫ 例)mail.info facilityがmailで、severityがinfo以上のメッセージ

に一致

• severityが同じであれば、facilityはカンマ区切りで複数記述できる。

▫ 例)auth,authpriv.none

Page 15: #logstudy 01 rsyslog入門

セレクタ

• ";"に続けて複数を書くことができる。

▫ 例)auth.info;authpriv.info

Page 16: #logstudy 01 rsyslog入門

アクション

アクションの形式 アクションの内容

/var/log/filename 指定したファイル名のファイルに出力する。

|fifoname 名前付きパイプに出力する。

/dev/devicename 端末やコンソールに出力する。

@hostname 別のホストへUDPでメッセージを転送する。

username1,username2,,,, ユーザーの端末にメッセージを表示する。

* ログインしている全てのユーザーの端末にメッセージを表示する。

Page 17: #logstudy 01 rsyslog入門

従来のsyslogの問題点

• メッセージの転送に信頼性がない ▫ ネットワーク経由でメッセージを送信するときに

はUDPを利用する。

▫ UDPではパケットの再送を行わなわないため,ログメッセージを取りこぼす可能性がある。

▫ UDPであるため、送信元を詐称した偽のメッセージでも受け取ってしまう。

Page 18: #logstudy 01 rsyslog入門

従来のsyslogの問題点

• 暗号化できない ▫ メッセージは平文である。

▫ ネットワークパケットを盗聴することにより,その内容を盗み見ることが簡単にできる。

Page 19: #logstudy 01 rsyslog入門

従来のsyslogの問題点

• セレクタの制御 ▫ セレクタではFacilityとSeverityによる制御しかで

きない。

▫ アプリケーション毎や送信元のホスト名毎などによる制御はできない。

• ログのローテーション ▫ 自身ではログのローテーションができない。

Page 20: #logstudy 01 rsyslog入門

従来のsyslogの問題点

• ディスクI/Oの処理が非効率 ▫ ログファイルへの出力時にディスクに対して

fsyncして確実にディスクに書き出そうとする。

▫ ログの出力頻度が非常に多い場合には,システム全体の性能が大幅に低下する。

▫ sysklogdの拡張機能として、アクションの先頭に"-"を付けて、非同期書き込みにすることもできる。

▫ 効率的に安全にディスクに書き出す機能が無い。

Page 21: #logstudy 01 rsyslog入門

代替のsyslogデーモン

• syslog-ng ▫ 従来のsyslogサーバとの設定ファイルの互換性が

ない。

• rsyslog ▫ sysklogdからフォークしたため、syslogサーバと

の互換性をある程度維持しつつ、様々な拡張を行っている。

▫ 最新のLinuxディストリビューションの多くがrsyslogを使っている。

Page 22: #logstudy 01 rsyslog入門
Page 23: #logstudy 01 rsyslog入門

rsyslogとは

• メッセージ転送の信頼性を重視して様々な拡張を行っているオープンソースのsyslogサーバー

• メインの開発者はRainer Gerhards

• http://www.rsyslog.com/

Page 24: #logstudy 01 rsyslog入門

rsyslogの特徴

• メッセージ転送の信頼性の向上 ▫ TCP TCPによるsyslogメッセージの転送に対応 TLSによる通信路の暗号化にも対応

▫ RELP RELP(Reliable Event Logging Protocol)に対応

▫ RFC 3195 RFC 3195 "Reliable Delivery for syslog"の受信の

み対応 rawプロファイルには完全対応 COOKEDプロファイルは実験ステータス

Page 25: #logstudy 01 rsyslog入門

rsyslogの特徴

• ログファイルの扱いの改善 ▫ 2GB以上のログファイルに対応 ただし、OSの制限を超えるものではない

▫ ログのローテーションに対応 ログファイルが指定したファイルサイズになったと

きに、ログをローテーションできる

▫ 動的ファイル名に対応 出力先のファイルのファイル名を動的に生成できる

ため、日ごとにファイル名を変えることもできる。

Page 26: #logstudy 01 rsyslog入門

rsyslogの特徴

• データベースへの出力 ▫ MySQL ▫ PostgreSQL ▫ Oracle ▫ libdbi

• 多様な出力先 ▫ メール ▫ プログラムへの標準入力 ▫ SNMPトラップ ▫ HadoopのHDFS

Page 27: #logstudy 01 rsyslog入門

rsyslogの特徴

• 出力するメッセージのカスタマイズ ▫ テンプレートにより出力内容をカスタマイズでき

る。

▫ マイクロ秒の精度のタイムスタンプ。

• 柔軟なルールの記述

▫ フィルタにより、セレクタより細やかな条件を記述できる。

▫ 破棄できるアクションが追加。

Page 28: #logstudy 01 rsyslog入門

rsyslogの特徴

• プラグイン モジュールによる機能拡張 ▫ 上述の様々な機能拡張はプラグイン モジュールに

より行われている。

▫ サードパーティ製のモジュールも作成可能。

Page 29: #logstudy 01 rsyslog入門

rsyslogの歴史

• 2001年: sysklogd 1.4.1 ▫ このリリース以降はほとんど保守されなくなった。 ▫ 次のバージョン1.5.0は2007年にリリースされた。

• 2004年: ▫ Rainerがsysklogdの改良に取りかかる。 ▫ sysklogdからフォークしてrsyslogプロジェクト

となる。 ▫ 信頼できるメッセージ転送を実装し、後方互換性

を維持して、sysklogdをそのまま置き換えること目指した。

Page 30: #logstudy 01 rsyslog入門

rsyslogの歴史

• 2005年: rsyslog 1.0.0 ▫ 後方互換性を維持

▫ TCPに対応

▫ MySQLへのログ出力に対応

▫ ログファイルサイズ2GB以上に対応

Page 31: #logstudy 01 rsyslog入門

rsyslogの歴史

• 2008年: rsyslog 2.0.0 STABLE ▫ この頃から注目を集め始める

▫ フィルタ対応 従来のセレクタでは書けなかった柔軟な条件が書け

るようになった。

▫ 多様なアクションへの対応

破棄

コマンドの実行

Page 32: #logstudy 01 rsyslog入門

rsyslogの歴史

• 2008年11月: rsyslog 3.20 [v3-stable] ▫ 現在のrsyslogと同じ構造になった。 プラグイン モジュール化 プラグイン モジュールにより機能を拡張できる。

▫ 後方互換性が一部失われている。 設定ファイルの形式としてはディレクティブの記述

が必要

sysklogd由来のオプションは非推奨になった。

ただし、後方互換モードのオプションあり

rsyslogd -c0

Page 33: #logstudy 01 rsyslog入門

rsyslogの現在

• v6 ▫ rsyslog 6.3.7 (v6-devel)

▫ rsyslog 6.2.0 (v6-stable)

• v5 ▫ rsyslog 5.9.5 (v5-devel)

▫ rsyslog 5.8.7 (v5-stable)

• v4 ▫ rsyslog 4.8.0 (v4-stable)

Page 34: #logstudy 01 rsyslog入門

バージョン番号の付け方

• majar.minor.patchlevel ▫ majar 大きな変更があったときに増える

▫ minor 偶数: 安定版(stable)

奇数: 開発版(devel)

奇数: ベータ版(beta) 安定版にする前にbetaとする。

▫ patchlevel 小さな修正

Page 35: #logstudy 01 rsyslog入門
Page 36: #logstudy 01 rsyslog入門
Page 37: #logstudy 01 rsyslog入門

設定ファイル

• 設定ファイル ▫ /etc/rsyslog.conf

Page 38: #logstudy 01 rsyslog入門

設定ファイルの構成

• 設定ファイルの構成 ▫ グローバル ディレクティブ

▫ テンプレート

▫ アウトプット チャネル

▫ ルール

• 設定ファイル上の行から順番に評価される点に注意 ▫ つまり、順番が意味を持つ

Page 39: #logstudy 01 rsyslog入門

設定ファイルの挿入

• $IncludeConfigディレクティブにより別の設定ファイルの内容を読み込んでその位置に挿入する。

• 利用目的の例 ▫ ソフトウェア毎に設定ファイルを用意する。

• 記述方法 ▫ $IncludeConfig ファイル名 ▫ 例) $IncludeConfig /etc/rsyslog.d/*.conf /etc/rsyslog.d/*.confファイルを読み込む

Page 40: #logstudy 01 rsyslog入門

設定ファイルの例(RHEL 6)

$ModLoad imuxsock.so $ModLoad imklog.so $ModLoad imudp.so $UDPServerRun 514 $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat *.info;mail.none;authpriv.none;cron.none /var/log/messages authpriv.* /var/log/secure mail.* -/var/log/maillog cron.* /var/log/cron *.emerg * uucp,news.crit /var/log/spooler local7.* /var/log/boot.log

モジュールのロード

ディレクティブ

ルール

/etc/rsyslog.conf

Page 41: #logstudy 01 rsyslog入門

設定ファイルの例(Ubuntu 11.10)

$ModLoad imuxsock $ModLoad imklog $ModLoad imudp $UDPServerRun 514 $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat $RepeatedMsgReduction on $FileOwner syslog $FileGroup adm $FileCreateMode 0640 $DirCreateMode 0755 $Umask 0022 $PrivDropToUser syslog $PrivDropToGroup syslog $IncludeConfig /etc/rsyslog.d/*.conf

モジュールのロード

ディレクティブ

/etc/rsyslog.conf

Page 42: #logstudy 01 rsyslog入門

設定ファイルの例(Ubuntu 11.10)

auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog cron.* /var/log/cron.log daemon.* -/var/log/daemon.log kern.* -/var/log/kern.log mail.* -/var/log/mail.log mail.err /var/log/mail.err *.emerg * daemon.*;mail.*;¥ news.err;¥ *.=debug;*.=info;¥ *.=notice;*.=warn |/dev/xconsole

ルール

/etc/rsyslog.d/50-default.conf

Page 43: #logstudy 01 rsyslog入門
Page 44: #logstudy 01 rsyslog入門

グローバル ディレクティブ

• rsyslogの動作に影響を与える設定を記述する

• 記述の形式 ▫ 「ディレクティブ 設定値」

▫ 例) $ModLoad imudp.so

imudpモジュールをロードする。

Page 45: #logstudy 01 rsyslog入門

モジュールのロード

• $ModLoad モジュールのファイル名 ▫ モジュールをロードし、その機能を有効にする。

• 例) ▫ $ModLoad imuxsock.so UNIXドメインソケットでのメッセージ受信の機能

を有効にする。

▫ $ModLoad imklog.so カーネルロギングの機能を有効にする。

▫ $ModLoad immark.so "--MARK--"メッセージの出力機能を有効にする。

Page 46: #logstudy 01 rsyslog入門

モジュールのロード

• モジュール特有のディレクティブはモジュールをロードした後の行に記述する。

• 例1) ▫ $ModLoad imudp.so UDPでのメッセージ受信の機能を有効にする。

▫ $UDPServerRun 514 UDPのポート番号を指定する。

• 例2) ▫ $ModLoad imtcp.so TCPでのメッセージ受信の機能を有効にする。

▫ $InputTCPServerRun 514 TCPのポート番号を指定する。

Page 47: #logstudy 01 rsyslog入門
Page 48: #logstudy 01 rsyslog入門

テンプレート

• 定義したテンプレートをアクションに割り当てることにより、出力するメッセージの形式を制御できる。

• テンプレートの定義 ▫ $template テンプレート名,テンプレートの形式

• テンプレートの適応方法 ▫ セレクタ アクション;テンプレート名

Page 49: #logstudy 01 rsyslog入門

テンプレート

• テンプレートの定義例 ▫ $template TraditionalFormat, "%TIMESTAMP% %HOSTNAME% %syslogtag%%msg%¥n" %で囲まれた文字列はプロパティであり、syslog

メッセージの情報に置き換えられる。 %TIMESTAMP% → タイムスタンプ %HOSTNAME% → ホスト名 %syslogtag% → タグ %msg% → メッセージ

• テンプレートの利用例 ▫ *.* /var/log/trad.log;TraditionalFormat

Page 50: #logstudy 01 rsyslog入門

テンプレートと動的ファイル名

• 出力先のファイル名をテンプレートで定義することで動的なファイル名のファイルにメッセージを出力する

• テンプレートの適応方法 ▫ アクションに「?テンプレート名」を記述

• テンプレートの定義例

▫ $template DynFile,"/var/log/hosts/%HOSTNAME%.log"

• テンプレートの利用例

▫ *.* ?DynFile

Page 51: #logstudy 01 rsyslog入門

参考)プロパティ

• プロパティへのアクセス方法 ▫ %propname:fromChar:toChar:options% propnameはプロパティ名

fromCharとtoCharは対象の文字列の範囲を示す。省略時は全て。

optionsはオプション

Page 52: #logstudy 01 rsyslog入門

参考)プロパティ

プロパティ 説明

msg syslogメッセージ内の内容部

hostname syslogメッセージ内のホスト名

syslogtag syslogメッセージ内のタグ

programname syslogメッセージ内のタグ(タグがprog[1234]のときはprog)。BSD syslogでの本来のタグ。

pri-text PRI部のテキスト表現(facility.severity)

syslogfacility-text facilityのテキスト表現

syslogseverity-text severityのテキスト表現

timegenerated syslogメッセージの受信日時。高精度。

timereported, timestamp

syslogメッセージ内のタイムスタンプ。

Page 53: #logstudy 01 rsyslog入門

復習)syslogメッセージの構造

大項目 小項目 例 説明

PRI <30> Priority(Facility, Severity)※

HEADER TIMESTAMP Feb 18 12:34:56 タイムスタンプ

HOSTNAME hostname ホスト名

MSG TAG prog プログラム名やプロセス名

CONTENT [1234]: content メッセージの内容

<30>Feb 18 12:34:56 hostname prog[1234]: content

※PRIはFacilityのコードを8倍して、Severityのコードを加えた十進数の値を<>で囲ったもの。deamon(3)とinfo(6)の場合は3×8+6で30となり、PRIの値としては"<30>"となる

Page 54: #logstudy 01 rsyslog入門

参考)プロパティのオプション

オプション 説明

drop-last-if メッセージの最後のLFを落とす。

date-mysql mysqlの日時の形式

date-rfc3164 古典的なsyslogの日時の形式 例)Jan 1 12:34:56

date-rfc3339 RFC 3339の日時の形式。高精度。 例)2012-01-23T12:34:56.123456+09:00

secpath-drop スラッシュ"/"を落とす。動的ファイル名に用いる。

sedpath-replace スラッシュ"/"を"_"に置換。動的ファイル名に用いる。

Page 55: #logstudy 01 rsyslog入門

参考)タイムスタンプ • タイムスタンプの形式

▫ RFC3164で定義されたタイプスタンプ Jan 1 12:34:56 syslogの形式 テンプレートのプロパティのオプション"date-rfc3164"

▫ 高精度のRFC3339形式のタイムスタンプ 2012-01-23T12:34:56.123456+09:00 rsyslogのデフォルト テンプレートのプロパティのオプション" date-rfc3339"

• タイムスタンプには2種類ある ▫ syslogメッセージ内のタイムスタンプ テンプレートのプロパティの"%timereported%"

<30>Feb 18 12:34:56 hostname prog[1234]: content

▫ syslogメッセージを受信した日時 テンプレートのプロパティの"%timegenerated%"

Page 56: #logstudy 01 rsyslog入門

参考)タイムスタンプ

• テンプレートで定義

• デフォルトのテンプレートの変更 ▫ $ActionFileDefaultTemplateディレクティブでデ

フォルトのテンプレートを設定できる。

▫ 古い形式に戻す例

$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

Page 57: #logstudy 01 rsyslog入門
Page 58: #logstudy 01 rsyslog入門

アウトプット チャネル

• アクションに対して様々な処理を行うことを目指した機能。

• 現状ではファイルとファイルの最大サイズに対する処理しかできない。

• 例)ログのローテーション ▫ アウトプット チャネルの定義 $outchannel log_rotation,/var/log/foo.log, 10000000,/home/me/./log_rotation_script

▫ ルールの記述 *.* :omfile:$log_rotation

▫ スクリプト: /home/me/log_rotation_script mv -f /var/log/foo.log /var/log/foo.log.1

Page 59: #logstudy 01 rsyslog入門
Page 60: #logstudy 01 rsyslog入門

sysklogd由来の拡張機能

• rsyslogはsysklogdをフォークしているのでsysklogd由来の拡張機能はそのまま使える。

Page 61: #logstudy 01 rsyslog入門

ルール

• 行末にバックスラッシュ"\"を記述すると複数行に分けて記述できる。 ▫ 例) *.=info;*.=notice;*.=warn;¥ auth,authpriv.none;¥ cron,daemon.none;¥ mail,news.none -/var/log/messages

• セレクタとアクションの間の区切り文字にはタブ文字とスペースが使える。

Page 62: #logstudy 01 rsyslog入門

セレクタ

• facilityに"*"を記述すると全てのfacilityに一致する

• severityに"none"を記述するとそのfacilityに一致しない。

• セレクタ内で右側に記述したものは左側を上書きする

▫ 例)*.info;mail.none;authpriv.none

▫ severityがinfoのメッセージ。

▫ ただし、facilityがmailとauthprivのものを除く。

Page 63: #logstudy 01 rsyslog入門

セレクタ

• facility.=severityの形式で、severityに等しいメッセージのみに対してアクションを実施できる。

• facility.!severityあるいはfacility.!=severityの形式で否定の意味を持つ。

Page 64: #logstudy 01 rsyslog入門

アクション

• ファイル名の先頭に"-"を付けると非同期書き込みになる。

• 例)

▫ mail.* -/var/log/maillog

Page 65: #logstudy 01 rsyslog入門
Page 66: #logstudy 01 rsyslog入門

フィルタ

• セレクターの代わりに、フィルタという機能が使える。

• メッセージが指定した条件に一致したときに、アクションを実行する

• フィルタの種類 ▫ プロパティ ベース フィルタ

▫ 式ベース フィルタ

Page 67: #logstudy 01 rsyslog入門

プロパティ ベース フィルタ

• プロパティが条件に一致するかで判断する

• 記述形式

▫ :property, [!]compare-operation, "value" property テンプレートのときに説明したプロパティ

compare-operation 比較演算子

"value" 比較対象の値

「"」は「¥"」に、「¥」は「¥¥」にエスケープする。

Page 68: #logstudy 01 rsyslog入門

プロパティ ベース フィルタ - プロパティ - プロパティ 説明

msg syslogメッセージ内の内容部

hostname syslogメッセージ内のホスト名

syslogtag syslogメッセージ内のタグ

programname syslogメッセージ内のタグ(タグがprog[1234]のときはprog)。BSD syslogでの本来のタグ。

pri-text PRI部のテキスト表現(facility.severity)

syslogfacility-text facilityのテキスト表現

syslogseverity-text severityのテキスト表現

timegenerated syslogメッセージの受信日時。高精度。

timereported, timestamp

syslogメッセージ内のタイムスタンプ。

Page 69: #logstudy 01 rsyslog入門

プロパティ ベース フィルタ - 比較演算子 - 比較演算子 説明

contains プロパティに値が含まれているか確認する。

isempty プロパティが空であるか確認する。

isequal プロパティが値に等しいかを比較する。

startswith プロパティが値で始まっているか確認する。

regex POSIX BRE正規表現に対して比較する。

ereregex POSIX ERE正規表現に対して比較する。

! 演算子の前につけて否定を意味する。

Page 70: #logstudy 01 rsyslog入門

プロパティ ベース フィルタの例

• "error"という文字列を含んでいるsyslogメッセージをerror.logに出力する。 ▫ :msg, contains, "error" /var/log/error.log

Page 71: #logstudy 01 rsyslog入門

式ベース フィルタ

• 複雑な条件式を記述できる。 ▫ RainerScript http://www.rsyslog.com/doc/rainerscript.html

• 記述形式 ▫ if expr then if フィルタの開始

expr 条件式

then フィルタの終わり thenの後にアクションを記述する。

Page 72: #logstudy 01 rsyslog入門

式ベース フィルタの条件式

• 条件式 ▫ 括弧"()"内の式

▫ not, unary minus

▫ *, /, % (剰余)

▫ +, -, & (文字の結合)

▫ ==, !=, <>, <, >, <=, >=, contains (strings!), startswith (strings!)

▫ and

▫ or

Page 73: #logstudy 01 rsyslog入門

式ベース フィルタの関数

• 関数 ▫ getenv(str) 文字列の環境変数を返す。

▫ strlen(str) 文字列の長さを返す。

▫ tolower(str)

文字列を小文字に変換して返す。

Page 74: #logstudy 01 rsyslog入門

式ベース フィルタの例

• "error"という文字列を含んでいるsyslogメッセージをerror.logに出力する。 ▫ if $msg contains 'error' then /var/log/error.log

Page 75: #logstudy 01 rsyslog入門
Page 76: #logstudy 01 rsyslog入門

アクション(従来)

アクションの形式 アクションの内容

/var/log/filename 指定したファイル名のファイルに出力する。

|fifoname 名前付きパイプに出力する。

/dev/devicename 端末やコンソールに出力する。

@hostname 別のホストへUDPでメッセージを転送する。

username1,username2,,, ユーザーの端末にメッセージを表示する。

* ログインしている全てのユーザーの端末にメッセージを表示する。

Page 77: #logstudy 01 rsyslog入門

アクション

アクションの形式 アクションの内容

@@hostname 別のホストへTCPでメッセージを転送する。

:modname:params 出力モジュールにメッセージを出力する。

>dbhost,dbname,dbuser, dbpassword データベースにメッセージを出力する。

~ メッセージを破棄する。

$channelname 出力チャネルにメッセージを出力する。

?filename 動的なファイル名のファイルに出力する。

^program_filename サブシェルでプログラムを実行する。

Page 78: #logstudy 01 rsyslog入門

アクション

• IPv6対応 ▫ @[2001:db8:dead:beef::14]

▫ @@[2001:db8:dead:beef::14]

• ポート番号 ▫ @192.0.2.1:10514

▫ @@192.0.2.1:10514

▫ @[2001:db8:dead:beef::14]:10514

▫ @@[2001:db8:dead:beef::14]:10514

Page 79: #logstudy 01 rsyslog入門

アクション

• テンプレート ▫ アクションに「;テンプレート名」を付けると、

メッセージの出力にテンプレートが適応される。

▫ 例) :ommysql:dbhost,dbname,user,password;dbtemplate

Page 80: #logstudy 01 rsyslog入門
Page 81: #logstudy 01 rsyslog入門

TCPとキューイング

• TCPでsyslogメッセージを転送すると、TCPであるため、転送先のsyslogサーバのダウンを検知できる。

• 転送先のサーバがダウンしたら、キューイングして、復活したら再送する。

• 下記はRHEL6のrsyslog.confの例

$WorkDirectory /var/spool/rsyslog # where to place spool files $ActionQueueFileName fwdRule1 # unique name prefix for spool files $ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) $ActionQueueSaveOnShutdown on # save messages to disk on shutdown $ActionQueueType LinkedList # run asynchronously $ActionResumeRetryCount -1 # infinite retries if host is down *.* @@remote-host:514

Page 82: #logstudy 01 rsyslog入門
Page 83: #logstudy 01 rsyslog入門

プラグイン モジュール

• プラグイン モジュールにより機能を拡張できる。

• パッケージシステムからrsyslogをインストールしたときには、全てのモジュールが提供されているわけではない点に注意。

• 入力系のインプット モジュールと出力系のアウトプット モジュールをここで紹介する。

Page 84: #logstudy 01 rsyslog入門

インプット モジュール

モジュール 説明 バージョン

imfile テキストファイルをsyslogメッセージに変換する。

imrelp RELPによるsyslogメッセージを受信する。

imudp UDPでsyslogメッセージを受信する。

imtcp TCPでsyslogメッセージを受信する。

imptcp plain TCP syslog経由でsyslogメッセージを受信する。

4.7.3, 5.5.8

imgssapi Kerberos 5の暗号化と認証を使った保護されたネットワークでsyslogメッセージを受信する。

Page 85: #logstudy 01 rsyslog入門

インプット モジュール

モジュール 説明 バージョン

immark マークメッセージ「--MARK--」を出力する。

imklog カーネルログからメッセージを読む。

imuxsock UNIXソケットでsyslogメッセージを受信する。

im3195 RFC 3195によるsyslogメッセージを受信する。

impstats rsyslogの内部カウンタの定期的な統計情報を提供する。

5.7.0, 6.1.1

Page 86: #logstudy 01 rsyslog入門

アウトプット モジュール

モジュール 説明 バージョン

omsnmp SNMPトラップとしてsyslogメッセージを送信する。

omstdout 標準出力にメッセージを出力する。 4.1.6

omrelp 信頼性のあるRELPプロトコルによるsyslogメッセージを送信する。

omruleset 別のルールセットにメッセージをフォワードする。 5.3.4

omgssapi Kerberos 5の暗号化と認証を使った保護されたネットワークでsyslogメッセージを受信する。

ommysql MySQLのデータベースに出力する。

ompgsql PostgreSQLのデータベースに出力する。

omlibdbi libdbi経由でデータベースに出力する。

Page 87: #logstudy 01 rsyslog入門

アウトプット モジュール

モジュール 説明 バージョン

ommail メール経由でsyslogメッセージを送信する。 3.17.0

omprog プログラムの標準入力にメッセージを出力する。 4.3.0

omoracle Oracleのデータベースに出力する。 4.3.0

omudpspoof 偽装した送信アドレスでUDPでメッセージを送信する。

5.1.3

omuxsock UNIXドメインソケットにメッセージを出力する。 4.7.3, 5.5.7

omhdfs HadoopのHDFS上のファイルにメッセージを出力する。

5.7.1

Page 88: #logstudy 01 rsyslog入門

まとめ

• rsyslogを使わない理由はない