pprof middleware (#138)

Add pprof middleware, enabled by pprof directive.
This commit is contained in:
Miek Gieben
2016-04-28 10:26:58 +01:00
parent 7a8d943bcc
commit 2700eece2e
8 changed files with 130 additions and 4 deletions

View File

@@ -19,3 +19,7 @@ will just return "OK", when CoreDNS is healthy.
This middleware only needs to be enabled once.
## Examples
~~~
health localhost:8091
~~~

View File

@@ -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) {

View File

@@ -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
~~~

32
middleware/pprof/pprof.go Normal file
View File

@@ -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
}