1.システムログとは
ユーザーの操作やプログラムによりシステムの状態が変化することをイベントといい、イベントの記録簿がシステムログ。システムに異常が発生した時の原因特定や、システムが正常に稼働していることの確認他、幅広く使われてる。
2.システムログの種類
システムログには主に下記2種類の系統がある。
・syslogとrsyslog…大抵の環境で動作する。rsyslogの方が新しく信頼性も高いため主流。
・systemd-jornald…systemdが入っているLinuxで動作する。
(1)rsyslog
①仕組み
「/etc/rsyslog.conf」という設定ファイルでログ取得方法などの設定を行う。設定ファイルに基づいて「rsyslog」デーモンが動作しログを取得する仕組み。
②/etc/rsyslog.conf
設定ファイルの基本文法は以下の通り。
<文法>
ファシリティ.プライオリティ アクション
※プライオリティの後ろに「;」をつけることでさらに後ろにファシリティ.プライオリティを書ける。
<例>
*.info;mail.none /var/log/messages
③ファシリティ
ログとなる動作の発信元を指す。主なファシリティは以下の通り。
ファシリティ名 | 説明 |
---|---|
auth | 認証システム関連 |
authpriv | 認証情報(プライベート) |
cron | cronデーモン |
daemon | システムデーモン全般 |
kern | カーネルメッセージ |
lpr | 印刷システム |
mail | メール関連 |
news | ニュースサーバ関連 |
syslog | syslog自体のメッセージ |
user | ユーザー処理プログラム |
uucp | UUCPサブシステム |
local0 ~ local7 | ローカル用途(アプリケーションなど独自に使用可能) |
④プライオリティ
メッセージの重要度や優先度を指す。
プライオリティ | 説明 |
---|---|
emerg | 緊急。システムが使用不能 |
alert | 即時対応が必要 |
crit | 重大な状態 |
err (または error ) | エラー状態 |
warning (または warn ) | 警告状態 |
notice | 通知(通常重要な状態) |
info | 情報メッセージ |
debug | デバッグ用情報 |
none | ロギングなし |
⑤アクション
指定したファシリティ・プライオリティのログの出力先などを指定する。
アクション | 説明 |
---|---|
ファイルパス(例:/var/log/messages ) | ログをファイルに書き込み |
@ホスト名 | リモートホストへUDPで転送 |
@@ホスト名 | リモートホストへTCPで転送 |
ユーザー名 | ユーザーの端末に出力 |
/dev/consols | コンソール画面に出力 |
* | ログイン中の全ユーザーの端末に出力 |
⑥rsyslogにメッセージを送る(logger)
rsyslogの設定が反映されたかを確認するためテスト用のログを作りたいとき等に使うのがloggerコマンド。
<書式>
logger [オプション] メッセージ
<オプション>
・-p ファシリティ.プライオリティ
→送信メッセージの種類を指定
.-t タグ
→ログの識別子を指定
<例>
logger -t TEST "これはテストログです。"
⑦ログファイルの保管場所
rsyslogの保管先は「/var/log/messages」か「/var/log」ディレクトリ内のログを確認したいアプリケーション名のファイルのいずれか。ログファイルの分析などが必要な場合ここから取り出す。
なお、ユーザーのログイン履歴は「/var/log/secure」ファイルに保管されている。
(2)systemd-journald
①仕組み
systemdが入っているlinuxで使われているログ管理サービスのこと。
systemdで起動したサービスから発生する全イベントを記録している。
systemd-journaldは長いため、journaldと略されることが多い。このページでは以下journaldと呼ぶ。
rsyslogと併用している場合、journaldがイベントログを取得して、rsyslogに送信することになる。
②ログデータベースの確認(journalctl)
journaldは独自にログデータベースを持っており、ここに収集したログが保管される。ログデータベースはバイナリのためcatコマンドなどで確認することはできない。ログデータベースにアクセスするためのコマンドが「journalctl」。
<書式>
journalctl [オプション]
<オプション>
・journalctl -e
→システムログの最新部分の表示
・journalctl -f
→システムログを表示し続ける
・journalctl -x
→詳細を表示
・journalctl -u Unit名
→指定したユニットのログのみ表示。「systemctl list-units --type=service
」などで事前に指定できるユニット名は調べておくこと。
③journaldの設定
journald自体の設定は「/etc/systemd/journald.conf」ファイルを編集することで行える。
項目 | 説明 |
---|---|
Storage= | ログの保存先。volatile (RAMのみ)、persistent (ディスク保存)、auto (自動)、none (保存しない) |
Compress= | ログファイルを圧縮するかどうか。yes または no |
SystemMaxUse= | ディスク上で system journal が使える最大容量(例:1G , 500M ) |
SystemKeepFree= | 空き容量として確保しておく最低限のディスクサイズ |
SystemMaxFileSize= | ジャーナルファイル1つの最大サイズ |
SystemMaxFiles= | 保持するジャーナルファイルの最大数 |
RuntimeMaxUse= | /run/log/journal の最大使用量(RAM使用) |
ForwardToSyslog= | rsyslog などにログを転送するかどうか(yes / no ) |
MaxRetentionSec= | 最大保持期間(例:1week 、1month )※最近のsystemdでは廃止傾向 |
ファイルを設定するだけでは反映されないため、必ず下記コマンドでリスタートすること。
sudo systemctl restart systemd-journald
Storage=autoに設定したが/var/log/journal/ファイルがない場合、ログがRAMにしか保管されず永続化しないため、下記コマンドを実行する必要がある。
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
④ログの検証(systemd-cat)
systemd-cat は、標準出力や標準エラーの出力を systemd の ログに送るためのコマンド。
<書式>
systemd-cat ログに送りたいコマンド
<例>
systemd-cat echo "テスト"
→任意の文字列をログに送信している。