FreeBSD 10 に syslog-ng を導入してみた

この記事を読むのに必要な時間は約 14 分です。


FreeBSD 10 に syslog の次世代版である syslog-ng を導入した際の作業メモです。

急ぎで作業しているため、正しくないところもあるかも知れません…。とりあえず最低限動作するかな、というレベルですが、忘れてしまわぬうちに残しておきたいと思います。


logo-FreeBSD

スポンサーリンク
スポンサーリンク

やりたいこと

syslog の集中管理を行うために、転送元による振り分けを行えるようにしたいです。

転送元は、ルーター と、無線 LAN 親機の 2台です。今のところ。今後増えるかも知れないですし、syslog 管理に慣れてみたいといった感じです。

環境

OS のバージョンは、FreeBSD 10.1-RELEASE です。

旧 syslog の問題点や、syslog-ng の利点、他選択肢となる rsyslog との違いなどは @IT にまとまっています

2008年と古めになりますが、 こちらの @IT の記事 がよくまとまっているようですので、そちらを読んでいただければ、概要が分かりやすいかと思います。

syslog-ng について

syslog-ng 公式サイト (英語) を見ると、Open Source 版と、Premium 版と、仮想VM用のアプライアンス版とがありそうです。

違いなどは見ていませんが、お金かける気もありませんので、FreeBSD の pkg で用意されているものを利用したいと思います。

とりあえずインストールしてみる

何はともあれ、pkg を探してみます。

というわけで、標準では syslog-ng-3.6.4 がインストールされるようです。インストールしてみます。

最近 update していなかったので、余計なものもついでに update されているかも知れません。

いくつかメッセージが出ています。python と openssl のメッセージは、今は関係ないのでスルーします。

syslog-ng に関して見ていきます。

syslog-ng (3.6.4) pkg インストール時のメッセージ

syslog-ng インストールしたよ!

FreeBSD 標準の syslogd ( /usr/sbin/syslogd ) を置き換えるためには、以下のステップを実施してね!

5 ステップあるようですので、順に見ていきます。

設定ファイル /usr/local/etc/syslog-ng.conf をつくってね!サンプルは /usr/local/etc/syslog-ng.conf.sample だよ!

syslog-ng v2.0.2 から配置場所が変わったから気をつけてね!前は、/usr/local/etc/syslog-ng/syslog-ng.conf だったよ!

バージョンアップした場合は、新しい場所に配置しなおしてね!

新規インストールなので、以前のことは気にせず、/usr/local/etc/syslog-ng.conf を編集すればよさそうです。

以降のステップに進む前に編集を済ませておくと良さそうです。と言いつつ、編集については、次の項で扱います。

以降のステップは、準備が完了してから実際に syslogd を止めて、syslog-ng を起動する作業になっています。

syslog-ng が起動時に自動実行されるように、/etc/rc.conf に以下を追記してね!

syslg_ng_enable=”YES”

おっしゃる通り /etc/rc.conf に追記致しましょう。

FreeBSD 標準の古い syslogd が起動時に自動実行されないように、以下を/etc/rc.conf に追記してね!

syslogd_enable=”NO”

これも言われるがままに追記致しましょう。

(多分 FreeBSD 標準の古い syslogd が稼働中だから) syslogd を以下のコマンドでシャットダウンしてね!

kill cat /var/run/syslogd.pid

多分 ステップ 3 で、syslogd を利用しないようにしたため、/etc/rc.d/syslogd が使えないので、直接 kill しているようですね。

/etc/rc.d/syslogd stop してから、ステップ 3 の追記をしても良いかと思います。実際の処理は変わらないかと思いますが。

/usr/local/etc/rc.d/syslog-ng start で syslog-ng を開始してね!

準備が終わっていれば、開始しましょう。

設定ファイルの編集

インストールすると、デフォルトで、標準の syslogd 同等の設定は済んでいるようですので、必要な分だけ追記すれば良いはずです。

改めて、今回やりたいことは以下の通りです。

ルーター (xxx.xxx.xxx.1) からのログを /var/log/router.log に振り分けたい。

無線親機 (xxx.xxx.xxx.90) からのログを /var/log/wifi.log に振り分けたい。

