diff options
author | 2016-04-28 10:26:58 +0100 | |
---|---|---|
committer | 2016-04-28 10:26:58 +0100 | |
commit | 2700eece2ee1e7031f935be71e3bb1c8fd4cf05b (patch) | |
tree | 58b5e85d2474f743179c54d64388c77fafdf56d7 /middleware | |
parent | 7a8d943bccc7ec0d21e13374c836cf9197996e10 (diff) | |
download | coredns-2700eece2ee1e7031f935be71e3bb1c8fd4cf05b.tar.gz coredns-2700eece2ee1e7031f935be71e3bb1c8fd4cf05b.tar.zst coredns-2700eece2ee1e7031f935be71e3bb1c8fd4cf05b.zip |
pprof middleware (#138)
Add pprof middleware, enabled by pprof directive.
Diffstat (limited to 'middleware')
-rw-r--r-- | middleware/health/README.md | 4 | ||||
-rw-r--r-- | middleware/metrics/handler.go | 4 | ||||
-rw-r--r-- | middleware/pprof/README.md | 25 | ||||
-rw-r--r-- | middleware/pprof/pprof.go | 32 |
4 files changed, 63 insertions, 2 deletions
diff --git a/middleware/health/README.md b/middleware/health/README.md index af3b2ddd4..efab90a4a 100644 --- a/middleware/health/README.md +++ b/middleware/health/README.md @@ -19,3 +19,7 @@ will just return "OK", when CoreDNS is healthy. This middleware only needs to be enabled once. ## Examples + +~~~ +health localhost:8091 +~~~ diff --git a/middleware/metrics/handler.go b/middleware/metrics/handler.go index eeba5acb2..1a61f3e11 100644 --- a/middleware/metrics/handler.go +++ b/middleware/metrics/handler.go @@ -3,10 +3,10 @@ package metrics import ( "time" - "golang.org/x/net/context" - "github.com/miekg/coredns/middleware" + "github.com/miekg/dns" + "golang.org/x/net/context" ) func (m Metrics) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) { diff --git a/middleware/pprof/README.md b/middleware/pprof/README.md new file mode 100644 index 000000000..7798f5a63 --- /dev/null +++ b/middleware/pprof/README.md @@ -0,0 +1,25 @@ +# pprof + +pprof publishes runtime profiling data at endpoints under /debug/pprof. You can visit /debug/pprof +on your site for an index of the available endpoints. By default it will listen on localhost:8053. + +> This is a debugging tool. Certain requests (such as collecting execution traces) can be slow. If +> you use pprof on a live site, consider restricting access or enabling it only temporarily. + +For more information, please see [Go's pprof +documentation](https://golang.org/pkg/net/http/pprof/s://golang.org/pkg/net/http/pprof/) and read +[Profiling Go Programs](https://blog.golang.org/profiling-go-programs). + +## Syntax + +~~~ +pprof +~~~ + +## Examples + +Enable pprof endpoints: + +~~~ +pprof +~~~ diff --git a/middleware/pprof/pprof.go b/middleware/pprof/pprof.go new file mode 100644 index 000000000..677690ff8 --- /dev/null +++ b/middleware/pprof/pprof.go @@ -0,0 +1,32 @@ +package pprof + +import ( + "log" + "net/http" + _ "net/http/pprof" + + "github.com/miekg/coredns/middleware" + + "github.com/miekg/dns" + "golang.org/x/net/context" +) + +const addr = "localhost:8053" + +type Handler struct { + Next middleware.Handler +} + +// ServeDNS passes all other requests up the chain. +func (h *Handler) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) { + return h.Next.ServeDNS(ctx, w, r) +} + +func (h *Handler) Start() error { + go func() { + if err := http.ListenAndServe(addr, nil); err != nil { + log.Printf("[ERROR] Failed to start pprof handler: %s", err) + } + }() + return nil +} |