2 comments

[ 4.5 ms ] story [ 10.1 ms ] thread
I like Matt Holt and Caddy. My feedback here is that it would be useful to do profiling in a language-agnostic way so that other servers can participate and publish results! In general I think what users want to see is a timeseries of mem/cpu usage given an easy-to-characterize workload. The workload could be something like 'traffic hits a noop GET endpoint and who's rate doubles every 5 seconds'. Plenty of tools exist to do this kind of testing (e.g. ab for generating traffic, htop for measuring resource load; I'm sure many other options exist on linux).

It's tempting to use language specific profilers because they give you so much "for free" - they are particularly useful for the devs of the server itself, since they give great insight into the inner workings, can help identify bottlenecks. But in a world where everyone is comparison shopping, black box, language agnostic profiling would be more useful to consumers. Heck you might even go in with other server vendors to build something! A nice opportunity for collaboration!

The pprof format is not tied to Go. From my understanding, it's used within Google across multiple languages. The format is defined in the pprof repository[0], and the visualization tool is source-language agnostic. I've seen libraries in numerous languages (e.g. Python, Java) to publish profiles in pprof format. This is an indicator the pprof format has become de-facto. Grafana Pyroscope[1] is a tool that's capable of parsing the pprof format, agnostic to the source programming language, and has instructions for Go, Java, Python, Ruby, node.js, Rust, and .NET.

My understanding is that you're searching for a combination of the profiles, metrics, and tracing. Caddy supports all 3.

[0] https://github.com/google/pprof/blob/main/doc/README.md

[1] https://grafana.com/docs/pyroscope/latest/

metrics and tracing need to be manually enabled (for now, perhaps)