diff --git a/src/collector/collector.go b/src/collector/collector.go new file mode 100644 index 0000000000000000000000000000000000000000..3bae8cc6940e27507984985f38ab224dd0cf5844 --- /dev/null +++ b/src/collector/collector.go @@ -0,0 +1,38 @@ +// collector/collector.go +package collector + +import ( + "net/http" + "log" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" + "github.com/prometheus/client_golang/prometheus/promhttp" + config "csudata.com/zqpool/src/config" +) + +var ( + FrontendConnectCount = promauto.NewGauge(prometheus.GaugeOpts{ + Namespace: "zqpool", + Subsystem: "gauge", + Name: "frontend_connect_count", + Help: "Number of frontend connections.", + }) +) + +func FrontendConnectCountIncrease() { + FrontendConnectCount.Inc() +} + +func FrontendConnectCountDecrease() { + FrontendConnectCount.Dec() +} + +func StartPromServer() { + port := config.Get("exporter_port") + if port == "" { + log.Fatal("exporter_port not set in configuration") + } + + http.Handle("/metrics", promhttp.Handler()) + log.Fatal(http.ListenAndServe(":"+port, nil)) +} diff --git a/src/example_zqpool.conf b/src/example_zqpool.conf index bb1597b91e580beb425c2e41be9499473fde2acf..72a05909cc3819ce366944970522171f6fd485d6 100644 --- a/src/example_zqpool.conf +++ b/src/example_zqpool.conf @@ -4,6 +4,8 @@ listen_addr = * mgr_port = 9380 mgr_addr = * +exporter_port=9816 # 指定 Prometheus 监控端口, 即 ZQPool 中 Exporter 暴露数据的端口 + pool.1.fe_max_conns = 3000 pool.1.fe_user=kuafu pool.1.fe_passwd=chase diff --git a/src/main.go b/src/main.go index 9eee47146aa66f173344bc9a91c21badd862f0a8..6016e08d39f3034db1cd7caeefb7d242d77475ca 100644 --- a/src/main.go +++ b/src/main.go @@ -15,6 +15,7 @@ import ( config "csudata.com/zqpool/src/config" mgrhttp "csudata.com/zqpool/src/mgrhttp" poolserver "csudata.com/zqpool/src/poolserver" + collector "csudata.com/zqpool/src/collector" ) func main() { @@ -54,6 +55,7 @@ func main() { return } + go collector.StartPromServer() go mgrhttp.StartHttpServer() var listenIp string diff --git a/src/poolserver/fe_be_logic.go b/src/poolserver/fe_be_logic.go index db97cfdd03897f9f57f88c4a8161a755f5a97581..ddf567c29e2fd293659ac16e1ca3140dacc1cb8c 100644 --- a/src/poolserver/fe_be_logic.go +++ b/src/poolserver/fe_be_logic.go @@ -7,6 +7,7 @@ import ( "time" "go.uber.org/zap" + collector "csudata.com/zqpool/src/collector" ) /*获得第一个消息包*/ @@ -508,6 +509,8 @@ func handleConnection(cliConn net.Conn) { ctx.pool = pool ctx.cachedPrepare.Init() + collector.FrontendConnectCountIncrease() + defer ctx.cachedPrepare.Discard() for { @@ -523,27 +526,32 @@ func handleConnection(cliConn net.Conn) { ctx.isGetBackend = false } cliConn.Close() + collector.FrontendConnectCountDecrease() return } if ctx.recvBuf[0] == 'X' { /* 这是Terminate消息*/ ctx.ProcessX() + collector.FrontendConnectCountDecrease() return } else if ctx.recvBuf[0] == 'Q' { /* 这是 Query 简单查询 */ err = ctx.ProcessQ() if err != nil { + collector.FrontendConnectCountDecrease() return } continue } else if ctx.recvBuf[0] == 'P' || ctx.recvBuf[0] == 'B' || ctx.recvBuf[0] == 'D' { err = ctx.ProcessExtendedQuery() if err != nil { + collector.FrontendConnectCountDecrease() return } continue } else if ctx.recvBuf[0] == 'C' { /* 这是Close消息 */ err = ctx.ProcessC() if err != nil { + collector.FrontendConnectCountDecrease() return } continue