Visualise Go program runtime metrics data in real time: heap, objects, goroutines, GC pauses, scheduler, etc. in your browser.
Download the latest version:
go get github.com/arl/statsviz@latest
Register statsviz endpoint on your server http.ServeMux (preferred method):
mux := http.NewServeMux()
statsviz.Register(mux)
Or register on http.DefaultServeMux
:
statsviz.RegisterDefault()
By default statsviz is served at /debug/statsviz/
.
If your application is not already running an HTTP server, you need to start
one. Add "net/http"
and "log"
to your imports and the following code to your
main
function:
go func() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}()
Then open your browser at http://localhost:6060/debug/statsviz/.
Statsviz serves 2 HTTP endpoints:
-
The first one (
/debug/statsviz
) serves a web page with statsviz user interface, showing initially empty plots. -
The second HTTP handler (
/debug/statsviz/ws
) listens for a WebSocket connection that will be initiated by statsviz web page as soon as it's loaded in your browser.
That's it, now your application sends all runtime/metrics data points to the web page, once per second.
Data points are stored in-browser in a circular buffer which keep tracks of a predefined number of datapoints.
Check out the API reference on pkg.go.dev.
The controls at the top of the page act on all plots:
- the groom icon shows/hides the vertical lines representing garbage collections.
- the time range selector defines the visualized time span.
- the play/pause icon allows to stop plots from being refreshed.
On top of each plot you'll find 2 icons:
- the camera icon downloads the plot as a PNG image.
- the info icon shows information about the current plot.
Check out the _example directory to see various ways to use Statsviz, such as:
- use of
http.DefaultServeMux
or your ownhttp.ServeMux
- wrap HTTP handler behind a middleware
- register the web page at
/foo/bar
instead of/debug/statviz
- use
https://
rather thanhttp://
- register statsviz handlers with various Go HTTP libraries/frameworks:
Use the discussions sections for questions.
Please use issues for bugs and feature requests.
Pull-requests are welcome! More details in CONTRIBUTING.md.
See CHANGELOG.md.
See MIT License