pyro.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package common
  2. import (
  3. "runtime"
  4. "github.com/grafana/pyroscope-go"
  5. )
  6. func StartPyroScope() error {
  7. pyroscopeUrl := GetEnvOrDefaultString("PYROSCOPE_URL", "")
  8. if pyroscopeUrl == "" {
  9. return nil
  10. }
  11. pyroscopeAppName := GetEnvOrDefaultString("PYROSCOPE_APP_NAME", "new-api")
  12. pyroscopeBasicAuthUser := GetEnvOrDefaultString("PYROSCOPE_BASIC_AUTH_USER", "")
  13. pyroscopeBasicAuthPassword := GetEnvOrDefaultString("PYROSCOPE_BASIC_AUTH_PASSWORD", "")
  14. pyroscopeHostname := GetEnvOrDefaultString("HOSTNAME", "new-api")
  15. mutexRate := GetEnvOrDefault("PYROSCOPE_MUTEX_RATE", 5)
  16. blockRate := GetEnvOrDefault("PYROSCOPE_BLOCK_RATE", 5)
  17. runtime.SetMutexProfileFraction(mutexRate)
  18. runtime.SetBlockProfileRate(blockRate)
  19. _, err := pyroscope.Start(pyroscope.Config{
  20. ApplicationName: pyroscopeAppName,
  21. ServerAddress: pyroscopeUrl,
  22. BasicAuthUser: pyroscopeBasicAuthUser,
  23. BasicAuthPassword: pyroscopeBasicAuthPassword,
  24. Logger: nil,
  25. Tags: map[string]string{"hostname": pyroscopeHostname},
  26. ProfileTypes: []pyroscope.ProfileType{
  27. pyroscope.ProfileCPU,
  28. pyroscope.ProfileAllocObjects,
  29. pyroscope.ProfileAllocSpace,
  30. pyroscope.ProfileInuseObjects,
  31. pyroscope.ProfileInuseSpace,
  32. pyroscope.ProfileGoroutines,
  33. pyroscope.ProfileMutexCount,
  34. pyroscope.ProfileMutexDuration,
  35. pyroscope.ProfileBlockCount,
  36. pyroscope.ProfileBlockDuration,
  37. },
  38. })
  39. if err != nil {
  40. return err
  41. }
  42. return nil
  43. }