勉強前イメージ
serviceコマンドでミドルウェアの起動に失敗したときに出てくるイメージ
systemdとかのログをになってるのかな?
調査
journaldとは?
正式名称は systemd-journald.service
systemdの環境で標準的に提供されるログ管理のサービスになります。
以下のようにsystemdのデーモンプロセスとして稼働しています。
[root@localhost ~]# systemctl status systemd-journald.service
● systemd-journald.service - Journal Service
Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static; vendor preset: disabled)
Active: active (running) since 火 2020-12-08 12:13:43 JST; 1 day 8h ago
Docs: man:systemd-journald.service(8)
man:journald.conf(5)
Main PID: 18223 (systemd-journal)
Status: "Processing requests..."
CGroup: /system.slice/systemd-journald.service
└─18223 /usr/lib/systemd/systemd-journald
12月 08 12:13:43 localhost.localdomain systemd-journal[18223]: Runtime journal is using 80.0M (max …M).
12月 08 12:13:43 localhost.localdomain systemd-journal[18223]: Journal started
Hint: Some lines were ellipsized, use -l to show in full.
CentOS7の環境には journaldの他、CentOS7より前から使用されている rsyslog
も稼働しています
/var/log/messages
などはrsyslogが管理し、
その他のプロセスやサービスのログは独自のDBに保存しています。
流れとしては以下の画像のように、
systemdユニットプロセスやその他の一般プロセスのログをjournaldに収集し、
syslogメッセージはrsyslogにも転送されます。
rsyslogに関しても、以下のようにjournaldと同様 systemdのデーモンプロセスとして動いています。
[root@localhost ~]# systemctl status rsyslog.service
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since 月 2020-11-30 21:32:01 JST; 1 weeks 1 days ago
Docs: man:rsyslogd(8)
http://www.rsyslog.com/doc/
Main PID: 1130 (rsyslogd)
CGroup: /system.slice/rsyslog.service
└─1130 /usr/sbin/rsyslogd -n
12月 02 09:04:31 localhost.localdomain rsyslogd[1130]: imjournal: journal reloaded... [v8.24.0-52.... ]
12月 02 10:28:05 localhost.localdomain rsyslogd[1130]: imjournal: journal reloaded... [v8.24.0-52.... ]
12月 02 12:27:05 localhost.localdomain rsyslogd[1130]: imjournal: journal reloaded... [v8.24.0-52.... ]
12月 02 12:51:13 localhost.localdomain rsyslogd[1130]: imjournal: journal reloaded... [v8.24.0-52.... ]
12月 02 14:38:01 localhost.localdomain rsyslogd[1130]: imjournal: journal reloaded... [v8.24.0-52.... ]
12月 02 16:08:43 localhost.localdomain rsyslogd[1130]: imjournal: journal reloaded... [v8.24.0-52.... ]
12月 03 10:32:01 localhost.localdomain rsyslogd[1130]: [origin software="rsyslogd" swVersion="8.2...ed
12月 03 19:11:22 localhost.localdomain rsyslogd[1130]: imjournal: journal reloaded... [v8.24.0-52.... ]
12月 03 19:49:26 localhost.localdomain rsyslogd[1130]: imjournal: journal reloaded... [v8.24.0-52.... ]
12月 08 12:13:43 localhost.localdomain rsyslogd[1130]: imjournal: journal reloaded... [v8.24.0-52.... ]
Hint: Some lines were ellipsized, use -l to show in full.
journaldのログを見るためには・・・?
- ファイルを見る
CentOS7のデフォルトでは /var/run/log/journal
にログが吐かれています。
ここはOSを再起動すると消えるので、直近の起動ログのみ。
吐いたログを見てみようと思いましたが、バイナリファイルでした
[root@localhost ~]# ll /var/run/log/journal/011cccd3dfdde94b92dced6372b08bda/*
-rw-r-----+ 1 root systemd-journal 8388608 12月 9 20:32 /var/run/log/journal/011cccd3dfdde94b92dced6372b08bda/system.journal
-rwxr-x---+ 1 root systemd-journal 8388608 12月 1 21:27 /var/run/log/journal/011cccd3dfdde94b92dced6372b08bda/system@0005b56ffcd43e6a-bcfd007e9c017b9f.journal~
-rw-r-----+ 1 root systemd-journal 8388608 12月 2 10:24 /var/run/log/journal/011cccd3dfdde94b92dced6372b08bda/system@0005b57127b6b01a-434f3f1eaaca813a.journal~
-rw-r-----+ 1 root systemd-journal 8388608 12月 2 12:22 /var/run/log/journal/011cccd3dfdde94b92dced6372b08bda/system@0005b572d13f953c-8ad654dfd105654d.journal~
-rw-r-----+ 1 root systemd-journal 8388608 12月 2 12:48 /var/run/log/journal/011cccd3dfdde94b92dced6372b08bda/system@0005b57327933169-6600573119c92485.journal~
-rw-r-----+ 1 root systemd-journal 8388608 12月 2 14:35 /var/run/log/journal/011cccd3dfdde94b92dced6372b08bda/system@0005b574a58eaa7f-44afe00ad80ed8d3.journal~
-rw-r-----+ 1 root systemd-journal 8388608 12月 2 16:04 /var/run/log/journal/011cccd3dfdde94b92dced6372b08bda/system@0005b575e9e49a9e-7fa8897feb5ea35d.journal~
-rw-r-----+ 1 root systemd-journal 8388608 12月 3 18:01 /var/run/log/journal/011cccd3dfdde94b92dced6372b08bda/system@0005b58c94f7a24a-c27750ddf7df5a78.journal~
-rw-r-----+ 1 root systemd-journal 8388608 12月 3 19:12 /var/run/log/journal/011cccd3dfdde94b92dced6372b08bda/system@0005b58d1d143f09-0e72be4e963eb3e7.journal~
-rw-r-----+ 1 root systemd-journal 8388608 12月 8 12:02 /var/run/log/journal/011cccd3dfdde94b92dced6372b08bda/system@0005b5eb548053ae-2a5c77cc30eabb16.journal~
[root@localhost ~]# head /var/run/log/journal/011cccd3dfdde94b92dced6372b08bda/system.journal
LPKSHHRH�Qs���L���S�z�!������cr���ilBDϛ���i"d��Qs���L���S�z�!��
�� �
C��T�i{�j�֚%4
�
��
��
��
��
�
�
永続的にログを保存したい場合は /var/log/journal
を作って再起動するとこちらにログを保存するようになります。
試しに作ってrebootしたらきちんとログが保存されていました。
無制限にログを貯めるわけではなく、古くなったり容量が少なくなったら消していくようです。
[root@localhost ~]# mkdir /var/log/journal
[root@localhost ~]# reboot
...
[root@localhost ~]# ll /var/log/journal/*
合計 16384
-rw-r-----+ 1 root systemd-journal 8388608 12月 9 21:00 system.journal
-rw-r----- 1 root root 8388608 12月 9 20:59 system@540f5dd2506e42528b408a6bbe8b12de-0000000000000001-0005ae278017b960.journal
- コマンドで見る
journalctl
コマンドで見ることが出来ます。
叩いてみたら以下のようにずらずら出てきます
[root@localhost ~]# journalctl
8月 31 16:39:19 localhost.localdomain systemd-journal[92]: Runtime journal is using 8.0M (max allowed 9
8月 31 16:39:19 localhost.localdomain kernel: Initializing cgroup subsys cpuset
8月 31 16:39:19 localhost.localdomain kernel: Initializing cgroup subsys cpu
8月 31 16:39:19 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
8月 31 16:39:19 localhost.localdomain kernel: Linux version 3.10.0-1160.6.1.el7.x86_64 (mockbuild@kbuil
8月 31 16:39:19 localhost.localdomain kernel: Command line: BOOT_IMAGE=/vmlinuz-3.10.0-1160.6.1.el7.x86
8月 31 16:39:19 localhost.localdomain kernel: e820: BIOS-provided physical RAM map:
....
試しにhttpdのサービスのログを見てみます。
オプションで -u xxxx.service
とつければ特定のサービスのログを見ることが出来ます
[root@localhost ~]# journalctl -u httpd.service
-- Logs begin at 月 2020-08-31 16:39:19 JST, end at 水 2020-12-09 21:04:23 JST. --
12月 09 21:04:23 localhost systemd[1]: Starting The Apache HTTP Server...
12月 09 21:04:23 localhost httpd[1566]: AH00558: httpd: Could not reliably determine the server's fully
12月 09 21:04:23 localhost systemd[1]: Started The Apache HTTP Server.
補足
多分journaldの中身って systemctl status httpd
叩いた時に下に出てくるログと同様な気がします。
[root@localhost ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since 水 2020-12-09 21:04:23 JST; 2min 8s ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 1566 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─1566 /usr/sbin/httpd -DFOREGROUND
├─1567 /usr/sbin/httpd -DFOREGROUND
├─1568 /usr/sbin/httpd -DFOREGROUND
├─1569 /usr/sbin/httpd -DFOREGROUND
├─1570 /usr/sbin/httpd -DFOREGROUND
└─1571 /usr/sbin/httpd -DFOREGROUND
12月 09 21:04:23 localhost systemd[1]: Starting The Apache HTTP Server...
12月 09 21:04:23 localhost httpd[1566]: AH00558: httpd: Could not reliably determine the server...sage
12月 09 21:04:23 localhost systemd[1]: Started The Apache HTT
サービスの起動を失敗させてみました。
よくよくみたら、 "systemctl status httpd.service"
をして、詳細は "journalctl -xe"
で見ろよって言ってるので
あながち間違ってはなさそうですね。
[root@localhost ~]# systemctl restart httpd
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
勉強後イメージ
今まで気にせずにサービス起動失敗したときとかjournalctl叩いてたけど、どういう役割してるとか全然気にしたことなかったかも....
元々rsyslogがこの役割をしてたりしたのかな?
経緯は今度調べてみよう。