ログの関係

kenji148.hatenablog.com

cronで欲しいシェル等を実行して処理される動きを見た。
httpdとかネットワークとかも起動時にcronを通し、プログラムが起動する。
ログ関連もcronを通して収集が可能となる。

途中で出てきたよくわからない用語、コマンド
デーモン:
systemctl:

rsyslogより、syslogの方が情報が多い。

そもそもsyslogにはなにが記載されているのか。
ログの記載方法が全部乗っているということか?

(ポイント)
そもそもログだが、デーモンが何かを吐き出すための手法らしい。
それがsyslogであり、ログローテーションにつながる。

(デーモン)
・長時間動作する
・バッググラウンドで動作し、制御端末を持たない。

(デーモンの発生のさせ方)   initが始祖。

(syslog)
デーモンからのログ出力

(logrotate)
デーモンのログファイルのローテーション処理を自動化した処理。

以下が初心者でも参考になりそうである。
eng-entrance.com

以下はsyslog記載内容である。

$ModLoad imjournal
これはimjournalモジュールを使って、journaldからメッセージを受け取るためのモジュールだ。ほかモジュールはこちらに一覧がある。
→意味不明。初心者用の記述ではない。いきなりすぎ。

記述のルール
<ファシリティ>.<プライオリティ> 出力先

cron.* /var/log/cron

この設定ではファシリティはcron、
プライオリティは全てに関して、出力先は「/var/log/cron」 となっている
「*」を使用すると「全て」を指定できる

*.info;mail.none;authpriv.none;cron.none /var/log/messages

ほか「;」でくぎると複数のファシリティとプライオリティのセットが指定可能となっている。なおプライオリティに「none」を指定すると、そのファシリティは無効あつかいされる。

つまり、今回の場合、拒否指定しているファシリティ以外のプライオリティ「info」をすべて「/var/log/messages」に書き出せという意味になる。

なお設定は上から順に処理されるようになっている

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コマンド
使用すると任意のログメッセージを生成できる。設定の確認をする段階でやくに立つので活用しよう。
略→今後取り組む

ログのローテーション ログは放置していると溜る一方なので、ある程度以上溜ると管理しきれなくなってしまう。
なので一定期間で世代管理して世代の古いものは、破棄するようにするのが一般的である。

世代の区切りや、破棄の頻度は各々の環境の規模にあわせて管理しよう。ローテーション機能はlogrotateコマンドをcronで定期実行することで実現されている。

設定ファイルは全体設定は「/etc/logrotate.conf」ファイルに記述されている。
個別の設定は「/etc/logrotate.d」の下に保存されている。以下設定例をあげてみる。

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

にログローテーションの現状が記録される。

・logrotate
d.hatena.ne.jp

milestone-of-se.nesuke.com ログローテートとは、ログファイルのサイズが大きくならないように、1日、または1週、または1か月といった期間でファイル名を変更し、設定次第では古いファイルを gzip で圧縮したり、もっと古いファイルを削除したりすることができる仕組み。

Logrotate はデーモンとして動作ではなく、その実体は /usr/sbin/logrotate というコマンドと cron.daily の組合せですある。
つまり、crond によってlogrotate コマンドが毎日実行されている。

・confファイル一覧

qiita.com

copytruncate copy の動作を行った後、元のログファイルの内容を消去する。
create 0644 fuga fuga ローテーションを行った後、代わりに空の新規ログファイルを作る。権限・グループ・ユーザを指定可能
postrotate~endscript postrotateとendscriptの間に記述されたコマンドをログローテーション後に実行

log4j
www.nurs.or.jp

www.bunkei-programmer.net

vsftpd
vsftpd 設定taktom.wordpress.com ログローテーションの記載あり。

ログの発生
begi.net
ログはsyslogデーモンによって記録される場合と,ソフトウェア自身が記録をする場合の2つがある。

ソフトウェア自身が記録を持つものとして,WebサーバのApacheなどがある。Apacheは,記録形式などをユーザーが設定することも可能。その場合には,ログ記録を行うプログラムをソフトウェア自身が持たなくてはならない。

ログローテーションのパターン
d.hatena.ne.jp
1) そもそもローテーションの機能がある 2) ローテーションの機能がある奴にわたす
3) 外からローテーションする

(調査結果)
rsysylogを見ても中々情報はなかったが、syslogで見るとこんないのような記載があった。rsyslogと同じように思える。
あと、ログの形式とかあるはずなので今回はその記載がなかった。 基本を抑えることはできたと思う。