syslog.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package metrics
  2. import (
  3. "fmt"
  4. "syslog"
  5. "time"
  6. )
  7. // Output each metric in the given registry to syslog periodically using
  8. // the given syslogger. The interval is to be given in seconds.
  9. func Syslog(r Registry, interval int, w *syslog.Writer) {
  10. for {
  11. r.EachCounter(func(name string, c Counter) {
  12. w.Info(fmt.Sprintf("counter %s: count: %d", name, c.Count()))
  13. })
  14. r.EachGauge(func(name string, g Gauge) {
  15. w.Info(fmt.Sprintf("gauge %s: value: %d", name, g.Value()))
  16. })
  17. r.RunHealthchecks()
  18. r.EachHealthcheck(func(name string, h Healthcheck) {
  19. w.Info(fmt.Sprintf("healthcheck %s: error: %v", name, h.Error()))
  20. })
  21. r.EachHistogram(func(name string, h Histogram) {
  22. ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
  23. w.Info(fmt.Sprintf(
  24. "histogram %s: count: %d min: %d max: %d mean: %.2f stddev: %.2f median: %.2f 75%%: %.2f 95%%: %.2f 99%%: %.2f 99.9%%: %.2f",
  25. name,
  26. h.Count(),
  27. h.Min(),
  28. h.Max(),
  29. h.Mean(),
  30. h.StdDev(),
  31. ps[0],
  32. ps[1],
  33. ps[2],
  34. ps[3],
  35. ps[4],
  36. ))
  37. })
  38. r.EachMeter(func(name string, m 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. })
  49. r.EachTimer(func(name string, t Timer) {
  50. ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
  51. w.Info(fmt.Sprintf(
  52. "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: %.2f",
  53. name,
  54. t.Count(),
  55. t.Min(),
  56. t.Max(),
  57. t.Mean(),
  58. t.StdDev(),
  59. ps[0],
  60. ps[1],
  61. ps[2],
  62. ps[3],
  63. ps[4],
  64. t.Rate1(),
  65. t.Rate5(),
  66. t.Rate15(),
  67. t.RateMean(),
  68. ))
  69. })
  70. time.Sleep(int64(1e9) * int64(interval))
  71. }
  72. }