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") mutexRate := GetEnvOrDefault("PYROSCOPE_MUTEX_RATE", 5) blockRate := GetEnvOrDefault("PYROSCOPE_BLOCK_RATE", 5) runtime.SetMutexProfileFraction(mutexRate) runtime.SetBlockProfileRate(blockRate) _, 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 }