syslog.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // +build !windows
  2. package metrics
  3. import (
  4. "fmt"
  5. "log/syslog"
  6. "time"
  7. )
  8. // Output each metric in the given registry to syslog periodically using
  9. // the given syslogger.
  10. func Syslog(r Registry, d time.Duration, w *syslog.Writer) {
  11. for {
  12. r.Each(func(name string, i interface{}) {
  13. switch m := i.(type) {
  14. case Counter:
  15. w.Info(fmt.Sprintf("counter %s: count: %d", name, m.Count()))
  16. case Gauge:
  17. w.Info(fmt.Sprintf("gauge %s: value: %d", name, m.Value()))
  18. case Healthcheck:
  19. m.Check()
  20. w.Info(fmt.Sprintf("healthcheck %s: error: %v", name, m.Error()))
  21. case Histogram:
  22. s := m.Sample()
  23. ps := s.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
  24. w.Info(fmt.Sprintf(
  25. "histogram %s: count: %d min: %d max: %d mean: %.2f stddev: %.2f median: %.2f 75%%: %.2f 95%%: %.2f 99%%: %.2f 99.9%%: %.2f",
  26. name,
  27. s.Count(),
  28. s.Min(),
  29. s.Max(),
  30. s.Mean(),
  31. s.StdDev(),
  32. ps[0],
  33. ps[1],
  34. ps[2],
  35. ps[3],
  36. ps[4],
  37. ))
  38. case Meter:
  39. w.Info(fmt.Sprintf(
  40. "meter %s: count: %d 1-min: %.2f 5-min: %.2f 15-min: %.2f mean: %.2f",
  41. name,
  42. m.Count(),
  43. m.Rate1(),
  44. m.Rate5(),
  45. m.Rate15(),
  46. m.RateMean(),
  47. ))
  48. case Timer:
  49. ps := m.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
  50. w.Info(fmt.Sprintf(
  51. "timer %s: count: %d min: %d max: %d mean: %.2f stddev: %.2f median: %.2f 75%%: %.2f 95%%: %.2f 99%%: %.2f 99.9%%: %.2f 1-min: %.2f 5-min: %.2f 15-min: %.2f mean-rate: %.2f",
  52. name,
  53. m.Count(),
  54. m.Min(),
  55. m.Max(),
  56. m.Mean(),
  57. m.StdDev(),
  58. ps[0],
  59. ps[1],
  60. ps[2],
  61. ps[3],
  62. ps[4],
  63. m.Rate1(),
  64. m.Rate5(),
  65. m.Rate15(),
  66. m.RateMean(),
  67. ))
  68. }
  69. })
  70. time.Sleep(d)
  71. }
  72. }