chore(e2e): Added build tag for enabling pprof tracing (#5839)

* added pprof tag and make command
* updated tracing readme
pull/5849/head
dillanb-hashi 8 months ago committed by GitHub
parent 7040374b6f
commit 828148934b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -66,6 +66,12 @@ install: build
install-no-plugins: export SKIP_PLUGIN_BUILD=1
install-no-plugins: install
.PHONY: build-pprof
build-pprof: BUILD_TAGS+=pprof
build-pprof:
@echo "==> Building Boundary with memory pprof enabled"
@CGO_ENABLED=$(CGO_ENABLED) BUILD_TAGS='$(BUILD_TAGS)' sh -c "'$(CURDIR)/scripts/build.sh'"
.PHONY: build-memprof
build-memprof: BUILD_TAGS+=memprofiler
build-memprof:

@ -0,0 +1,14 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
//go:build !pprof
// +build !pprof
package base
import (
"context"
)
func StartPprof(_ context.Context) {
}

@ -0,0 +1,28 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
//go:build pprof
// +build pprof
package base
import (
"context"
"errors"
"net/http"
"github.com/hashicorp/boundary/internal/event"
_ "net/http/pprof"
)
func StartPprof(ctx context.Context) {
const op = "base.StartPprof"
go func() {
const addr = "localhost:6060"
event.WriteSysEvent(ctx, op, "starting pprof HTTP server", "addr", addr)
if err := http.ListenAndServe(addr, nil); err != nil && !errors.Is(err, http.ErrServerClosed) {
event.WriteSysEvent(ctx, op, "failed to serve pprof HTTP server", "error", err.Error())
}
}()
}

@ -722,6 +722,8 @@ func (c *Command) Run(args []string) int {
return base.CommandCliError
}
base.StartPprof(c.Context)
if c.flagRecoveryKey != "" {
c.Config.DevRecoveryKey = c.flagRecoveryKey
}

@ -217,6 +217,7 @@ func (c *Command) Run(args []string) int {
c.WorkerAuthDebuggingEnabled.Store(c.Config.EnableWorkerAuthDebugging)
base.StartMemProfiler(c.Context)
base.StartPprof(c.Context)
// Note: the checks directly after this must remain where they are because
// they rely on the state of configured KMSes.

@ -1,23 +1,10 @@
# Tracing in Boundary
Boundary includes a small number of runtime tracing user regions, which can be used to see where Boundary spends its time during execution.
To create a trace, we first need to expose the pprof endpoint. It is disabled by default. Exposing the pprof endpoint is as simple as importing the correct package and starting a HTTP server anywhere in Boundary:
To create a trace, we first need to expose the pprof endpoint. It is disabled by default. Exposing the pprof endpoint is as simple as building with the `pprof` build tag or running
```go
package anything
import (
"log"
"net/http"
_ "net/http/pprof"
)
...
go func() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}()
...
```
make build-pprof
```
This will create a new HTTP endpoint on `localhost:6060` of the running binary. As such, it's only accessible to the users on the same machine.

Loading…
Cancel
Save