ルーターや無線親機は、細かい設定はできないため、旧来の syslog のように、UDP 514番ポートに syslog を垂れ流してきます。

設定の流れ

syslog-ng では、プログラムのような感じの設定になっています。

設定の流れをざっくり言えば、以下を定義します。

  • option : syslog-ng 全体の動作についての設定
  • source : ログ発生源の定義。internal、udp、tcp などなど。
  • destination : ログの出力方法の定義。ファイル、転送先、転送先プログラムなどなど。
  • filter : ログをフィルターするルール。facility、host、正規表現 などなど。
  • log : 上記 3つの組合せを定義。オプションで final、fallback など指定可能。

実際にログを出力するのは、log() の定義に従って行われ、log() の中で指定された source、filter、destination が参照されて動作する感じのイメージっぽいです。

option の指定

syslog-ng の全体的な動作を option で指定できるようです。

デフォルトは以下の通りです。

こう変えました。

先頭の 2 つを追加しています。

DNS を使わない設定と、host 名が送られてきていればそれを使う設定のようです。

source の指定

source については、デフォルトで以下が定義されています。

“source” が source の定義だよ、という合図です。”src” が 識別子 で後で参照する際に使います。

“udp()” が指定されているので、udp 514番 で転送されてきた syslog は拾ってくれそうです。しかし、他の log エントリで拾われてしまうため、転送された syslog は分けるよう、以下のように変更しました。

Destination の指定

Destination の設定では、以下の 2行を追加しました。位置は、各種 Destination の定義の最後、Filter の定義の前です。

d_remote はその他用に一応用意しておきます。

ディレクトリを掘る場合は、ディレクトリを作成しておくことをお忘れなく。

Filter の設定

Filter として以下の 2行を追加しました。位置は、各種 Filter 定義の最後、log の定義が始まる前の位置です。

ちょっとややこしくなっていますね …。not を定義したのは、router や wifi をその他用のログで再度拾わないためのものです。

もっとスマートな定義の仕方がありそうですが、とりあえずは力技です。

IP アドレスの指定方法があっているかどうか分かりません…。時間がある時に keep_hostname(no) にすれば多分 host名なしになると思うので、その設定で試してみたいところです。

log の設定

以下 2行を追加しました。位置は、log の定義が始まる前に配置しました。

filter は複数設定すると、AND 結合になります。router でも wifi でもない、remote のみ d_remote で出力という設定です。

syslog-ng 再起動

reload でも可能ですが、restart の場合、設定ファイルにエラーがあればエラー内容を教えてくれるようです。reload の場合は、/var/log/messages に Parse Error あり、と出力されるだけっぽいです。どこかに出力されているのかも知れませんが、restart であれば、直接画面で見れるので分かりやすいかと思います。

ログローテーションの設定

syslog-ng であれば、Destination の設定で日時をつけたファイル名を指定することができ、ログローテーションしなくても良いという話もあります。

しかし、圧縮したり古いものは削除したりまでは、多分面倒みてくれないでしょうから、これまで通りの newsyslog.conf への追加設定で、ログローテションは行いたいと思います。

正直合っているか分からないですが、以下 3行を /etc/newsyslog.conf の先頭に追加しました。

多分それぞれこんな感じの指定です。

  • “/var/log/xxx.log” : ファイルパス
  • “644” : 属性値
  • “7” : 世代数
  • “1024” : バイト数 (1024KB でローテーション)
  • “@T00” : 毎日 0時で強制ローテーション
  • “J” : bzip2 圧縮

ひとこと

とりあえずこんな感じで、動作してくれ始めたようです。

syslog-ng は、他にもたくさんの指定項目、指定方法があり、非常に柔軟に使えるようです。

@IT のこちらの記事 などが、結構分かりやすいかと思いますので、ご参考にどうぞ。

ドキュメントとしては、プレミアム版のドキュメントが公式サイト内 (英語) にあるようです。オープンソースでは使えない機能についてもあるかも知れませんが、共通している部分も非常に多いはずですので、参考になるかと思います。


今回は以上です。


スポンサーリンク
スポンサーリンク
  • このエントリーをはてなブックマークに追加

コメントをどうぞ

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