답변:
systemd
version 이후 232
에는 호출 ID라는 개념이 있습니다. 장치가 실행될 때마다 고유 한 128 비트 호출 ID가 있습니다. MainPID
재활용 ActiveEnterTimestamp
할 수 있거나 해결에 문제가있는 것과는 달리 특정 시스템 장치 호출의 모든 로그를 가져 오는 안전한 방법입니다.
장치의 최신 호출 ID를 얻으려면
$ systemctl show --value -p InvocationID openipmi
bd3eb84c3aa74169a3dcad2af183885b
openipmi
실패 여부 와 같은 최신 호출 저널을 얻으려면 하나의 라이너를 사용할 수 있습니다
$ 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 | less
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
사용 가능한 필드는 _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가 없으므로이 메커니즘을 통해 필터링 할 수 없다는 것을 알았습니다 . 왜 내 로깅이 잘못 구성되었는지 잘 모르겠습니다.