Skip to content

Support qlog Logging Format #1158

Open
Open
@rmarx

Description

@rmarx

Describe the feature you'd like supported

qlog is a structured endpoint logging format specifically for QUIC and HTTP/3. It is on track to be adopted by the IETF QUIC wg for standardization in the coming months.

Many other QUIC stacks already support qlog output to aid in analyzing and debugging their behaviour. This is typically done with the qvis toolsuite, but it's also easy to write custom (ad-hoc) tools for qlog analysis.

Proposed solution

Adding qlog directly to msquic has been deemed not to be an option in many previous discussions with @nibanks and others on the msquic team. This is mainly due to the JSON-based format having certain performance and filesize downsides, especially when considering large traces (100MBs to GBs). Additionally, msquic already has a different, extensive structured logging setup with ETW/LTTng and clog, which enables the use of other tooling such as Windows Performance Analyzer (WPA).

As such, the best way to add qlog support is probably to provide an ETW/LTT-to-qlog transformation utility. Early efforts for this already exist, but they need to be updated/extended. Being a reminder to do so is one of the main reasons for opening this issue.

In a magical winter-wonderland setting this utility would be written in JavaScript/WebAssembly so users could upload (smaller) msquic traces directly to web-based tooling like qvis which can then transform them in the browser, but that's of course not a requirement. It would be nice however if it would be a (fully) standalone utility that works on Linux for both trace formats so qvis can do the transformation on the server-side (similar to what we already do for pcap files).

Other planned related work is that I will look into writing a qlog import codec for the existing WPA tooling, which should help make large qlog traces easier to interpret than they are now with qvis. However, this effort is perpendicular to the ETW/LTT-to-qlog utility described above.

I get this is obviously a big ask, so no hard feelings if this isn't given highest priority ;)

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    Status

    Should be written

    Status

    No status

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions