Last Updated on 2021年7月4日 by かんりにん
客先にそこそこの数のルーター、スイッチ、APがあるので、syslogサーバーを立てて一括管理しておきたいのだけど、DBに放り込むほどではないのでrsyslogdでまかなうことに。
syslogファシリティだと空きが6つしかないため、なんか代わりの方法ないかといろいろ探っていたら、rsyslogのルール設定で、条件式をもとにログを振り分ける方法を発見!
Juniper4クラスタ、Cisco10台、ヤマハ4台、パナソニック6台、計24台の管理が必要だったので、ひとまず今回はこの振り分けルールで要件はクリアできそう。
- 参考:お世話になっております!
- rsyslog 公式サイト
http://www.rsyslog.com/doc/master/index.html - The Property Replacer
http://www.rsyslog.com/doc/property_replacer.html - rsyslog.conf
http://www.unix.com/man-page/All/5/rsyslog.conf/ - rsyslogを設定する
http://hp.vector.co.jp/authors/VA022911/tec/centos/rsyslog2.htm
- rsyslog 公式サイト
設定・書式
設定は/etc/rsyslog.confへ追記する形となるが、"プロパティ"、"条件式"、"設定値"で1セットになる。
- 書式
:<プロパティ名>, <条件式>, <設定値> -<出力先ファイル>
- プロパティ抜粋
受信ログの判定対象に出来るプロパティを抜粋。msg 受信するログ内のメッセージ hostname メッセージに含まれるホスト名 fromhost 送信元ホストの名称 fromhost-ip 送信元ホストのIPアドレス syslogfacility 受信するログに指定されたsyslogファシリティ
そのほか色々、多数あり!
詳しくはThe Property Replacerを参考のこと。
今回は送信元ホスト(ルータ、スイッチ)のIPアドレスを判定対称にするので
fromhost-ipを使用。
- プロパティ抜粋
- 設定例
Ciscoカタリストのログを出力する場合の書式例としては、こんな感じ。- 送信元ホストのIPアドレス(SVI)を判定
- 条件は"設定値と一致"
- 設定値は"192.168.128.254"
- 出力先は"/var/log/network/catalyst3750.log" 。
- 上記をふまえ、実際の条件式はこんな感じ。
:fromhost-ip, isequal, "192.168.128.254" -/var/log/network/catalyst3750.log
また、これだけだと指定した出力先のほか、/var/log/messagesにも出力されるため、二重の出力となってしまう。
これを避ける場合は、条件式の直下に下記のルールを追加して、messagesへの出力を抑制。
& ~
これは直前の条件に合致したログを破棄する指定。
- rsyslog.confへの設定例
# RULES1 cisco catalyst :fromhost-ip, isequal, "192.168.128.254" -/var/log/network/catalyst3750.log & ~ (実際のrsyslog.confには、これより下の行に通常のログ設定が記載される)
これでmessagesへの出力は抑制され、指定したログファイルへのみ出力が行われる。
めでたしめでたしw
ポイント&注意事項メモ
・ファシリティの設定より上位に記載すること。
rsyslog.confの中で、facilityより上位に"RULES"というコメントがあるので
その直下に書けば書式ミスは減らせる。
・出力先ファイルが存在していない場合、rsyslogdの再起動時に作成されるので
予めファイルを作成しておく必要は無し。