| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package common
- import (
- "runtime"
- "github.com/grafana/pyroscope-go"
- )
- func StartPyroScope() error {
- pyroscopeUrl := GetEnvOrDefaultString("PYROSCOPE_URL", "")
- if pyroscopeUrl == "" {
- return nil
- }
- pyroscopeAppName := GetEnvOrDefaultString("PYROSCOPE_APP_NAME", "new-api")
- pyroscopeBasicAuthUser := GetEnvOrDefaultString("PYROSCOPE_BASIC_AUTH_USER", "")
- pyroscopeBasicAuthPassword := GetEnvOrDefaultString("PYROSCOPE_BASIC_AUTH_PASSWORD", "")
- pyroscopeHostname := GetEnvOrDefaultString("HOSTNAME", "new-api")
- // These 2 lines are only required if you're using mutex or block profiling
- // Read the explanation below for how to set these rates:
- runtime.SetMutexProfileFraction(5)
- runtime.SetBlockProfileRate(5)
- _, err := pyroscope.Start(pyroscope.Config{
- ApplicationName: pyroscopeAppName,
- ServerAddress: pyroscopeUrl,
- BasicAuthUser: pyroscopeBasicAuthUser,
- BasicAuthPassword: pyroscopeBasicAuthPassword,
- Logger: nil,
- Tags: map[string]string{"hostname": pyroscopeHostname},
- ProfileTypes: []pyroscope.ProfileType{
- pyroscope.ProfileCPU,
- pyroscope.ProfileAllocObjects,
- pyroscope.ProfileAllocSpace,
- pyroscope.ProfileInuseObjects,
- pyroscope.ProfileInuseSpace,
- pyroscope.ProfileGoroutines,
- pyroscope.ProfileMutexCount,
- pyroscope.ProfileMutexDuration,
- pyroscope.ProfileBlockCount,
- pyroscope.ProfileBlockDuration,
- },
- })
- if err != nil {
- return err
- }
- return nil
- }
|