BillMaier
Supporter
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6389
|
Hallo, ich habe einen Service, der syslog abgrast. Anschließend kann ich dort nach Loglevel filtern. Dazu brauche ich den LogLevel in der jeweiligen Log-Zeile. Dummerweise schreibt der journald die systemd-Logs ohne LogLevel, z.B. systemd[1]: Failed to set up mount unit: Invalid argument So eine Unart. Kann ich dem journald irgendwie beibringen, dass er seine Einträge in syslog mit dem jeweiligen Loglevel ausstattet? Via journalctl habe ich nun raus gefunden, dass dieser Eintrag als Warning klassifiziert wird. Danke schon mal für eure Hilfe! Gruß BillMaier
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
BillMaier schrieb: Dummerweise schreibt der journald die systemd-Logs ohne LogLevel, z.B.
Der Loglevel ist schon intern vorhanden, er wird nur nicht standardmäßig mit ausgegeben
Kann ich dem journald irgendwie beibringen, dass er seine Einträge in syslog mit dem jeweiligen Loglevel ausstattet?
Mir fallen da einige Möglichkeiten dazu ein:
When outputting to a tty, lines are colored according to priority: lines of level ERROR and higher are colored red; lines of level NOTICE and higher are highlighted; lines of level DEBUG are colored lighter grey; other lines are displayed normally.
journalctl -u vdr.service -o json-pretty --since=-1m
{
"__MONOTONIC_TIMESTAMP" : "15040569",
"_EXE" : "/usr/bin/vdr",
"__CURSOR" : "s=842a1b15f7254354933430f498240f95;i=b44bf7;b=bc3940086c7446be9f788f484aef2ce5;m=e58039;t=5a5f187770cf4;x=b15fb0b418245cf3",
"_UID" : "666",
"_SYSTEMD_UNIT" : "vdr.service",
"SYSLOG_TIMESTAMP" : "May 18 21:54:21 ",
"_PID" : "1150",
"_GID" : "666",
"_SOURCE_REALTIME_TIMESTAMP" : "1589831661980653",
"_BOOT_ID" : "bc3940086c7446be9f788f484aef2ce5",
"_SYSTEMD_INVOCATION_ID" : "567c24b85f7d4a3999821f5aec86aa3a",
"_CAP_EFFECTIVE" : "2802000",
"_SELINUX_CONTEXT" : "unconfined\n",
"PRIORITY" : "6",
"SYSLOG_IDENTIFIER" : "vdr",
"_COMM" : "vdr",
"SYSLOG_FACILITY" : "1",
"_SYSTEMD_SLICE" : "system.slice",
"MESSAGE" : "[1150] VDR version 2.4.1 started",
"_HOSTNAME" : "yavdr08",
"_MACHINE_ID" : "f263b7ebc4134365aa21753be243d985",
"_TRANSPORT" : "syslog",
"_CMDLINE" : "/usr/bin/vdr",
"__REALTIME_TIMESTAMP" : "1589831661980916",
"_SYSTEMD_CGROUP" : "/system.slice/vdr.service"
}
Das kann man dann natürlich formatieren lassen (die Lösung ist so noch nicht perfekt, weil es Messages mit abweichenden Feldern geben kann):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | #!/usr/bin/env python3
import fileinput
import json
LOGLEVEL = {
"1": "ALERT",
"2": "CRIT",
"7": "DEBUG",
"0": "EMERG",
"3": "ERR",
"6": "INFO",
"5": "NOTICE",
"4": "WARNING",
}
for line in fileinput.input():
l = json.loads(line.rstrip())
print(f"[{LOGLEVEL.get(l['PRIORITY'])}] {l['SYSLOG_RAW'].partition('>')[-1]}", end='')
|
./format_syslog.py < <(journalctl -u vdr -o json)
|
BillMaier
Supporter
(Themenstarter)
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6389
|
Vielen Dank. Ich habe das jetzt erstmal so gelöst, dass ich das Loglevel auf error gesetzt habe: cat /etc/systemd/journald.conf
## Do not edit on server - for this will be overwritten by ansible provisioning
# Defaults can be restored by simply deleting this file.
# See journald.conf(5) for details.
[Journal]
MaxLevelSyslog=err Für mich trotzdem unverständlich, dass man sich immer selbst um alles kümmern muss ... Gruß BillMaier
|