1. ホーム
  2. コース一覧
  3. LinuC Level1 v10.0 対策コース(パート2)
  4. システムのログについて

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認証関連(プライベート)
croncron関連
mailメール関連
newsnews関連
uucpuucp関連
daemonデーモンプログラム関連
userユーザープロセス関連
lprプリンタ関連
syslogsyslog内部
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を変更し、crondlogrotateコマンドを実行するので自動で変更が反映されます。 直ちに反映したい場合は以下のコマンドを実行します。

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ディレクトリには個別のログに対する詳細設定が格納されています。これにより、システムログの管理が容易になります。

まとめ

こちらの記事ではシステムのログの扱いに関する設定について解説しました。

ログの正確な管理と解析により、システムトラブルシューティングやセキュリティ監視を効率的に行うことができるため、システム管理に必要不可欠な知識です。

記事の内容は理解できましたか?