• S
    printk: add console_msg_format command line option · cca10d58
    Sergey Senozhatsky 提交于
    0day and kernelCI automatically parse kernel log - basically some sort
    of grepping using the pre-defined text patterns - in order to detect
    and report regressions/errors. There are several sources they get the
    kernel logs from:
    
    a) dmesg or /proc/ksmg
    
       This is the preferred way. Because `dmesg --raw' (see later Note)
       and /proc/kmsg output contains facility and log level, which greatly
       simplifies grepping for EMERG/ALERT/CRIT/ERR messages.
    
    b) serial consoles
    
       This option is harder to maintain, because serial console messages
       don't contain facility and log level.
    
    This patch introduces a `console_msg_format=' command line option,
    to switch between different message formatting on serial consoles.
    For the time being we have just two options - default and syslog.
    The "default" option just keeps the existing format. While the
    "syslog" option makes serial console messages to appear in syslog
    format [syslog() syscall], matching the `dmesg -S --raw' and
    `cat /proc/kmsg' output formats:
    
    - facility and log level
    - time stamp (depends on printk_time/PRINTK_TIME)
    - message
    
    	<%u>[time stamp] text\n
    
    NOTE: while Kevin and Fengguang talk about "dmesg --raw", it's actually
    "dmesg -S --raw" that always prints messages in syslog format [per
    Petr Mladek]. Running "dmesg --raw" may produce output in non-syslog
    format sometimes. console_msg_format=syslog enables syslog format,
    thus in documentation we mention "dmesg -S --raw", not "dmesg --raw".
    
    Per Kevin Hilman:
    
    : Right now we can get this info from a "dmesg --raw" after bootup,
    : but it would be really nice in certain automation frameworks to
    : have a kernel command-line option to enable printing of loglevels
    : in default boot log.
    :
    : This is especially useful when ingesting kernel logs into advanced
    : search/analytics frameworks (I'm playing with and ELK stack: Elastic
    : Search, Logstash, Kibana).
    :
    : The other important reason for having this on the command line is that
    : for testing linux-next (and other bleeding edge developer branches),
    : it's common that we never make it to userspace, so can't even run
    : "dmesg --raw" (or equivalent.)  So we really want this on the primary
    : boot (serial) console.
    
    Per Fengguang Wu, 0day scripts should quickly benefit from that
    feature, because they will be able to switch to a more reliable
    parsing, based on messages' facility and log levels [1]:
    
    `#{grep} -a -E -e '^<[0123]>' -e '^kern  :(err   |crit  |alert |emerg )'
    
    instead of doing text pattern matching
    
    `#{grep} -a -F -f /lkp/printk-error-messages #{kmsg_file} |
          grep -a -v -E -f #{LKP_SRC}/etc/oops-pattern |
          grep -a -v -F -f #{LKP_SRC}/etc/kmsg-blacklist`
    
    [1] https://github.com/fengguang/lkp-tests/blob/master/lib/dmesg.rb
    
    Link: http://lkml.kernel.org/r/20171221054149.4398-1-sergey.senozhatsky@gmail.com
    To: Steven Rostedt <rostedt@goodmis.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Fengguang Wu <fengguang.wu@intel.com>
    Cc: Kevin Hilman <khilman@baylibre.com>
    Cc: Mark Brown <broonie@kernel.org>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: LKML <linux-kernel@vger.kernel.org>
    Signed-off-by: NSergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Reviewed-by: NFengguang Wu <fengguang.wu@intel.com>
    Reviewed-by: NKevin Hilman <khilman@baylibre.com>
    Tested-by: NKevin Hilman <khilman@baylibre.com>
    Signed-off-by: NPetr Mladek <pmladek@suse.com>
    cca10d58
kernel-parameters.txt 161.1 KB