CentOS 7のログ管理「journald」

2014年12月18日(木)
古賀 政純

今回は、CentOS 7で採用されている新しいログ管理の仕組み「journald」を取り上げます。またjournaldとrsyslogとの連携やシステム全体に渡って様々なログを収集するsosreportについても簡単に触れます。

CentOS 7におけるログ機構「Systemd Journal」を使いこなす

CentOS 7は、ログの管理を行う新しい仕組みが導入されています。従来のCentOS 6系では、長年親しまれてきたsyslogがベースのログ管理手法が採用されていましたが、CentOS 7からは、ログに関するより細かい指定や操作を行うことができるようになっています。CentOS 7でのログ管理は、systemdが担当しています。サービス名は、「systemd-journald.service」です。一般的には、「journald」と呼ばれています。CentOS 6までのsyslogではsyslogデーモンを稼働させていましたが、CentOS 7からは、もはやsyslogdデーモンの起動は不要です。その代わり、ログの収集の仕組みであるjournaldのサービスを起動する必要があります。journaldが起動しているかどうかは、systemctlコマンドで確認できます。

# systemctl status systemd-journald
systemd-journald.service - Journal Service
   Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static)
   Active: active (running) since 月 2014-10-20 03:04:05 JST; 10h ago
     Docs: man:systemd-journald.service(8)
           man:journald.conf(5)
 Main PID: 482 (systemd-journal)
   Status: "Processing requests..."
   CGroup: /system.slice/systemd-journald.service
           mq482 /usr/lib/systemd/systemd-journald

10月 20 03:04:06 localhost.localdomain systemd-journal[482]: Runtime journal is using 6.....
10月 20 03:04:06 localhost.localdomain systemd-journal[482]: Runtime journal is using 6.....
10月 20 03:04:06 localhost.localdomain systemd-journal[482]: Journal started
10月 20 03:04:17 localhost.localdomain systemd-journal[482]: Runtime journal is using 6.....
Hint: Some lines were ellipsized, use -l to show in full.

journaldが収集したログを適宜整形、加工できるのが、journalctlコマンドになります。journalctlコマンドは、ログの出力に関する様々なオプションを備えています。以下では、CentOS 7の管理者が、知っておくべきjournalctlコマンドを使ったログ管理の基礎をご紹介します。

ブートログを出力する

サーバーに搭載されている各種ハードウェアの認識状態等を確認するために、CentOS 7のブート時のログを見たい場合があります。直前のブートのログを確認するには、journalctlコマンドに-bオプションを付与します。

# journalctl -b

日時でフィルタリングする

以下は、2014年9月5日午前1時23分45秒から2014年9月7日午前4時56分0秒までのログを出力する例です。

# journalctl --since="2014-09-05 01:23:45" --until="2014-09-07 04:56:00"
-- Logs begin at Sat 2014-09-06 00:03:27 JST, end at Sat 2014-09-06 10:46:25 JST. --
Sep 06 00:03:27 c70n2530.jpn.linux.hp.com systemd-journal[95]: Runtime journal is using 8.0M (max 93.3M, leaving 140.0M of free 925.3M, current limit 93.3M).
Sep 06 00:03:27 c70n2530.jpn.linux.hp.com systemd-journal[95]: Runtime journal is using 8.0M (max 93.3M, leaving 140.0M of free 925.3M, current limit 93.3M).
Sep 06 00:03:27 c70n2530.jpn.linux.hp.com kernel: Initializing cgroup subsys cpuset
...
...

デフォルトでは、自動的にlessページャが起動し、ログをスクロールさせて閲覧することができます。lessページャの自動起動が不要の場合は、--no-pagerオプションを付与します。特定のサービスに限ってログを出力させたい場合は、そのサービスのユニット名を指定します。

# journalctl --since="2014-09-05 01:23:45" --until="2014-09-07 04:56:00" -u sshd.service
-- Logs begin at Sat 2014-09-06 00:03:27 JST, end at Sat 2014-09-06 10:46:25 JST. --
Sep 06 00:03:58 c70n2530.jpn.linux.hp.com systemd[1]: Starting OpenSSH server daemon...
Sep 06 00:03:58 c70n2530.jpn.linux.hp.com systemd[1]: Started OpenSSH server daemon.
...
...

--sinceオプションに「today」を指定することで、今日ログされたものから現在までのものを抽出して出力することも可能です。

# journalctl --since=today
-- Logs begin at Sat 2014-09-06 00:03:27 JST, end at Sat 2014-09-06 11:03:55 JST. --
Sep 06 00:03:27 c70n2530.jpn.linux.hp.com systemd-journal[95]: Runtime journal is using 8.0M (max 93.3M, leaving 140.0M of free 925.3M, current limit 93.3M).
Sep 06 00:03:27 c70n2530.jpn.linux.hp.com systemd-journal[95]: Runtime journal is using 8.0M (max 93.3M, leaving 140.0M of free 925.3M, current limit 93.3M).
...
...

他にも、--sinceオプションに「yesterday」や「tomorrow」を指定することも可能です。

過去のログだけでなく、現在のシステムが出力しているログをリアルタイムで閲覧したい場合があります。従来の「tail -f /var/log/messages」のように、tailコマンドを駆使していたようなログの閲覧方法を実現するには、-fオプションを付与して実行します。

# journalctl -f
-- Logs begin at Sat 2014-09-06 00:03:27 JST. --
Sep 06 10:30:01 c70n2530.jpn.linux.hp.com CROND[10619]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep 06 10:40:01 c70n2530.jpn.linux.hp.com systemd[1]: Starting Session 76 of user root.
Sep 06 10:40:01 c70n2530.jpn.linux.hp.com systemd[1]: Started Session 76 of user root.
...
...

