runtime.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package metrics
  2. import "runtime"
  3. // Register metrics for the Go runtime statistics exported in
  4. // runtime.MemStats. The metrics are named by their fully-qualified
  5. // Go symbols, i.e. runtime.MemStatsAlloc. In addition to
  6. // runtime.MemStats, register the return value of runtime.Goroutines()
  7. // as runtime.Goroutines.
  8. func RegisterRuntimeMemStats(r Registry) {
  9. r.RegisterGauge("runtime.Goroutines", NewGauge())
  10. r.RegisterGauge("runtime.MemStats.Alloc", NewGauge())
  11. r.RegisterGauge("runtime.MemStats.TotalAlloc", NewGauge())
  12. r.RegisterGauge("runtime.MemStats.Sys", NewGauge())
  13. r.RegisterGauge("runtime.MemStats.Lookups", NewGauge())
  14. r.RegisterGauge("runtime.MemStats.Mallocs", NewGauge())
  15. r.RegisterGauge("runtime.MemStats.Frees", NewGauge())
  16. r.RegisterGauge("runtime.MemStats.HeapAlloc", NewGauge())
  17. r.RegisterGauge("runtime.MemStats.HeapSys", NewGauge())
  18. r.RegisterGauge("runtime.MemStats.HeapIdle", NewGauge())
  19. r.RegisterGauge("runtime.MemStats.HeapInuse", NewGauge())
  20. r.RegisterGauge("runtime.MemStats.HeapObjects", NewGauge())
  21. r.RegisterGauge("runtime.MemStats.StackInuse", NewGauge())
  22. r.RegisterGauge("runtime.MemStats.StackSys", NewGauge())
  23. r.RegisterGauge("runtime.MemStats.MSpanInuse", NewGauge())
  24. r.RegisterGauge("runtime.MemStats.MSpanSys", NewGauge())
  25. r.RegisterGauge("runtime.MemStats.MCacheInuse", NewGauge())
  26. r.RegisterGauge("runtime.MemStats.MCacheSys", NewGauge())
  27. r.RegisterGauge("runtime.MemStats.BuckHashSys", NewGauge())
  28. r.RegisterGauge("runtime.MemStats.NextGC", NewGauge())
  29. r.RegisterGauge("runtime.MemStats.PauseTotalNs", NewGauge())
  30. r.RegisterHistogram("runtime.MemStats.PauseNs",
  31. NewHistogram(NewExpDecaySample(1028, 0.015)))
  32. r.RegisterGauge("runtime.MemStats.NumGC", NewGauge())
  33. r.RegisterGauge("runtime.MemStats.EnableGC", NewGauge())
  34. r.RegisterGauge("runtime.MemStats.DebugGC", NewGauge())
  35. }
  36. // Capture new values for the Go runtime statistics exported in
  37. // runtime.MemStats. This is designed to be called in a background
  38. // goroutine. Giving a registry which has not been given to
  39. // RegisterRuntimeMemStats will panic. If the second parameter is
  40. // false, the counters will be left to the lazy updates provided by
  41. // the runtime.
  42. func CaptureRuntimeMemStats(r Registry, updateMemStats bool) {
  43. if updateMemStats {
  44. runtime.UpdateMemStats()
  45. }
  46. r.GetGauge("runtime.Goroutines").Update(int64(runtime.Goroutines()))
  47. r.GetGauge("runtime.MemStats.Alloc").Update(
  48. int64(runtime.MemStats.Alloc))
  49. r.GetGauge("runtime.MemStats.TotalAlloc").Update(
  50. int64(runtime.MemStats.TotalAlloc))
  51. r.GetGauge("runtime.MemStats.Sys").Update(
  52. int64(runtime.MemStats.Sys))
  53. r.GetGauge("runtime.MemStats.Lookups").Update(
  54. int64(runtime.MemStats.Lookups))
  55. r.GetGauge("runtime.MemStats.Mallocs").Update(
  56. int64(runtime.MemStats.Mallocs))
  57. r.GetGauge("runtime.MemStats.Frees").Update(
  58. int64(runtime.MemStats.Frees))
  59. r.GetGauge("runtime.MemStats.HeapAlloc").Update(
  60. int64(runtime.MemStats.HeapAlloc))
  61. r.GetGauge("runtime.MemStats.HeapSys").Update(
  62. int64(runtime.MemStats.HeapSys))
  63. r.GetGauge("runtime.MemStats.HeapIdle").Update(
  64. int64(runtime.MemStats.HeapIdle))
  65. r.GetGauge("runtime.MemStats.HeapInuse").Update(
  66. int64(runtime.MemStats.HeapInuse))
  67. r.GetGauge("runtime.MemStats.HeapObjects").Update(
  68. int64(runtime.MemStats.HeapObjects))
  69. r.GetGauge("runtime.MemStats.StackInuse").Update(
  70. int64(runtime.MemStats.StackInuse))
  71. r.GetGauge("runtime.MemStats.StackSys").Update(
  72. int64(runtime.MemStats.StackSys))
  73. r.GetGauge("runtime.MemStats.MSpanInuse").Update(
  74. int64(runtime.MemStats.MSpanInuse))
  75. r.GetGauge("runtime.MemStats.MSpanSys").Update(
  76. int64(runtime.MemStats.MSpanSys))
  77. r.GetGauge("runtime.MemStats.MCacheInuse").Update(
  78. int64(runtime.MemStats.MCacheInuse))
  79. r.GetGauge("runtime.MemStats.MCacheSys").Update(
  80. int64(runtime.MemStats.MCacheSys))
  81. r.GetGauge("runtime.MemStats.BuckHashSys").Update(
  82. int64(runtime.MemStats.BuckHashSys))
  83. r.GetGauge("runtime.MemStats.NextGC").Update(
  84. int64(runtime.MemStats.NextGC))
  85. r.GetGauge("runtime.MemStats.PauseTotalNs").Update(
  86. int64(runtime.MemStats.PauseTotalNs))
  87. r.GetHistogram("runtime.MemStats.PauseNs").Update(
  88. int64(runtime.MemStats.PauseNs[0]))
  89. r.GetGauge("runtime.MemStats.NumGC").Update(
  90. int64(runtime.MemStats.NumGC))
  91. if runtime.MemStats.EnableGC {
  92. r.GetGauge("runtime.MemStats.EnableGC").Update(1)
  93. } else {
  94. r.GetGauge("runtime.MemStats.EnableGC").Update(0)
  95. }
  96. if runtime.MemStats.EnableGC {
  97. r.GetGauge("runtime.MemStats.DebugGC").Update(1)
  98. } else {
  99. r.GetGauge("runtime.MemStats.DebugGC").Update(0)
  100. }
  101. }