「Rsyslog」の版間の差分
提供: Wikinote
細 (→アクション) |
|||
行136: | 行136: | ||
* 動的にファイル・ディレクトリを作成して出力できる。 | * 動的にファイル・ディレクトリを作成して出力できる。 | ||
− | |||
*.* -/var/log/async.log | *.* -/var/log/async.log | ||
$template DynFile,"/var/log/%HOSTNAME%/%programname%.log" | $template DynFile,"/var/log/%HOSTNAME%/%programname%.log" | ||
*.* ?DynFile | *.* ?DynFile | ||
+ | |||
+ | ==== 名前付きパイプ ==== | ||
+ | |||
+ | * 最初に "|" を付けて名前付きパイプを指定できる。 | ||
+ | * rsyslogd を起動する前に mkfifo しておかなければならない。 | ||
+ | |||
+ | *.* |/tmp/mylogpipe | ||
+ | |||
+ | ==== リモートホスト ==== | ||
+ | |||
+ | * 最初に "@" で UDP 送信、"@@" で TCP 送信 | ||
+ | * 圧縮オプション "(z[1-9])" もある | ||
+ | |||
+ | *.* @192.168.1.1:514 | ||
+ | *.* @@192.168.1.2:514 | ||
+ | |||
+ | *.* @(z9)192.168.1.3 | ||
+ | |||
+ | * sysklogd に送信する場合は、デフォルトのテンプレートだと問題があるため以下を使用する | ||
+ | |||
+ | $template sysklogd,"<%PRI%>%TIMESTAMP% %syslogtag%%msg%\"" | ||
+ | *.* @192.168.1.1;sysklogd | ||
+ | |||
+ | ==== ユーザリスト ==== | ||
+ | |||
+ | * omusrmsg ビルトインモジュールを使う | ||
+ | * "*" を指定すれば全員へ | ||
+ | |||
+ | *.crit :omusrmsg:root,hagio | ||
+ | *.emerg :omusrmsg:* | ||
+ | |||
+ | ==== 破棄 ==== | ||
+ | |||
+ | このアクションが実行されると、メッセージは破棄されてそれ以降は実行されない。 | ||
+ | |||
+ | *.* ~ | ||
+ | |||
+ | ==== シェル実行 ==== | ||
+ | |||
+ | * サブシェルでプログラムが実行される。 | ||
+ | * テンプレートで生成されたメッセージがプログラムの引き数として渡される。 | ||
+ | |||
+ | *.* ^program;template | ||
=== フォーマット === | === フォーマット === |
2013年4月24日 (水) 22:03時点における版
結構、設定がわかりにくいのであるよ。
目次
設定
CentOS 6.4 の rsyslog-5.8.10 に含まれるマニュアルを読んで調べたものだが、 すべて試したわけではないので、実際に使えるかどうかはそれぞれの環境で要確認。
モジュール
$ModLoad でモジュールを読み込む。
UDP あるいは TCP ソケットで待ち受ける
syslogd では UDP のみに対応しており -r オプションだったが、 rsyslog ではオプションではなく rsyslog.conf に記述する。
$ModLoad imudp $UDPServerRun 514 $ModLoad imtcp $InputTCPServerRun 514
基本構文
syslogd と同様に以下が基本。フィルタとアクションの区切りはスペースかタブ文字を使用できる。
フィルタ アクション
- 複数のアクションを適用する
フィルタ アクション1 & アクション2 & アクション3
- それ以降の処理をやめる (discard)
フィルタ ~
フィルタ
セレクタ
syslogd と同じ伝統的な形式。
facility.priority
- facility
- 主に:auth, authpriv, cron, daemon, kern, lpr, mail, news, syslog, user, uucp, local0 - local7
- priority
- 主に:debug, info, notice, warning, err, crit, alert, emerg
主なルール
- 指定した priority 以上のログにマッチする
- アスタリスク (*) ですべての facility あるいは priority にマッチ
- セミコロン (;) で複数のセレクタを指定可能
- none で対象 facility を除外可能
- コンマ (,) で複数の facility を指定可能
- イコール (=) で特定の priority のみにマッチ
- エクスクラメーションマーク (!) で priority 以上を無視
daemon.err # daemon の err, crit, alert, emerg にマッチ mail.* # mail のすべてのログにマッチ *.emerg # すべての emerg のログにマッチ *.* # すべてのログにマッチ daemon.warning;cron.err *.*;mail.none # mail 以外のすべてのログにマッチ uucp,news.crit # uucp と news の crit, alert, emerg にマッチ daemon.=err # daemon の err のみにマッチ daemon.notice;daemon.!err # daemon の notice と warning のみマッチ?(試してない)
プロパティベース フィルタ
rsyslogd 独自のフィルタ。
:property, [!]compare-operation, "value"
property
主なプロパティは以下。
- msg
- メッセージ本体 (MSG)
- hostname
- ホスト名
- fromhost, fromhost-ip
- メッセージを送信したホスト名 or IP アドレス
- syslogtag
- タグ部分 (TAG) (例:"kernel:", "ntpd[xxx]:")
- programname
- タグ中の名前部分 (例:"kernel", "ntpd")
- syslogfacility-text
- ファシリティ名
- syslogpriority-text
- プライオリティ名
- timegenerated
- メッセージを受信した日時
- timestamp (timereported)
- メッセージのタイムスタンプ
compare-operations
以下があるらしいが全部は試していない。
- contains
- 文字列が含まれているかどうか。ワイルドカードは使用不可。
- isequal
- exact マッチ
- startswith
- 指定した文字列から始まるかどうか。
- regex
- POSIX BRE
- ereregex
- POSIX ERE
マニュアルによると、正規表現を使わなくて良いのであればそちらの方が速い。
正規表現のサンプル:
:msg, regex, "fatal .* error"
value
- クォートされた文字列を指定する。
- エスケープシーケンス使用可 (\" でダブルクォート、\\ でバックスラッシュ)
評価式ベース フィルタ
日本語の名称は勝手に付けたものなので悪しからず。
if expr then アクション
- すべて 1 行に記載しなければならない。
- 正規表現には対応していない。
- RainerScript というもので実装されているよう。マニュアル参照。
設定例:
if $syslogfacility-text == 'local0' and $msg startswith 'DEVNAME' and not ($msg contains 'error1' or $msg contains 'error0') then /var/log/somelog
アクション
ファイル出力
- 基本的には "/" から始まる絶対パスを指定する。
- 最初に "-" を付けると sync しない。
- 動的にファイル・ディレクトリを作成して出力できる。
*.* -/var/log/async.log $template DynFile,"/var/log/%HOSTNAME%/%programname%.log" *.* ?DynFile
名前付きパイプ
- 最初に "|" を付けて名前付きパイプを指定できる。
- rsyslogd を起動する前に mkfifo しておかなければならない。
*.* |/tmp/mylogpipe
リモートホスト
- 最初に "@" で UDP 送信、"@@" で TCP 送信
- 圧縮オプション "(z[1-9])" もある
*.* @192.168.1.1:514 *.* @@192.168.1.2:514 *.* @(z9)192.168.1.3
- sysklogd に送信する場合は、デフォルトのテンプレートだと問題があるため以下を使用する
$template sysklogd,"<%PRI%>%TIMESTAMP% %syslogtag%%msg%\"" *.* @192.168.1.1;sysklogd
ユーザリスト
- omusrmsg ビルトインモジュールを使う
- "*" を指定すれば全員へ
*.crit :omusrmsg:root,hagio *.emerg :omusrmsg:*
破棄
このアクションが実行されると、メッセージは破棄されてそれ以降は実行されない。
*.* ~
シェル実行
- サブシェルでプログラムが実行される。
- テンプレートで生成されたメッセージがプログラムの引き数として渡される。
*.* ^program;template
フォーマット
- ファシリティ・プライオリティを syslogd の -SS オプションのように出力する
$template MyFormat,"%TIMESTAMP% <%syslogfacility-text%.%syslogpriority-text%> %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n" 例) Apr 19 08:04:08 <user.notice> courier hagio: test