diff --git a/cmd/open_im_api/main.go b/cmd/open_im_api/main.go index 38889574b..e9e253338 100644 --- a/cmd/open_im_api/main.go +++ b/cmd/open_im_api/main.go @@ -46,7 +46,8 @@ func main() { f, _ := os.Create("../logs/api.log") gin.DefaultWriter = io.MultiWriter(f) // gin.SetMode(gin.DebugMode) - r := gin.Default() + r := gin.New() + r.Use(gin.Recovery()) r.Use(utils.CorsHandler()) log.Info("load config: ", config.Config) r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) diff --git a/config/config.yaml b/config/config.yaml index d277b6442..2224e914f 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -20,6 +20,8 @@ mysql: dbMaxOpenConns: 100 dbMaxIdleConns: 10 dbMaxLifeTime: 5 + logLevel: 1 #1=slient 2=error 3=warn 4=info + slowThreshold: 500 mongo: dbUri: ""#当dbUri值不为空则直接使用该值 diff --git a/docker-compose.yaml b/docker-compose.yaml index 81697ebb6..8a903890a 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -153,11 +153,11 @@ services: grafana: image: grafana/grafana volumes: - # - ./grafana/dashboards/dashboard.json:/var/lib/grafana/dashboards/dashboard.json - # - ./grafana/provisioning/dashboard.yaml:/etc/grafana/provisioning/dashboards/dashboard.yaml - ./docker-compose_cfg/datasource-compose.yaml:/etc/grafana/provisioning/datasources/datasource.yaml - ./docker-compose_cfg/grafana.ini:/etc/grafana/grafana.ini - - ./docker-compose_cfg/node-exporter-full_rev1.json:/var/lib/grafana/dashboards/node-exporter-full_rev1.json + # - ./docker-compose_cfg/node-exporter-full_rev1.json:/var/lib/grafana/dashboards/node-exporter-full_rev1.json + # - ./components/grafana:/var/lib/grafana + - ./docker-compose_cfg/grafana.db:/var/lib/grafana/grafana.db container_name: grafana ports: - 10007:10007 diff --git a/internal/cms_api/router.go b/internal/cms_api/router.go index 69e3357d0..4047a46d3 100644 --- a/internal/cms_api/router.go +++ b/internal/cms_api/router.go @@ -18,7 +18,8 @@ import ( func NewGinRouter() *gin.Engine { gin.SetMode(gin.ReleaseMode) - baseRouter := gin.Default() + baseRouter := gin.New() + baseRouter.Use() if config.Config.Prometheus.Enable { baseRouter.GET("/metrics", promePkg.PrometheusHandler()) } diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index a9ab75569..0947cb4f9 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -5,6 +5,7 @@ import ( "Open_IM/pkg/common/db" imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model" "Open_IM/pkg/common/log" + promePkg "Open_IM/pkg/common/prometheus" "Open_IM/pkg/common/token_verify" "Open_IM/pkg/grpc-etcdv3/getcdv3" pbAuth "Open_IM/pkg/proto/auth" @@ -16,11 +17,30 @@ import ( "strconv" "strings" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" + "Open_IM/pkg/common/config" "google.golang.org/grpc" ) +var ( + userLoginCounter prometheus.Counter + userRegisterCounter prometheus.Counter +) + +func (rpc *rpcAuth) initPrometheus() { + userLoginCounter = promauto.NewCounter(prometheus.CounterOpts{ + Name: "user_login", + Help: "The number of user login", + }) + userRegisterCounter = promauto.NewCounter(prometheus.CounterOpts{ + Name: "user_register", + Help: "The number of user register", + }) +} + func (rpc *rpcAuth) UserRegister(_ context.Context, req *pbAuth.UserRegisterReq) (*pbAuth.UserRegisterResp, error) { log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc args ", req.String()) var user db.User @@ -35,6 +55,7 @@ func (rpc *rpcAuth) UserRegister(_ context.Context, req *pbAuth.UserRegisterReq) log.NewError(req.OperationID, errMsg, user) return &pbAuth.UserRegisterResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}}, nil } + promePkg.PromeInc(userRegisterCounter) log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc return ", pbAuth.UserRegisterResp{CommonResp: &pbAuth.CommonResp{}}) return &pbAuth.UserRegisterResp{CommonResp: &pbAuth.CommonResp{}}, nil } @@ -47,6 +68,7 @@ func (rpc *rpcAuth) UserToken(_ context.Context, req *pbAuth.UserTokenReq) (*pbA log.NewError(req.OperationID, errMsg) return &pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}}, nil } + promePkg.PromeInc(userLoginCounter) log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc return ", pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{}, Token: tokens, ExpiredTime: expTime}) return &pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{}, Token: tokens, ExpiredTime: expTime}, nil } @@ -141,6 +163,9 @@ func (rpc *rpcAuth) Run() { } log.NewInfo(operationID, "RegisterAuthServer ok ", rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), rpcRegisterIP, rpc.rpcPort, rpc.rpcRegisterName) + if config.Config.Prometheus.Enable { + rpc.initPrometheus() + } err = srv.Serve(listener) if err != nil { log.NewError(operationID, "Serve failed ", err.Error()) diff --git a/internal/rpc/msg/rpcChat.go b/internal/rpc/msg/rpcChat.go index fde8536be..2c4c6270c 100644 --- a/internal/rpc/msg/rpcChat.go +++ b/internal/rpc/msg/rpcChat.go @@ -9,10 +9,18 @@ import ( "Open_IM/pkg/grpc-etcdv3/getcdv3" "Open_IM/pkg/proto/msg" "Open_IM/pkg/utils" - "google.golang.org/grpc" "net" "strconv" "strings" + + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" + "google.golang.org/grpc" +) + +var ( + sendMsgSuccessCounter prometheus.Counter + sendMsgFailedCounter prometheus.Counter ) type rpcChat struct { @@ -46,6 +54,17 @@ func NewRpcChatServer(port int) *rpcChat { return &rc } +func (rpc *rpcChat) initPrometheus() { + sendMsgSuccessCounter = promauto.NewCounter(prometheus.CounterOpts{ + Name: "send_msg_success", + Help: "The number of send msg success", + }) + sendMsgFailedCounter = promauto.NewCounter(prometheus.CounterOpts{ + Name: "send_msg_failed", + Help: "The number of send msg failed", + }) +} + func (rpc *rpcChat) Run() { log.Info("", "rpcChat init...") listenIP := "" @@ -78,6 +97,9 @@ func (rpc *rpcChat) Run() { panic(utils.Wrap(err, "register chat module rpc to etcd err")) } go rpc.runCh() + if config.Config.Prometheus.Enable { + rpc.initPrometheus() + } err = srv.Serve(listener) if err != nil { log.Error("", "rpc rpcChat failed ", err.Error()) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 02d8a163e..876f2cda7 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -30,7 +30,9 @@ import ( //When the number of group members is greater than this value,Online users will be sent first,Guaranteed service availability const GroupMemberNum = 500 -var ExcludeContentType = []int{constant.HasReadReceipt, constant.GroupHasReadReceipt} +var ( + ExcludeContentType = []int{constant.HasReadReceipt, constant.GroupHasReadReceipt} +) type MsgCallBackReq struct { SendID string `json:"sendID"` diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 730d7c0f5..56cc66bb7 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -99,6 +99,8 @@ type config struct { DBMaxOpenConns int `yaml:"dbMaxOpenConns"` DBMaxIdleConns int `yaml:"dbMaxIdleConns"` DBMaxLifeTime int `yaml:"dbMaxLifeTime"` + LogLevel int `yaml:"logLevel"` + SlowThreshold int `yaml:"slowThreshold"` } Mongo struct { DBUri string `yaml:"dbUri"` diff --git a/pkg/common/db/mysql.go b/pkg/common/db/mysql.go index d43ce736d..72641e37d 100644 --- a/pkg/common/db/mysql.go +++ b/pkg/common/db/mysql.go @@ -56,10 +56,10 @@ func initMysqlDB() { newLogger := logger.New( Writer{}, logger.Config{ - SlowThreshold: 200 * time.Millisecond, // Slow SQL threshold - LogLevel: logger.Warn, // Log level - IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger - Colorful: true, // Disable color + SlowThreshold: time.Duration(config.Config.Mysql.SlowThreshold) * time.Millisecond, // Slow SQL threshold + LogLevel: logger.LogLevel(config.Config.Mysql.LogLevel), // Log level + IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger + Colorful: true, // Disable color }, ) db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{ diff --git a/pkg/common/prometheus/prometheus.go b/pkg/common/prometheus/prometheus.go index 5d7e3d901..12d5671bb 100644 --- a/pkg/common/prometheus/prometheus.go +++ b/pkg/common/prometheus/prometheus.go @@ -6,6 +6,7 @@ import ( "strconv" "github.com/gin-gonic/gin" + "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" ) @@ -24,3 +25,9 @@ func PrometheusHandler() gin.HandlerFunc { h.ServeHTTP(c.Writer, c.Request) } } + +func PromeInc(counter prometheus.Counter) { + if config.Config.Prometheus.Enable { + counter.Inc() + } +}