This is a golang integration for Pyroscope β open source continuous profiling platform.
For more information, please visit our golang integration documentation.
To start profiling a Go application, you need to include our Go module in your app:
go get github.com/grafana/pyroscope-go
Then add the following code to your application:
package main import "github.com/grafana/pyroscope-go" func main() { pyroscope.Start(pyroscope.Config{ ApplicationName: "simple.golang.app", // replace this with the address of pyroscope server ServerAddress: "http://pyroscope-server:4040", // you can disable logging by setting this to nil Logger: pyroscope.StandardLogger, // Optional HTTP Basic authentication (Grafana Cloud) BasicAuthUser: "<User>", BasicAuthPassword: "<Password>", // Optional Pyroscope tenant ID (only needed if using multi-tenancy). Not needed for Grafana Cloud. // TenantID: "<TenantID>", // by default all profilers are enabled, // but you can select the ones you want to use: ProfileTypes: []pyroscope.ProfileType{ pyroscope.ProfileCPU, pyroscope.ProfileAllocObjects, pyroscope.ProfileAllocSpace, pyroscope.ProfileInuseObjects, pyroscope.ProfileInuseSpace, }, }) // your code goes here }
It is possible to add tags (labels) to the profiling data. These tags can be used to filter the data in the UI.
// these two ways of adding tags are equivalent: pyroscope.TagWrapper(context.Background(), pyroscope.Labels("controller", "slow_controller"), func(c context.Context) { slowCode() }) pprof.Do(context.Background(), pprof.Labels("controller", "slow_controller"), func(c context.Context) { slowCode() })
Go integration supports pull mode, which means that you can profile applications without adding any extra code. For that to work you will need to make sure you have profiling routes (/debug/pprof) enabled in your http server. Generally, that means that you need to add net/http/pprof package:
import _ "net/http/pprof"
Check out the examples directory in our repository to learn more. π₯
This package is maintained by @grafana/pyroscope-go. Mention this team on issues or PRs for feedback.