従来のsyslogでは、ログのプライオリティ管理ができました。journalctlでも同様にプライオリティによる出力のフィルタリングを行うことができます。特定のプライオリティのログのみを出力させる場合は、-pオプションにプライオリティを付与してjournalctlコマンドを実行します。

warningプライオリティの場合

# journalctl -p warning
-- Logs begin at Sat 2014-09-06 00:03:27 JST, end at Sat 2014-09-06 10:46:25 JST. --
Sep 06 00:03:27 c70n2530.jpn.linux.hp.com kernel: crashkernel=auto resulted in zero bytes of reserved memory.
Sep 06 00:03:27 c70n2530.jpn.linux.hp.com kernel: ACPI: RSDP 00000000000f68c0 00024 (v02 HPQOEM)
...
...

errプライオリティの場合

# journalctl -p err
-- Logs begin at Sat 2014-09-06 00:03:27 JST, end at Sat 2014-09-06 11:01:01 JST. --
Sep 06 00:03:27 c70n2530.jpn.linux.hp.com kernel: tpm_tis 00:03: A TPM error (7) occurred attempting to read a pcr value
Sep 06 00:03:40 c70n2530.jpn.linux.hp.com systemd-udevd[423]: error opening ATTR{/sys/devices/pci0000:00/0000:00:1a.1/usb4/4-1/4-1:1.0/power/control} for writing: No such file or directory

上記の-pオプションには、プライオリティの値で指定することも可能です。プライオリティの値とログレベルの対応関係を以下に示します。

# journalctl -p 0       ← emerg
# journalctl -p 1       ← alert
# journalctl -p 2       ← crit
# journalctl -p 3       ← err
# journalctl -p 4       ← warning
# journalctl -p 5       ← notice
# journalctl -p 6       ← debug

カーネルログのみを表示させることも可能です。従来のsyslog管理のdmesgに相当します。

# journalctl -k
-- Logs begin at 日 2014-08-31 01:02:16 JST, end at 土 2014-09-13 10:10:01 JST. --
...
...
 9月 07 01:30:16 centos70n01.jpn.linux.hp.com kernel: NX (Execute Disable) protection: active
 9月 07 01:30:16 centos70n01.jpn.linux.hp.com kernel: SMBIOS 2.4 present.
 9月 07 01:30:16 centos70n01.jpn.linux.hp.com kernel: DMI: Red Hat KVM, BIOS 0.5.1 01/01/2007
 9月 07 01:30:16 centos70n01.jpn.linux.hp.com kernel: Hypervisor detected: KVM
 9月 07 01:30:16 centos70n01.jpn.linux.hp.com kernel: e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
 9月 07 01:30:16 centos70n01.jpn.linux.hp.com kernel: e820: remove [mem 0x000a0000-0x000fffff] usable
 9月 07 01:30:16 centos70n01.jpn.linux.hp.com kernel: No AGP bridge found
...
...

特定のプロセスIDのみに関するログを出力したい場合は、「_PID=プロセス番号」を付与して実行します。

# journalctl _PID=10765
-- Logs begin at Sat 2014-09-06 00:03:27 JST, end at Sat 2014-09-06 10:50:01 JST. --
Sep 06 10:46:25 c70n2530.jpn.linux.hp.com sshd[10765]: Accepted password for root from 172.16.27.10 port 57150 ssh2
Sep 06 10:46:25 c70n2530.jpn.linux.hp.com sshd[10765]: pam_unix(sshd:session): session opened for user root by (uid=0)

サービスを提供する実行ファイルのパスを指定することも可能です。以下では、コマンドの実行をスケジューリングするサービス「crond」の実体である/usr/sbin/crondに関連するログのみを出力する例です。

# journalctl /usr/sbin/crond
-- Logs begin at Sat 2014-09-06 00:03:27 JST, end at Sat 2014-09-06 11:01:01 JST. --
Sep 06 00:03:51 c70n2530.jpn.linux.hp.com crond[585]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 92% if used.)
Sep 06 00:03:53 c70n2530.jpn.linux.hp.com crond[585]: (CRON) INFO (running with inotify support)
Sep 06 00:20:01 c70n2530.jpn.linux.hp.com CROND[2473]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Sep 06 01:01:01 c70n2530.jpn.linux.hp.com CROND[2972]: (root) CMD (run-parts /etc/cron.hourly)
...
...
日本ヒューレット・パッカード株式会社 プリセールス統括本部 ソリューションセンター OSS・Linux担当 シニアITスペシャリスト

兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師を担当。科学技術計算サーバーのSI経験も持つ。2005年、大手製造業向けLinuxサーバー提案で日本HP社長賞受賞。2006年、米国HPからLinux技術の伝道師に与えられる「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。日本HPプリセールスMVPを4度受賞。現在は、Linux、FreeBSD、Hadoop等のOSSを駆使したスケールアウト型サーバー基盤のプリセールスSE、技術検証、技術文書執筆を担当。日本HPのオープンソース・Linuxテクノロジーエバンジェリストとして講演活動も行っている。Red Hat Certified Engineer、Red Hat Certified Virtualization Administrator、Novell Certified Linux Professional、EXIN Cloud Computing Foundation Certificate、HP Accredited Systems Engineer Cloud Architect、Red Hat Certified System Administrator in Red Hat OpenStack、Cloudera Certified Administrator for Apache Hadoop認定技術者。HP公式ブログ執筆者。趣味はレーシングカートとビリヤード

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています