mirror of
https://github.com/coredns/coredns.git
synced 2025-11-01 10:43:17 -04:00
pprof middleware (#138)
Add pprof middleware, enabled by pprof directive.
This commit is contained in:
@@ -19,3 +19,7 @@ will just return "OK", when CoreDNS is healthy.
|
||||
This middleware only needs to be enabled once.
|
||||
|
||||
## Examples
|
||||
|
||||
~~~
|
||||
health localhost:8091
|
||||
~~~
|
||||
|
||||
@@ -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) {
|
||||
|
||||
25
middleware/pprof/README.md
Normal file
25
middleware/pprof/README.md
Normal 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
32
middleware/pprof/pprof.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user