commit | e8837d59c789b4e4b928afc0d6ba38110a394d07 | [log] [tgz] |
---|---|---|
author | Artem Senichev <a.senichev@yadro.com> | Sun Jun 07 11:59:04 2020 +0300 |
committer | Artem Senichev <a.senichev@yadro.com> | Thu Jul 02 15:56:17 2020 +0300 |
tree | 339b4207ab4f3fd12bbe1080f2309fdd8a3f1820 | |
parent | bc5e1501408d6065dba06ff6c4f1caa83b030106 [diff] |
Add multi-host support This refactoring includes: - added multi-host mode support; - added support for graceful shutdown of the service; - added support to flush the log buffer as it fills; - D-Bus service xyz.openbmc_project.HostLogger replaced with SIGUSR1 signal handler; - self diagnostic messages now registered via phosphor-logging; - added unit tests; - build system migrated from autotools to meson; - source code aligned with OpenBMC conventions. Change-Id: If6c1dfde278af685d8563450543a6587a282c7e4 Signed-off-by: Artem Senichev <a.senichev@yadro.com>
The main purpose of the Host Logger project is to handle and store host's console output data, such as boot logs or Linux kernel messages printed to the system console.
Host logs are stored in a temporary buffer and flushed to a file according to the policy that can be defined with service parameters. It gives the ability to save the last boot log and subsequent messages in separate files.
Host Logger is a standalone service (daemon) that works on top of the obmc-console and uses its UNIX domain socket to read the console output.
+-------------+ +----------------+ | Host | State +---------------------+ Event | Host Logger | | |------->| D-Bus |------->| | | | +---------------------+ | +------------+ | | | D +--->| Log buffer | | | | +---------------------+ a | | +------+-----+ | | | | obmc-console-server | t | | V | | +---------+ | Data | +-------------+ | a | | +------------+ | | | console |--------->| | UNIX socket |---------+ | | Log file | | | +---------+ | | +-------------+ | | +------------+ | +-------------+ +---------------------+ +----------------+
Unlike the obmc-console project, where console output is a binary byte stream, the Host Logger service interprets this stream: splits it into separate messages, adds a time stamp and pushes the message into an internal buffer. Maximum size of the buffer and flush conditions are controlled by service parameters.
Maximum buffer size can be defined in the service configuration using two ways:
BUF_MAXSIZE
option.BUF_MAXTIME
option.Any of these parameters can be combined.
Messages from the buffer will be written to a file when one of the following events occurs:
HOST_STATE
parameter.BUF_MAXSIZE
and BUF_MAXTIME
parameters, this mode can be activated by FLUSH_FULL
flag.SIGUSR1
is received (manual flush).Configuration of the service is loaded from environment variables, so each instance of the service can have its own set of parameters. Environment files are stored in the directory /etc/hostlogger
and must have the extension conf
. The file name is the name of the associated Host logger instance and the instance of the obmc-console service (e.g. ttyVUART0
).
Any of these variables can be omitted, in which cases default values are used. If variable's value has an invalid format, the service fails with an error.
SOCKET_ID
: Socket Id used for connection with the host console. This Id shall match the "socket-id" parameter of obmc-console server. The default value is empty (single-host mode).
BUF_MAXSIZE
: Max number of stored messages in the buffer. The default value is 3000
(0=unlimited).
BUF_MAXTIME
: Max age of stored messages in minutes. The default value is 0
(unlimited).
FLUSH_FULL
: Flush collected messages from buffer to a file when one of the buffer limits reaches a threshold value. At least one of BUF_MAXSIZE
or BUF_MAXTIME
must be defined. Possible values: true
or false
. The default value is false
.
HOST_STATE
: Flush collected messages from buffer to a file when the host changes its state. This variable must contain a valid path to the D-Bus object that provides host's state information. Object shall implement interfaces xyz.openbmc_project.State.Host
and xyz.openbmc_project.State.OperatingSystem.Status
. The default value is /xyz/openbmc_project/state/host0
.
OUT_DIR
: Absolute path to the output directory for log files. The default value is /var/lib/obmc/hostlogs
.
MAX_FILES
: Log files rotation, max number of files in the output directory, oldest files are removed. The default value is 10
(0=unlimited).
The single instance of the service can handle only one host console at a time. If OpenBMC has multiple hosts, the console of each host must be associated with its own instance of the Host Logger service. This can be achieved using the systemd unit template.