回答:
systemd
version 以降232
、呼び出しIDの概念があります。ユニットが実行されるたびに、ユニットは一意の128ビットの呼び出しIDを持ちます。MainPID
どちらをリサイクルできるか、またはActiveEnterTimestamp
解決に問題がある可能性があるのとは異なり、特定のsystemdユニット呼び出しのすべてのログを取得するフェイルセーフな方法です。
ユニットの最新の呼び出しIDを取得するには
$ systemctl show --value -p InvocationID openipmi
bd3eb84c3aa74169a3dcad2af183885b
たとえば、openipmi
失敗したかどうかに関係なく、最新の呼び出しのジャーナルを取得するには、1つのライナーを使用できます
$ journalctl _SYSTEMD_INVOCATION_ID=`systemctl show -p InvocationID --value openipmi.service`
-- Logs begin at Thu 2018-07-26 12:09:57 IDT, end at Mon 2019-07-08 01:32:50 IDT. --
Jun 21 13:03:13 build03.lbits openipmi[1552]: * Starting ipmi drivers
Jun 21 13:03:13 build03.lbits openipmi[1552]: ...fail!
Jun 21 13:03:13 build03.lbits openipmi[1552]: ...done.
(--value
はsystemd 230
、より古いから利用可能ですInvocationID
)
どのタイムスタンプが最も理にかなっているのかわかりませんが、これは私にとってはうまくいきます。うまくいけばsystemctl show
、awk よりもタイムスタンプを操作するより良い方法があります-タイムスタンプの形式を制御する方法を理解できませんでした。
unit=foo.service
ts=$(systemctl show -p ActiveEnterTimestamp $unit)
echo $ts
ActiveEnterTimestamp=Fri 2016-11-11 12:30:01 MST
journalctl -u $unit --since "$(echo $ts | awk '{print $2 $3}')"
systemctl show -p ActiveEnterTimestamp thermo.service | awk '{print $2 \" \" $3}'
" -fu thermo.service | 少ない
systemctl show -p ActiveEnterTimestamp --value $unit
ため、余分なawkは必要ありません
ブートフラグを使用して、そのブートからログのみを取得できます。例えば
journalctl _SYSTEMD_UNIT=avahi-daemon.service -b 5
これらはあなたを助けるかもしれません:
journalctl -u foo.service | テール-n 2
または、2を予想される行数に置き換えます
journalctl -u foo.service --since = ' 2016-04-11 13:00:00 '
これらを組み合わせて、最初に最後の実行時のタイムスタンプを取得し、そのタイムスタンプを--sinceスイッチで使用することもできます。
Journalctlでフィールドフィルターを使用できます。例えば
journalctl _PID=1234
次を使用して、使用可能なすべてのフィールドのリストを取得します。
journalctl --fields --unit kubelet
1つの使用可能なフィールドは_PID
です。
を使用して、実行中のプロセスのPIDを取得できます。 pidof
またはsystemctl show --property MainPID <SERVICE_NAME>
そこで、現在のKubernetes kubeletプロセスからログを取得する方法を次に示します。
# journalctl --unit kubelet _PID=$(systemctl show --property MainPID kubelet 2>/dev/null | cut -d= -f2) | head
Kubernetesのインストールが非常に難しい理由を教えてください:-(
journalctl -r | grep -m1 foo.service
journalctl --user -u UNITFILE -f -o json-pretty
役に立つかもしれません。MESSAGE
特にフィールドを探しています。必要な場合もあることがわかりました。USER_INVOCATION_ID
また、一部のメッセージには呼び出しIDが添付されていないため、このメカニズムでフィルタリングすることはできません。わからない多分私のロギングが間違って設定されている理由..