mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-22 13:33:56 +03:00
tools/catalog-report.py: a script to scour the journal for bad catalog entries
I think it can be a useful tool to find such issues. SD_MESSAGE_UNIT_STARTING 7d4958e842da4a758f6c1cdc7b36dcc5: no field UNIT ../src/core/unit.c:1239 unit_status_log_starting_stopping_reloading Starting Paths. SYSLOG_FACILITY=3 SYSLOG_IDENTIFIER=systemd PRIORITY=6 USER_UNIT=paths.target SD_MESSAGE_UNIT_STARTED 39f53479d3a045ac8e11786248231fbf: no field UNIT ../src/core/job.c:721 job_log_status_message Reached target Paths. SYSLOG_FACILITY=3 SYSLOG_IDENTIFIER=systemd PRIORITY=6 RESULT=done USER_UNIT=paths.target SD_MESSAGE_STARTUP_FINISHED b07a249cd024414a82dd00cd181378ff: no field KERNEL_USEC ../src/core/manager.c:2532 manager_check_finished Startup finished in 19ms. SYSLOG_FACILITY=3 SYSLOG_IDENTIFIER=systemd PRIORITY=6 USERSPACE_USEC=19670 SD_MESSAGE_STARTUP_FINISHED b07a249cd024414a82dd00cd181378ff: no field INITRD_USEC ../src/core/manager.c:2532 manager_check_finished Startup finished in 19ms. SYSLOG_FACILITY=3 SYSLOG_IDENTIFIER=systemd PRIORITY=6 USERSPACE_USEC=19670 unknown 0ce153587afa4095832d233c17a88001: no catalog entry gsm-manager.c:1366 start_phase Entering running state SYSLOG_IDENTIFIER=gnome-session PRIORITY=5 SD_MESSAGE_UNIT_STOPPING de5b426a63be47a7b6ac3eaac82e2f6f: no field UNIT ../src/core/unit.c:1239 unit_status_log_starting_stopping_reloading Stopping Default. SYSLOG_FACILITY=3 SYSLOG_IDENTIFIER=systemd PRIORITY=6 USER_UNIT=default.target SD_MESSAGE_UNIT_STOPPED 9d1aaa27d60140bd96365438aad20286: no field UNIT ../src/core/job.c:729 job_log_status_message Stopped target Default. SYSLOG_FACILITY=3 SYSLOG_IDENTIFIER=systemd PRIORITY=6 RESULT=done USER_UNIT=default.target SD_MESSAGE_TIME_CHANGE c7a787079b354eaaa9e77b371893cd27: no field REALTIME src/core/manager.c:2049 manager_dispatch_time_change_fd Time has been changed SYSLOG_FACILITY=3 SYSLOG_IDENTIFIER=systemd PRIORITY=6 unknown f3ea493c22934e26811cd62abe8e203a: no catalog entry shell-global.c:1375 shell_global_log_structured GNOME Shell started at Sat Jun 11 2016 12:37:46 GMT-0400 (EDT) SYSLOG_IDENTIFIER=gnome-shell SD_MESSAGE_UNIT_FAILED be02cf6855d2428ba40df7e9d022f03d: no field UNIT src/core/job.c:803 job_log_status_message Failed to start GNOME Terminal Server. SYSLOG_FACILITY=3 SYSLOG_IDENTIFIER=systemd RESULT=failed PRIORITY=3 USER_UNIT=gnome-terminal-server.service SD_MESSAGE_LID_CLOSED b72ea4a2881545a0b50e200e55b9b070: no catalog entry src/login/logind-button.c:198 button_dispatch Lid closed. SYSLOG_FACILITY=4 SYSLOG_IDENTIFIER=systemd-logind PRIORITY=6 SD_MESSAGE_LID_OPENED b72ea4a2881545a0b50e200e55b9b06f: no catalog entry src/login/logind-button.c:219 button_dispatch Lid opened. SYSLOG_FACILITY=4 SYSLOG_IDENTIFIER=systemd-logind PRIORITY=6 SD_MESSAGE_SUSPEND_KEY b72ea4a2881545a0b50e200e55b9b072: no catalog entry src/login/logind-button.c:177 button_dispatch Suspend key pressed. SYSLOG_FACILITY=4 SYSLOG_IDENTIFIER=systemd-logind PRIORITY=6 SD_MESSAGE_CONFIG_ERROR c772d24e9a884cbeb9ea12625c306c01: no catalog entry src/shared/conf-parser.c:469 config_parse_sec [/etc/systemd/system/systemd-networkd.service.d/override.conf:2] Failed to parse sec value, ignoring: UNIT=systemd-networkd.service SYSLOG_FACILITY=3 ERRNO=22 SYSLOG_IDENTIFIER=systemd PRIORITY=3 CONFIG_LINE=2 CONFIG_FILE=/etc/systemd/system/systemd-networkd.service.d/override.conf unknown 10dd2dc188b54a5e98970f56499d1f73: no catalog entry gsm-manager.c:308 on_display_server_failure Unrecoverable failure in required component org.gnome.Shell.desktop PRIORITY=3 SYSLOG_IDENTIFIER=gnome-session-binary unknown 52fb62f99e2c49d89cfbf9d6de5e3555: no catalog entry src/journal/test-journal-send.c:85 main Hello World! PAGE_SIZE=4096 TERM=xterm-256color SYSLOG_IDENTIFIER=lt-test-journal-send PRIORITY=5 N_CPUS=2 HOME=/home/zbyszek unknown 9348174c5cc74001a71ef26bd79d302e: no catalog entry /usr/lib/python3.5/site-packages/dnf-plugins/system_upgrade.py:422 log_status Download finished. SYSLOG_IDENTIFIER=python3 DNF_VERSION=1.1.10 TARGET_RELEASEVER=25 SYSTEM_RELEASEVER=24 PRIORITY=5 unknown fef1cc509d5047268b83a3a553f54b43: no catalog entry /usr/lib/python3.5/site-packages/dnf-plugins/system_upgrade.py:422 log_status Rebooting to perform upgrade. SYSLOG_IDENTIFIER=python3 DNF_VERSION=1.1.10 TARGET_RELEASEVER=25 SYSTEM_RELEASEVER=24 PRIORITY=5 unknown 3e0a5636d16b4ca4bbe5321d06c6aa62: no catalog entry /usr/lib/python3.5/site-packages/dnf-plugins/system_upgrade.py:422 log_status Starting system upgrade. This will take a while. SYSLOG_IDENTIFIER=python3 DNF_VERSION=1.1.10 SYSTEM_RELEASEVER=24 PRIORITY=5 TARGET_RELEASEVER=25 unknown 0123456789abcdef0123456789abcdef: no catalog entry <doctest systemd.journal.JournalHandler[9]>:1 <module> Message with ID SYSLOG_IDENTIFIER=/usr/lib/python2.7/site-packages/py/test.py LOGGER=custom_logger_name PRIORITY=4 THREAD_NAME=MainThread
This commit is contained in:
parent
5a1d6cb19d
commit
ba9534535e
87
tools/catalog-report.py
Normal file
87
tools/catalog-report.py
Normal file
@ -0,0 +1,87 @@
|
||||
#!/usr/bin/python3
|
||||
# -*- Mode: python; coding: utf-8; indent-tabs-mode: nil -*- */
|
||||
#
|
||||
# This file is part of systemd. It is distrubuted under the MIT license, see
|
||||
# below.
|
||||
#
|
||||
# Copyright 2016 Zbigniew Jędrzejewski-Szmek
|
||||
#
|
||||
# The MIT License (MIT)
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
"""
|
||||
Prints out journal entries with no or bad catalog explanations.
|
||||
"""
|
||||
|
||||
import re
|
||||
from systemd import journal, id128
|
||||
|
||||
j = journal.Reader()
|
||||
|
||||
logged = set()
|
||||
pattern = re.compile('@[A-Z0-9_]+@')
|
||||
|
||||
mids = {v:k for k,v in id128.__dict__.items()
|
||||
if k.startswith('SD_MESSAGE')}
|
||||
|
||||
freq = 1000
|
||||
|
||||
def log_entry(x):
|
||||
if 'CODE_FILE' in x:
|
||||
# some of our code was using 'CODE_FUNCTION' instead of 'CODE_FUNC'
|
||||
print('{}:{} {}'.format(x.get('CODE_FILE', '???'),
|
||||
x.get('CODE_LINE', '???'),
|
||||
x.get('CODE_FUNC', None) or x.get('CODE_FUNCTION', '???')))
|
||||
print(' {}'.format(x.get('MESSAGE', 'no message!')))
|
||||
for k, v in x.items():
|
||||
if k.startswith('CODE_') or k in {'MESSAGE_ID', 'MESSAGE'}:
|
||||
continue
|
||||
print(' {}={}'.format(k, v))
|
||||
print()
|
||||
|
||||
for i, x in enumerate(j):
|
||||
if i % freq == 0:
|
||||
print(i, end='\r')
|
||||
|
||||
try:
|
||||
mid = x['MESSAGE_ID']
|
||||
except KeyError:
|
||||
continue
|
||||
name = mids.get(mid, 'unknown')
|
||||
|
||||
try:
|
||||
desc = journal.get_catalog(mid)
|
||||
except FileNotFoundError:
|
||||
if mid in logged:
|
||||
continue
|
||||
|
||||
print('{} {.hex}: no catalog entry'.format(name, mid))
|
||||
log_entry(x)
|
||||
logged.add(mid)
|
||||
continue
|
||||
|
||||
fields = [field[1:-1] for field in pattern.findall(desc)]
|
||||
for field in fields:
|
||||
index = (mid, field)
|
||||
if field in x or index in logged:
|
||||
continue
|
||||
print('{} {.hex}: no field {}'.format(name, mid, field))
|
||||
log_entry(x)
|
||||
logged.add(index)
|
Loading…
Reference in New Issue
Block a user