| NetBSD 解説 | sysinst | pkgsrc 各論 | packages | macppc | TsubaiBSD | 絹/software/全文検索
at www.ki.nu

NetBSD 解説

Last Update: "2014/07/09 11:49:04 makoto"

記録

syslog.conf の書き方

【/etc/syslog.conf の設定】 Unix の機械では Daemon と呼ばれる様々な機能(処理)が実行されています。 それらの処理から、状態とか問題などの何かの記録を残す時の仕掛が syslog です。 その syslog 自体も daemon の一つですが、それは別として、 syslogd が、記録を残す時にまとめて面倒を見ます。この syslogd の動作については /etc/syslog.conf に設定します。

google 検索 → syslog.conf の書き方

(以下の記述は man syslog.conf を参考に書いています)
/etc/syslog.conf の 中に書く設定は 「分類しておいて、それに対して、どう記録するか」という方法です。具体的には、一行毎に 「selector(分類) → action(記録方法)」の形をしています。 そのうちの矢印の左側の selector は facility.level の形をしています。つまり syslog.conf の各行は、次のような形式です。

facility.level(TAB)表示先
(selector) (action)
左側の facility.level に一致したものが、その右側に書いてある 「表示先」に出ます。 左側には facility.level と書いてありますが、そのうち .level の部分は省略出来ます。また複数の selector を セミコロン (;) でつないで、まとめて同じ表示先に出すという書き方も可能です。 /etc/syslog.conf を見ると、(注釈でない)有効な一行目は次のように書いてあるはずです。
 *.err;kern.*;auth.notice;authpriv.none;mail.crit
      1      2           3             4
(TAB) /dev/console
(selector) (action)
ここで数字はセミコロンを数えています。 セミコロンが四つあるので、「全部で五つをまとめて、/dev/console に出すという」意味になります。

このように並べる時には、順序も重要で、後の方に書いたものが優先します。 そこで、初めに一般的なものを、後に特例 (specific) を書きます。

これらの説明は英語になりますが、man syslog.conf で見られます。

上には authprov.none という字もありますが、この .none はちょっと特殊です。 これは後の【level】で説明します。

selector と action

用語のその一として、selector と action を挙げておきます。 これは繰返しになりますが、 syslogd.conf は
selector -> action
の形式で書くということです。ここまにで出て来た二つの用語を表にまとめておきます:
用語 日本語 意味
selector 選択 syslogd.conf の左辺。facility.level のように記述
action 指示 syslogd.conf の右辺

selector の書き方

selector は、基本的には facility.level と書きます。 しかし、これに変種が沢山あります。 いろいろと条件を付けることが出来るとも言えます。この facility と level について 順に見てみます。

【facility】

selector = facility.level の左側部分の facility には
  auth authpriv cron ftp lpr mail uucp news daemon kern mark user
  local0 ... local7 
などが良く使われます。何が使われているかは、大体は決っている訳ですが、 これらは、元のプログラムに書かれているものなので、 基本的には調べる必要があります。

【level】

selector = facility.level の指定のうち、ピリオドの右側の水準(level) には次のようなものがあり、左のものほど緊急なものです。
emerg  alert  crit err  warning  notice  info  debug  
この、水準(level) の指定の意味は、 「指定されたものまたはそれ以上」 になります。上の並び方で言えば、「指定されたもの、またはその左側の全て」です。 例えば、 local0.err とすると、err 以上の emerg, alert, crit も含みます。 上に挙げた 8 項目のうち、 一番右の debug を使って
local1.debug 
とすれば、debug が一番右にあるために、それより左側の項目全てを含んでしまいます。それで 結局この場合には、これは local1 の全て、という意味になります。 このような設定とは違って、「何々以上」を指定するのではなくて、 特定のものだけを指定したい時には = を使います。
水準の指定 意味例の意味
.level level 以上 mail.errmail の err 以上を記録する
.=level level だけ kern.=debugkern の debug だけを記録する
.!=level level 以外 auth.!=emergauth 全てのうち emerg 以外を記録する
.none この facility は全て除く mail.none mail.* は除く
上の表の最後に .none という項があります。これは 特別な level として none があり、その指定があると、その機能の指定は除くという意味になります。
この「除く」機能は、一番最初の例などのように ; ; で横にいくつか並べて書く時には、 最後の方に書きます。いくつか並んだ場合には、順に読んで、最後のものが有効になります。
daemon.none;*.info
のように書くと、折角 daemon.none で除いたものが *.info で上書きされ、 daemon.info に相当するものは表示されてしまいます。(筆者は、これに 2014/07 に気が付きました ;-)

program,host

facility.level 以外にも、 上のような文のかたまりを、 program または host で指定出来ます。 どの program から受取ったものか、どの host から受取ったものかで選別します。 それらは、
#!+prog1,prog2
 !+prog1,prog2
 #+prog1,prog2
のように書きます + を付けると追加、- を付けると削除になります。 + を付けないで
#!prog1,prog2
 !prog1,prog2
と書いても同じです。 これらの文は、 これが書いてある行の以下全てに有効となります。
#!-prog1,prog2
 !-prog1,prog2
 #-prog1,prog2
