syslogとはシステムから出てくるアラートなどの情報をネットワークで転送したり、ログとしてファイル保存していく仕組みのことだ。
Linuxではsyslogデーモン(守護神=常に動いていて必要なときに働いてくれるもの)によってログが記録されている。
このページではsyslogとその設定方法について詳しく説明した。参考にしてほしい。
目次
syslogとは?
syslogとは上でお伝えした通り、システムからのメッセージをファイル保存していく仕組みのことだ。
Linuxではsyslogデーモンによって「ログ」が記録されている。ログとは簡潔にいえば「システムの活動記録」である。ログには「いつなにがおこったか?」が淡々と記述されていく。
各デーモンのログは独自、もしくはsyslogデーモンに統治されている。一見地味であり、クライアントマシンでは軽視されがちだが、サーバ管理の上では非常に重要だ。(本当に)
Linuxサーバをいじることになれば、しょっちゅうログを確認することになるだろう。ログを把握しておくことで、システムの異常にすばやく反応することが出来る。外部、若しくは内部からの攻撃、 その予兆にいち早く気がつける。
そのため、システムのどこにログが残されるのか?日常ではどのようなログが残るのか?そういった日常動作を把握しておこう。
Linuxではsyslogデーモンの選択肢は複数あるが、メジャーなものをとりあげると「rsyslog」が代表的だろう。
ただし一部の先進的なディストリビューションではログを「jounrald」で管理していることがある。このページではCentOS7を取り上げる。CentOS7では現状rsyslogがインストールされ稼働するようになっている。
デフォルトではどこにどのようなログがのこるのか?
基本的に「/var/log」の下にログがのこされることがほとんどだ。
なお、セキュリティの関係上ログはroot権限でないと読み込めないことが多い。
また決して手動で書き込みをしてはいけないことに気をつけよう。以下、多くのシステムではデフォルトで存在するログファイルだ。
- cron 定期実行にcron系を採用している場合に作成される
- messages デフォルトでは多くのメッセージがここに記録される
- maillog システム上のメールに関しての記述がここで記述される。
- secure セキュリティに関する情報がここに記録される。「us」やログイン情報など
長く稼動しているシステムだと日付のついたログファイルがあると思うが、これはローテーション時に作成されるものだ。ことによりけり、圧縮されているファイルもあるだろう。他にもいろいろなファイルが存在すると思うが、これらはシステムの設定によってかわってくる。
syslog設定ファイルをひもといてゆく
設定ファイルの場所
設定ファイルは「/etc/syslog.conf」もしくは「/etc/rsyslog.conf」となっている
#で始まる行はコメントである。
rsyslogはモジュールで拡張が可能となっている。書式は
$ModLoad <モジュールの名前>
となっている。たとえば
$ModLoad imjournal
などだ。
これはimjournalモジュールを使って、journaldからメッセージを受け取るためのモジュールだ。ほかモジュールはこちらに一覧がある。
http://www.rsyslog.com/doc/v8-stable/configuration/modules/index.html
- omから始まるモジュールはアウトプットモジュール
- im から始まるのがインプットモジュール
- pm から始まるのがパーサモジュール
- mm から始まるのがメッセージ修正モジュール
- sm から始まるのがメッセージ生成モジュール
- その他ライブラリモジュール
となっている。
記述のルール
最も注目しなければならないのは全体の記述ルールだろう。書式は
<ファシリティ>.<プライオリティ> 出力先
となっている。ぱっとイメージしにくいので設定例をあげてみる。
cron.* /var/log/cron
この設定ではファシリティはcron、プライオリティは全てに関して、出力先は「/var/log/cron」
となっている「*」を使用すると「全て」を指定できる
*.info;mail.none;authpriv.none;cron.none /var/log/messages
ほか「;」でくぎると複数のファシリティとプライオリティのセットが指定可能となっている。なおプライオリティに「none」を指定すると、そのファシリティは無効あつかいされる。
つまり、今回の場合、拒否指定しているファシリティ以外のプライオリティ「info」をすべて「/var/log/messages」に書き出せという意味になる。
なお設定は上から順に処理されるようになっている
1 2 3 |
cron.* /var/log/cron cron.* * |
とすればファイルにログを記述したあと、すべての端末にもログを表示できる。
主なファシリティ
ファシリティとは、メッセージの出力元のことだ。次のようなところが出力元となって、それぞれ選択することができる。
- auth,authpriv 認証系(usなど)
- cron cronからのメッセージ
- daemon daemonからのメッセージ
- kern カーネルからのメッセージ
- lpr プリンタ、印刷関係のメッセージ
- mail システムメール関係のメッセージ
- syslog syslogの機能関係のメッセージ
- local0~7 独自設定
プライオリティ
プライオリティはそのまま優先度だ。
基本的にプライオリティをさげるほど記録されるメッセージは増大する。プライオリティを高い順に下に列挙しておく。
- emerg 致命的状態
- alert 早急な対処が必要
- crit 危険な状態
- err 一般的エラー
- warning 一般的警告
- notice 重要な通知
- info システムからの情報
- debug デバッグ情報
- none ファシリティの無効化 ログの除外
出力先
出力先は基本的にファイルの場合が多いが、リモートホストの指定も可能となっている、ログ専用サーバをたてるときなどに使用する。
- ファイル名 ファイルに出力
- @ホスト名 リモートホストのsyslogデーモンへ出力する。
- ユーザ名 ユーザの端末に出力する。
- /dev/console コンソールへ出力する。
- * 全てにユーザ端末へ出力する。
設定を終えたら
# systemctl restart rsyslog
としてサービスを再起動すること。
loggerコマンドに関して
loggerコマンドを使用すると任意のログメッセージを生成できる。設定の確認をする段階でやくに立つので活用しよう。
書式は、
logger -p <ファシリティ>.<プライオリティ> -t <タグ> メッセージ
となっている。実際に使用してみると
$ logger -p syslog.info -t TEST "loggingTEST"
となる今回の場合「/var/log/messages」にログがのこるはずなので確認してみよう。今回は「tail」コマンドを「-f」オプションを指定してログを閲覧している。
ログのローテーション
ログは放置していると溜る一方なので、ある程度以上溜ると管理しきれなくなってしまう。なので一定期間で世代管理して世代の古いものは、破棄するようにするのが一般的である。
世代の区切りや、破棄の頻度は各々の環境の規模にあわせて管理しよう。ローテーション機能はlogrotateコマンドをcronで定期実行することで実現されている。
設定ファイルは全体設定は「/etc/logrotate.conf」ファイルに記述されている。個別の設定は「/etc/logrotate.d」の下に保存されている。以下設定例をあげてみる。
vi /etc/logrotate.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# ローテーション周期を1週間ごとに weekly # 4世代ログをのこす rotate 4 # ローテーション後に空のファイルを作成する create # ログファイルのサフィックス指定、この場合は日付がスタンプされる。 dateext # ほか各設定ファイルをインクルード、書式はwtmpと同じである。 include /etc/logrotate.d # /var/log/wtmpファイル設定 /var/log/wtmp { monthly create 0664 root utmp rotate 1 } |
そのほか、
# cat /var/lib/logrotate.status
にログローテーションの現状が記録される。
まとめ
このページではsyslogの中身と、設定方法についておおよそまとめてお伝えした。大体の内容は把握いただけただろうか?
無尽蔵にとって置くわけにはいかないため、どういったものをどれだけ記録しておくかは、サーバエンジニアの腕の見せ所でもある。経験値も必要になってくるし、要件にもよってくる。考えながら、設定をし、経験を積んでいただければと思う。
コメント