LoginSignup
3
1

More than 3 years have passed since last update.

journalctlで特定コンテナのログを狙い撃ちで表示させる

Posted at

はじめに

docker [create|run]するときにlog-driver journaldを使った場合、当然だがログはsystemd-journaldに転送されるため、journalctlで簡単にログを表示できる。
このときjournalctl -xu dockerとすると、確かにコンテナが出力したログを確認することができるのだが、全てのコンテナからのログがごちゃ混ぜで表示されてしまう。
というか、dockerのデーモン自体が出力したログも入っている。これでは何とも使い勝手が悪い。
というわけで、journalctlで特定コンテナのログだけを表示させたいときのTips

準備

まずはhogehogeと出力させるだけのコンテナを一発実行。

$ docker run --log-driver journald --name test-container centos:7 echo hogehoge
hogehoge

方法

journalctl CONTANINER_NAME=[container_name]を使うと、特定コンテナを狙い撃ちにできる。

$ journalctl CONTAINER_NAME=test-container
-- Logs begin at Sat 2019-02-02 08:29:38 UTC, end at Sun 2019-12-29 01:44:56 UTC. --
Dec 29 01:44:56 ubuntu-bionic 98ece5257dc7[1017]: hogehoge

今回はコンテナ名つまりCONTAINER_NAMEを使ったが、CONTAINER_IDでもOK

余談

journalctl -o jsonを使って詳細情報を表示させると、CONTAINER_NAME以外の属性値も確認できる。と言っても、CONTAINER_NAMEやCONTAINER_IDくらいしか使うことはないと思うが。

$ journalctl -o json CONTAINER_NAME=test-container | jq 
{
  "__CURSOR": "s=6afb2a3be4b044a1aeb269e270aded83;i=8de88;b=b81e15b81ec04ea1839e7027bc5df5ca;m=20071659f;t=59acddfc18d7d;x=73e78ea64ae3ee63",
  "__REALTIME_TIMESTAMP": "1577583896530301",
  "__MONOTONIC_TIMESTAMP": "8597366175",
  "_BOOT_ID": "b81e15b81ec04ea1839e7027bc5df5ca",
  "PRIORITY": "6",
  "_TRANSPORT": "journal",
  "_UID": "0",
  "_GID": "0",
  "_CAP_EFFECTIVE": "3fffffffff",
  "_SELINUX_CONTEXT": "unconfined\n",
  "_MACHINE_ID": "b01b43c28d6c4150a4a097c673e8415e",
  "_HOSTNAME": "ubuntu-bionic",
  "_SYSTEMD_SLICE": "system.slice",
  "_PID": "1017",
  "_COMM": "dockerd",
  "_EXE": "/usr/bin/dockerd",
  "_CMDLINE": "/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock",
  "_SYSTEMD_CGROUP": "/system.slice/docker.service",
  "_SYSTEMD_UNIT": "docker.service",
  "_SYSTEMD_INVOCATION_ID": "e75cc9d178354d2f9d434cd8772bd866",
  "MESSAGE": "hogehoge",
  "IMAGE_NAME": "centos:7",
  "CONTAINER_NAME": "test-container",
  "CONTAINER_TAG": "98ece5257dc7",
  "SYSLOG_IDENTIFIER": "98ece5257dc7",
  "CONTAINER_ID": "98ece5257dc7",
  "CONTAINER_ID_FULL": "98ece5257dc7ad81be764ffbbebfb0af78c67e4b942e8ef497d286dc5e6e9156",
  "_SOURCE_REALTIME_TIMESTAMP": "1577583896529406"
}

あとがき

まぁ特定コンテナのログ見たいだけならdocker logsでいいやんけって話ではある。場合によってはjournalctlを使いたいシーンもあるだろう。実際、フィルタリングなども容易なので私はjournalctlを使うことが多い。

参考

3
1
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
3
1