LinuC Level1 v10.0 対策コース(パート2)18/29
システムのログについて
syslogとは
syslogは、LinuxやUNIXシステムにおいて、アプリケーションやシステムコンポーネントからのログメッセージを集約し、処理・転送・保存するための標準プロトコルおよびソフトウェアです。
rsyslogとは
rsyslogはシステムログを記録するためのソフトウェアsyslogの改善版です。
syslogとrsyslogの違い
- rsyslogはsyslogよりも高速なログ処理を提供します。
- rsyslogはリモートログ収集、高度なフィルタリング機能、ログの転送先設定など、syslogにはない機能を持っています。
- rsyslogはモジュール式で構築されており、機能追加やカスタマイズが容易ですが、syslogはそのような機能拡張が制限されています。
syslogは主にUDPを用いてログデータを転送しますが、UDPはデータの到達保証がなく、データの欠落がある場合もあります。一方で、rsyslogはTCPを使用してログデータを転送することができ、データの到達保証があり、より信頼性の高い転送が可能です。ただし、rsyslogでもUDPを使用することもできます。
ちなみに、rsyslogの“r”は信頼性(reliable)という意味です。
rsyslogの設定
rsyslogの設定ファイルは/etc/rsyslog.conf
と/etc/rsyslog.d/*
になります。
ただ、主要な設定は/etc/rsyslog.conf
で行うため今回はこちらの設定の説明を行います。
以下の書式をもとに、後述するそれぞれの要素の種類を組み合わせることでログの出力設定を行うことができます。
また、ログの内容はメッセージに後述するファシリティとプライオリティを含めたものを出力します。
[ファシリティ].[プライオリティ] [出力先]
# e.g.
mail.info /var/log/maillog
上記の例ではファシリティがmail(メールシステムに関連するメッセージ)で、プライオリティがinfo(情報メッセージ)を指定しています。この設定により、メールシステムに関連する情報メッセージ以上のプライオリティレベル(info, notice, warning, err, crit, alert, emerg)のログメッセージが、/var/log/maillog
という出力先ファイルに保存されます。
ファシリティ
ログの種類を示します。
種類 | 説明 |
---|---|
kern | カーネル関連 |
auth | 認証関連 |
authpriv | 認証関連(プライベート) |
cron | cron関連 |
メール関連 | |
news | news関連 |
uucp | uucp関連 |
daemon | デーモンプログラム関連 |
user | ユーザープロセス関連 |
lpr | プリンタ関連 |
syslog | syslog内部 |
local0 - local7 | 自由設定 |
プライオリティ
ログのレベルを示します。
種類 | 説明 |
---|---|
emerg | 緊急 |
alert | 即時対応が必要 |
crit | 重要 |
err | 一般的なエラー |
warning | 一般的な警告 |
notice | 一般的な通知 |
info | 一般的な情報 |
debug | デバック情報 |
none | 出力しない |
出力先
種類 | 説明 |
---|---|
/var/log/messages | ログファイル |
/dev/tty1 | コンソール |
@ホスト名 | 指定したホストにUDPで出力 |
@@ホスト名 | 指定したホストにTCPで出力 |
* | ログイン中の全てのユーザー |
systemdのジャーナルサブシステム
systemdは、Linuxシステムを起動・運用するための中心的なツールで、さまざまなサービスやプロセスを管理する役割を担っています。
自前のログシステムであるjournalを搭載し、syslog(rsyslog)デーモンを起動することなくログを読むことができます。ログを読むにはjournalctl
コマンドを使用します。
実行例
journalctl
-- Logs begin at Thu 2022-05-26 00:47:58 UTC, end at Sat 2022-05-28 02:45:45 UTC. --
May 26 00:47:58 b46f9b29c0ff kernel: Linux version 5.10.76-linuxkit (root@buildkitsandbox) (gcc (Alpine 10.2.1_pre1) 10.2.1 20201203, GNU ld (GNU Binutils) 2.35.2) #1 SMP Mon Nov 8 10:21:19 UTC 2021
May 26 00:47:58 b46f9b29c0ff kernel: Command line: earlyprintk=serial page_poison=1 vsyscall=emulate panic=1 nospec_store_bypass_disable noibrs noibpb no_stf_barrier mitigations=off linuxkit.unified_cgroup_hierarchy=1 console=ttyS0 console=ttyS1 vpnkit.connect=connect:/>
May 26 00:47:58 b46f9b29c0ff kernel: x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
May 26 00:47:58 b46f9b29c0ff kernel: x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
May 26 00:47:58 b46f9b29c0ff kernel: x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
May 26 00:47:58 b46f9b29c0ff kernel: x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256
May 26 00:47:58 b46f9b29c0ff kernel: x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
May 26 00:47:58 b46f9b29c0ff kernel: BIOS-provided physical RAM map:
May 26 00:47:58 b46f9b29c0ff kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
May 26 00:47:58 b46f9b29c0ff kernel: BIOS-e820: [mem 0x0000000000100000-0x00000000bfffffff] usable
May 26 00:47:58 b46f9b29c0ff kernel: BIOS-e820: [mem 0x0000000100000000-0x000000013fffffff] usable
(略)
journalctlのオプション
オプション | 説明 |
---|---|
-f | 直近のメッセージのみを表示するとともに、更新があるたびに表示を追加する |
-r | メッセージを逆順で表示する |
-k | カーネルに関するメッセージのみを表示する |
-u | 指定したユニットに対するメッセージのみを表示する |
journalctlのフィルタ
表示する内容はフィルタリングし表示できます。
起動番号をもとにしたフィルタ
journalctl --list-boots
# 一番左の番号は起動オフセットと呼ばれる値で、0は現在、-1は前回、-2は前々回を表す
0 7a6a99d6c7a94d50a46a8de695cf4e9d Mon 2023-04-17 12:30:25 UTC—Wed 2023-04-19 10:15:52 UTC
-1 f56ffd33e31b42b0bc8c003433ef8600 Thu 2023-04-14 00:47:58 UTC—Sat 2023-04-16 03:19:13 UTC
# 現在の起動を対象にメッセージを表示する
journalctl -b
Apr 17 12:30:25 myserver systemd[1]: Started Daily apt download activities.
Apr 17 12:30:25 myserver systemd[1]: Started Daily apt upgrade and clean activities.
# 起動オフセットを指定してメッセージを表示する
journalctl -b -1
Apr 14 00:47:58 myserver systemd[1]: Started Daily apt download activities.
Apr 14 00:47:58 myserver systemd[1]: Started Daily apt upgrade and clean activities.
時間をもとにしたフィルタ
# 現在以降のメッセージを表示する
journalctl --since "now"
# ただ、上のコマンドだと更新されず何も表示されないため、実際に利用する際はオプションfを使用して更新されるようにする
journalctl --since "now" -f
# 今日の0時から13時までのメッセージを表示する
journalctl --since "today" --until "13:00"
削除
journalファイルは/var/log/journal
に存在し、直接rm
コマンドを使用して削除することもできますが、journalctl
コマンドを使用して削除することもできます。
# ディスクの容量が100MB以下になるまでjournalファイルを削除する
$ journalctl --vacuum-size=100M
# 2週間より前のデータを含むjournalファイルを削除する
journalctl --vacuum-time=2weeks
ログファイルのローテーション
ローテーションとはログが増え続けることを防ぐため、ある一定量や期間ごとにログを削除したり上書きすることです。
ローテーションの設定は/etc/logrotate.conf
に記述します。設定の変更は/etc/logrotate.conf
を変更し、crond
がlogrotate
コマンドを実行するので自動で変更が反映されます。
直ちに反映したい場合は以下のコマンドを実行します。
logrotate -fv /etc/logrotate.conf
/etc/logrotate.confの説明
cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly # <- 毎週ローテーションを行う(manthlyやdailyにも変更可能)
# keep 4 weeks worth of backlogs
rotate 4 # <- 指定した世代数分のログファイルを確保
# create new (empty) log files after rotating old ones
create # <- 古いログファイルを更新後、新しい空のログファイルを作成する
# use date as a suffix of the rotated file
dateext # <- 古いログファイルを更新する際、suffixを日付8桁(YYYYMMDD) にする
# uncomment this if you want your log files compressed
#compress # <- 圧縮するかどうかの指定
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d # <- 各ログの詳細設定ファイルは/etc/logrotate.d以下
# system-specific logs may be also be configured here.
/etc/logrotate.conf
はログローテーションの設定ファイルで、ローテーション周期や保持世代数、圧縮設定などが記述されています。また、/etc/logrotate.d
ディレクトリには個別のログに対する詳細設定が格納されています。これにより、システムログの管理が容易になります。
まとめ
こちらの記事ではシステムのログの扱いに関する設定について解説しました。
ログの正確な管理と解析により、システムトラブルシューティングやセキュリティ監視を効率的に行うことができるため、システム管理に必要不可欠な知識です。
記事の内容は理解できましたか?