LoginSignup
16
6

【2023年1月版】 journalctl 覚えておきたい使い方メモ

Last updated at Posted at 2023-01-29

はじめに

すぐに忘れてしまう journalctl の使い方のメモ。
LPIC とか LinuC の範囲。

最新に加筆修正しました。 

 ↓

【2024年1月版】中年エンジニアのための systemd メモ 【systemctl, journalctl すぐ忘れてしまう人向け】

journalctl 概要

カーネルや systemd で管理されているサービスは、
殆どの場合、 journald で集められて、rsyslogd でログファイル(テキスト)へ出力が行われている。
/dev/kmsg, /dev/log とかも含めて。
プログラムが直接ログファイルを出力している場合を除いたログ出力、サービス(systemdのunit)の標準出力、エラー出力はjournaldで集められている(検証を参照)。

journald で集められたデータは、 system.journal というDB(バイナリ)に格納されているので、
journalctl で出力する。

systemd-journald ってとめていいのか? -> とめないほうがいい。

主要なオプション

同一オプションを複数指定した場合は OR条件 になる。
異なるオプションを指定した場合は AND条件 になる。

  • 全体を昇順

    journalctl

  • 全体を降順

    journalctl -r
    journalctl --reverse

  • 直近(1000行)をページャで表示

    journalctl -e
    journalctl --pager-end

  • 最後からn行を表示

    journalctl -n
    journalctl --lines
    journalctl -n 100 #100行表示

  • リアルタイムで表示

    journalctl -f
    journalctl --follow

  • カーネルログの表示

    journalctl -k
    journalctl --dmesg

  • サービス名(sysmtemd unit)でフィルタ

    journalctl -u [サービス名]
    journalctl --unit [サービス名]
    journalctl _SYSTEMD_UNIT [サービス名]
    journalctl -u sshd
    journalctl -u ssh* #*でワイルドカード指定できる

  • 特定プライオリティ以上でフィルタ

    journalctl -p [プライオリティ]
    journalctl --priority [プライオリティ]
    journalctl -p err
    journalctl -p 3

  • 時間でフィルタ

    • since

      journalctl --since=[時間]
      journalctl --since="2023-01-29 07:00:00"

    • until

      journalctl --until=[時間]
      journalctl --until="2023-01-29 07:00:00"

  • プロセスIDでフィルタ

    journalctl _PID=[PID]

  • ユーザIDでフィルタ

    journalctl _UID=[UID]

  • コマンド名でフィルタ

    journalctl [コマンドパス]
    journalctl /usr/sbin/crond

  • pager表示をやめる(grepにわたす場合など)

    journalctl --no-pager

  • 説明テキストを追加表示

    journalctl -x
    journalctl --catalog

  • ブート時のメッセージを表示

    journalctl -b #今回のブート時のメッセージを表示
    journalctl --boot
    journalctl -b 2 #2回前のブート時のメッセージを表示

その他ログ周り

rsyslog

  • 時間ができたら記述

logger

  • 時間ができたら記述

systemd-cat

  • 時間ができたら記述

logrotate

  • 時間ができたら記述

検証サンプル

  • journald で集められているサンプル
$ cat test.sh
#!/bin/bash

echo "Standard Output!"
echo "Standard Error!" >&2

$ chmod +x test.sh
$ sudo systemd-run ./test.sh
Running as unit: run-r9545bbf073f94430b60cfee25049eee3.service
$ journalctl -u run-r9545bbf073f94430b60cfee25049eee3.service
-- Logs begin at Sun 2023-01-29 21:12:14 JST, end at Sun 2023-01-29 21:58:43 JST. --
Jan 29 21:57:32 ubuntu systemd[1]: Started /home/dev/./test.sh.
Jan 29 21:57:32 ubuntu test.sh[519211]: Standard Output!
Jan 29 21:57:32 ubuntu test.sh[519211]: Standard Error!
Jan 29 21:57:32 ubuntu systemd[1]: run-r9545bbf073f94430b60cfee25049eee3.service: Succeeded.
  • journald から rsyslog へ転送する設定
$ cat /etc/systemd/journald.conf
 :
 :
#ForwardToSyslog=yes
 :
 :
#MaxLevelSyslog=debug
 :
 :
  • どこで出力されたのか詳細を確認
$ journalctl -u run-r9545bbf073f94430b60cfee25049eee3.service --no-pager -o verbose
 :
 :
    _TRANSPORT=journal
 :
 :
    MESSAGE=Started /home/dev/./test.sh.
 :
 :
    _TRANSPORT=stdout
 :
 :
    MESSAGE=Standard Output!
 :
 :
    _TRANSPORT=stdout
 :
 :
    MESSAGE=Standard Error!
 :
 :
    _TRANSPORT=journal
 :
 :
    MESSAGE=run-r9545bbf073f94430b60cfee25049eee3.service: Succeeded.
 :
 :

参考

gihyo.jp - Ubuntu Weekly Recipe 第546回 journaldとsyslogの関係

さいごに

わすれたくない

16
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
6