これらの場合には、prog1, prog2 は除かれます。 文字列の一致規則として、例えば
!+subsys
と書いた場合に、kernel からの表示で
subsys:
という文字があれば、これも適用されます。もし
!*
は全てのプログラムという意味です。 このような行があると、 それ以下に記述した規則は全てのプログラムに適用されます。 以上に説明した方法は hostname についても同じように当てはまります。 hostname の代りに @ の字を使うと、それは localhost の意味になります。
【daemon.info だけ分けるには】
/etc/syslog.conf の 初期設定ですと、
   *.info;auth,authpriv,cron,ftp,kern,lpr,mail.none       /var/log/messages
のようになっていて、「*.info と、それの右側にある facility、ただし mail は全て除く」 ものを /var/log/message に出力するようになっています。
   dhcpd の daemon.info の場合、左端の *.info の部分に一致するので、この (selector) 
の行が生きて /var/log/messages に出力されます。 これを少し変更して、次のように分けると /var/log/daemon にだけ出るように出来ます。
   *.info;auth,authpriv,cron,ftp,kern,lpr,mail.none,daemon.none  /var/log/messages
   daemon.*                                                      /var/log/daemon

例えば、snmpd からの表示が daemon に混ってうるさいから分けたい、 というような時には、次のように書いておけば目的が果せます。

!-snmpd
daemon.*                                                /var/log/daemon
!+snmpd
daemon.*                                                /var/log/snmpd
daemon.named
named からの message を分ける例。 最初に daemon.none としておく
mail@makoto 08:00:03/231123(/etc)% rcsdiff -u syslog.conf
===================================================================
RCS file: RCS/syslog.conf,v
retrieving revision 1.1
diff -u -r1.1 syslog.conf
--- syslog.conf 2023/11/22 22:49:25     1.1
+++ syslog.conf 2023/11/22 22:59:01
@@ -1,7 +1,7 @@
 #      $NetBSD: syslog.conf,v 1.9 2004/07/23 03:45:42 mycroft Exp $
 
 *.err;kern.*;auth.notice;authpriv.none;mail.crit       /dev/console
-*.info;auth,authpriv,cron,ftp,kern,lpr,mail.none       /var/log/messages
+*.info;auth,authpriv,cron,ftp,kern,lpr,mail.none,daemon.none   /var/log/messages
 kern.debug                                             /var/log/messages
 
 # The authpriv log file should be restricted access; these
@@ -17,3 +17,7 @@
 
 *.emerg                                                        *
 #*.notice                                              root
+!-named
+daemon.*                                                /var/log/daemon
+!+named
+daemon.*                                               /var/log/named   
(syslog.conf を変更した時には、下の方の 【syslog.conf を変更した時】も見て下さい)

用語(その二)

いままでに出て来た用語をもう一度まとめて見ます。
用語 日本語 意味
program プログラム名
hostname 機械名
facility 機能 「選択」の大分類
level 水準 「選択」の小分類

特殊文字・予約語

また記号等についてまとめると次のようになります。
文字 意味
(TAB) 「選択」→「指示」の区切
; 「選択」(selector) をつなぐ
= 水準を限定する
!= それ以外の水準
@ @ だけ(自機) @機械名 (他の機械に送る)
+ 機械名、プログラム名に加える
- 機械名、プログラム名から除く
! プログラム名指定
# 通常は注釈。あるいは機械名・プログラム名指定に使う
, 「機能」 (facility)をつなぐ
* .. の全て。何でも。
. 「機能. 水準」のように「機能」と「水準」をつないで、「選択」を作る
none .. を除く

debug虫取

/etc/syslog.conf が意図通り書けているかを見る一つの方法は syslogd に -d -v を付けて 起動することです。これにより、表示画面(端末)を切離すことなく、いろいろと、こまかい 動作内容を表示しながら処理をします。

【DHCP の場合】

それで、DHCP の場合、dhcpd の方のプログラムの中で、「前節のような表示は daemon.info という selector に出る」ように書いてあり、そのことは man dhcpd にも説明されています。

別の機械に送る

action に @example.com を追加すると、別の機械の syslog に送ることも可能です。
【syslog.conf を変更した時】
  1. /var/log/daemon のように自分で出力先を 新しく設定した時には
    sudo touch /var/log/daemon 
    
    しておきま す。また
  2. /etc/syslog.conf を変更した場合には syslogd に次のようにして kill -1 を送り ます。(-1 は SIGHUP でも有効です)
    sudo kill -1  `cat /var/run/syslogd.pid` 
    
    最近なら
    sudo /etc/rc.d/syslog restart
    
    の方が簡単です。
man syslog.conf も見て下さい

参考: http://www.atmarkit.co.jp/flinux/rensai/root03/root03b.html

newsyslog

以上のようにして記録を採っていると、記録がどんどん滞って行きます。 それが溢れないように、圧縮しておき、古くなったものは捨ててくれるしくみがあります。 newsyslog がそれです。/etc/newsyslog.conf に設定し、crontab で次のように起動します。

sudo crontab -l

# rotate log files every hour, if necessary
0       *       *       *       *       /usr/bin/newsyslog

/etc/newsyslog.conf

old pkgsrc

この画面は Jeedosaquin によって表示しています。

1.66 2008/03/08