server.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package prometheus
  2. import (
  3. "github.com/prometheus/client_golang/prometheus"
  4. "github.com/fatedier/frp/server/metrics"
  5. )
  6. const (
  7. namespace = "frp"
  8. serverSubsystem = "server"
  9. )
  10. var ServerMetrics metrics.ServerMetrics = newServerMetrics()
  11. type serverMetrics struct {
  12. clientCount prometheus.Gauge
  13. proxyCount *prometheus.GaugeVec
  14. proxyCountDetailed *prometheus.GaugeVec
  15. connectionCount *prometheus.GaugeVec
  16. trafficIn *prometheus.CounterVec
  17. trafficOut *prometheus.CounterVec
  18. }
  19. func (m *serverMetrics) NewClient() {
  20. m.clientCount.Inc()
  21. }
  22. func (m *serverMetrics) CloseClient() {
  23. m.clientCount.Dec()
  24. }
  25. func (m *serverMetrics) NewProxy(name string, proxyType string) {
  26. m.proxyCount.WithLabelValues(proxyType).Inc()
  27. m.proxyCountDetailed.WithLabelValues(proxyType, name).Inc()
  28. }
  29. func (m *serverMetrics) CloseProxy(name string, proxyType string) {
  30. m.proxyCount.WithLabelValues(proxyType).Dec()
  31. m.proxyCountDetailed.WithLabelValues(proxyType, name).Dec()
  32. }
  33. func (m *serverMetrics) OpenConnection(name string, proxyType string) {
  34. m.connectionCount.WithLabelValues(name, proxyType).Inc()
  35. }
  36. func (m *serverMetrics) CloseConnection(name string, proxyType string) {
  37. m.connectionCount.WithLabelValues(name, proxyType).Dec()
  38. }
  39. func (m *serverMetrics) AddTrafficIn(name string, proxyType string, trafficBytes int64) {
  40. m.trafficIn.WithLabelValues(name, proxyType).Add(float64(trafficBytes))
  41. }
  42. func (m *serverMetrics) AddTrafficOut(name string, proxyType string, trafficBytes int64) {
  43. m.trafficOut.WithLabelValues(name, proxyType).Add(float64(trafficBytes))
  44. }
  45. func newServerMetrics() *serverMetrics {
  46. m := &serverMetrics{
  47. clientCount: prometheus.NewGauge(prometheus.GaugeOpts{
  48. Namespace: namespace,
  49. Subsystem: serverSubsystem,
  50. Name: "client_counts",
  51. Help: "The current client counts of frps",
  52. }),
  53. proxyCount: prometheus.NewGaugeVec(prometheus.GaugeOpts{
  54. Namespace: namespace,
  55. Subsystem: serverSubsystem,
  56. Name: "proxy_counts",
  57. Help: "The current proxy counts",
  58. }, []string{"type"}),
  59. proxyCountDetailed: prometheus.NewGaugeVec(prometheus.GaugeOpts{
  60. Namespace: namespace,
  61. Subsystem: serverSubsystem,
  62. Name: "proxy_counts_detailed",
  63. Help: "The current number of proxies grouped by type and name",
  64. }, []string{"type", "name"}),
  65. connectionCount: prometheus.NewGaugeVec(prometheus.GaugeOpts{
  66. Namespace: namespace,
  67. Subsystem: serverSubsystem,
  68. Name: "connection_counts",
  69. Help: "The current connection counts",
  70. }, []string{"name", "type"}),
  71. trafficIn: prometheus.NewCounterVec(prometheus.CounterOpts{
  72. Namespace: namespace,
  73. Subsystem: serverSubsystem,
  74. Name: "traffic_in",
  75. Help: "The total in traffic",
  76. }, []string{"name", "type"}),
  77. trafficOut: prometheus.NewCounterVec(prometheus.CounterOpts{
  78. Namespace: namespace,
  79. Subsystem: serverSubsystem,
  80. Name: "traffic_out",
  81. Help: "The total out traffic",
  82. }, []string{"name", "type"}),
  83. }
  84. prometheus.MustRegister(m.clientCount)
  85. prometheus.MustRegister(m.proxyCount)
  86. prometheus.MustRegister(m.proxyCountDetailed)
  87. prometheus.MustRegister(m.connectionCount)
  88. prometheus.MustRegister(m.trafficIn)
  89. prometheus.MustRegister(m.trafficOut)
  90. return m
  91. }