<div dir="ltr">Hi All, <div><br></div><div>We are designing and implementing a new logging service in Redfish to expose host serial console logs. The  goal is that clients can talk to bmc via Redfish and get a real-time console (just like a read-only serial console). It will improve the debuggability of BMCs. </div><div><br></div><div>We divide the work into two phases. Phase 1 is to use the pull model. That is, clients do periodical pull against the Redfish server. In Phase 2, we will consider the post model via Redfish Events and subscriptions.</div><div><br></div><div>Implementation for Phase 1 is in <a href="https://gerrit.openbmc-project.xyz/c/openbmc/bmcweb/+/39093">https://gerrit.openbmc-project.xyz/c/openbmc/bmcweb/+/39093</a>. It is based on obmc-console, phosphor-hostlogger, and bmcweb. The basic idea is that phosphor-hostlogger collects host serial console logs via obmc-console and generates tarballs in a rotation manner. These tarballs are then consumed and exposed by a new node in bmcweb log service.</div><div><br></div><div>We found there are some improvements as listed below,</div><div><ul><li>Logs are not exposed to Redfish until they reach BUF_MAXSIZE or BUF_MAXTIME (defined in <span id="gmail-docs-internal-guid-f36f23f9-7fff-675e-7cff-f6d80b6d3bd2"><a href="https://github.com/openbmc/phosphor-hostlogger" style="text-decoration-line:none"><span style="font-size:10pt;font-family:Arial;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;text-decoration-line:underline;vertical-align:baseline;white-space:pre-wrap">https://github.com/openbmc/phosphor-hostlogger</span></a></span>), but we want to achieve a stream-like console. We could set BUF_MAXSIZE to 1 or BUF_MAXTIME to a very short interval, but it will amplify the overhead of compression and decompression.</li><li>Persistence isn’t optional. phosphor-hostlogger doesn’t expose any IPC interface. bmcweb can only talk to phosphor-hostlogger via zip files, which makes persistence of logs a necessary condition.</li></ul></div><div>We propose the following methods to improve it.<br><ul><li>Method 1: <b>D-Bus Signal</b>; phosphor-hostlogger implements an interface which contains a signal. The payload of the signal should contain timestamps and log messages.  BmcWeb registers as a listener and once it receives a signal, it populates a new LogEntry. BmcWeb should implement its own configurable ring buffer to store log entries received from D-Bus.</li><li>Method 2: <b>File Watcher</b>; add file watchers in BmcWeb to monitor the log files produced by phosphor-hostlogger. This method is similar to method 1. But persistence is still a necessary condition.</li><li>Method 3: <b>obmc-console + bmcweb</b>: install the console collection and ring buffer parts of phosphor-hostlogger as a library. Use the library directly in BmcWeb to collect console logs.</li><li>Method 4: <b>phosphor-hostlogger + journal + rsyslog + bmcweb</b>: this architecture is very similar to what the current OpenBMC uses for <a href="https://github.com/openbmc/docs/blob/master/architecture/redfish-logging-in-bmcweb.md">redfish-event</a>. Add a new schema for log entries. Publish journal logs in phosphor-hostlogger. Add file watchers in BmcWeb to monitor the log files produced by rsyslog. rsyslog should have log rotation enabled. Persistence is still a necessary condition.</li></ul><div>Before we move forward, we would like to see what your preference is. We are willing to see other suggestions and alternatives as well. Thanks!</div><div><br></div><div>Sincerely,</div><div>Nan </div></div></div>