1.7 KiB
1.7 KiB
manhole
An opinionated HTTP manhole into Go processes.
Assumptions This Package Makes
- Make each server instance have a unique HTTP port that is randomized by default. This makes it very hard to accidentally route this manhole to the outside world. If more assurance is required I personally suggest using yubikey totp, but do research.
- Application code does not touch
http.DefaultServeMux
'. This is so that administative control rods can be dynamically flipped in the case they are needed. - pprof endpoints added to
http.DefaultServeMux
. This allows easy access to [pprof runtime tracing][pprof-tracing] to debug issues on long-running applications like HTTP services. - Make the manhole slightly inconvenient to put into place in production. This helps make sure that this tool remains a debugging tool and not a part of a long-term production rollout.
Usage
Compile this as a plugin:
$ go get -d github.com/Xe/gopreload/manhole
$ go build -buildmode plugin -o manhole.so github.com/Xe/gopreload/manhole
Then add gopreload
to your application:
// gopreload.go
package main
/*
This file is separate to make it very easy to both add into an application, but
also very easy to remove.
*/
import _ "github.com/Xe/gopreload"
And at runtime add the manhole.so
file you created earlier to the target system
somehow and add the following environment variable to its run configuration:
GO_PRELOAD=/path/to/manhole.so