Skip to content

Commit 37a90d5

Browse files
committed
fix(mysql): mysql-monitor-start-failed #10156
1 parent 5e2699a commit 37a90d5

File tree

14 files changed

+120
-18
lines changed

14 files changed

+120
-18
lines changed

dbm-services/mysql/db-tools/dbactuator/pkg/components/peripheraltools/v2/crond/check_start.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ func (c *MySQLCrondComp) CheckStart() (err error) {
4646
}
4747
}
4848

49+
/*
50+
这里算是偷懒了, 现在 mysql-crond 启动
51+
在调用 third-party 的时候有个最大 10s 的超时
52+
所以即使进程存在, 也暴力等 15s
53+
*/
54+
time.Sleep(15 * time.Second)
55+
4956
return nil // 如果能走到这里, 说明正常启动了
5057
}
5158

dbm-services/mysql/db-tools/dbactuator/pkg/components/peripheraltools/v2/monitor/init.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package monitor
33
import (
44
"dbm-services/mysql/db-tools/dbactuator/pkg/components"
55
"dbm-services/mysql/db-tools/dbactuator/pkg/tools"
6+
ma "dbm-services/mysql/db-tools/mysql-crond/api"
67
"dbm-services/mysql/db-tools/mysql-monitor/pkg/config"
78
)
89

@@ -15,6 +16,9 @@ type MySQLMonitorComp struct {
1516
func (c *MySQLMonitorComp) Init() (err error) {
1617
c.tools = tools.NewToolSetWithPickNoValidate(tools.ToolMySQLMonitor)
1718

19+
manager := ma.NewManager("http://127.0.0.1:9999")
20+
_ = manager.UpdateInstanceInfo()
21+
1822
return nil
1923
}
2024

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package api
2+
3+
import (
4+
"context"
5+
"net/http"
6+
"time"
7+
8+
"github.com/pkg/errors"
9+
)
10+
11+
func (m *Manager) UpdateInstanceInfo() error {
12+
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
13+
defer func() {
14+
cancel()
15+
}()
16+
17+
errChan := make(chan error, 1)
18+
go func() {
19+
_, err := m.do("/third-party/update-instance-info", http.MethodGet, nil)
20+
errChan <- err
21+
}()
22+
23+
for {
24+
select {
25+
case <-ctx.Done():
26+
return ctx.Err()
27+
case err := <-errChan:
28+
if err != nil {
29+
return errors.Wrapf(err, "manager call %s", m.apiUrl)
30+
}
31+
return nil
32+
default:
33+
}
34+
}
35+
}

dbm-services/mysql/db-tools/mysql-crond/cmd/root.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cmd
22

33
import (
4+
"dbm-services/mysql/db-tools/mysql-crond/pkg/third_party"
45
"fmt"
56
"io"
67
"log/slog"
@@ -57,6 +58,13 @@ var rootCmd = &cobra.Command{
5758
return err
5859
}
5960

61+
slog.Info("start crond start third party update")
62+
err = third_party.Updater()
63+
if err != nil {
64+
slog.Error("start crond", slog.String("error", err.Error()))
65+
}
66+
slog.Info("start crond init third party update finish")
67+
6068
quit := make(chan struct{})
6169

6270
go func() {

dbm-services/mysql/db-tools/mysql-crond/pkg/service/service.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
package service
33

44
import (
5+
"dbm-services/mysql/db-tools/mysql-crond/pkg/third_party/instance_info_updater"
56
"fmt"
67
"log/slog"
78
"net/http"
@@ -362,5 +363,15 @@ func Start(version string, buildStamp string, gitHash string, quit chan struct{}
362363
context.JSON(http.StatusOK, gin.H{})
363364
},
364365
)
366+
r.GET(
367+
"/third-party/update-instance-info", func(ctx *gin.Context) {
368+
err := instance_info_updater.Updater()
369+
if err != nil {
370+
ctx.AbortWithStatusJSON(http.StatusInternalServerError, api.NewErrorResp(500, err))
371+
return
372+
}
373+
374+
ctx.JSON(http.StatusOK, gin.H{})
375+
})
365376
return r.Run(fmt.Sprintf("127.0.0.1:%d", config.RuntimeConfig.Port))
366377
}

dbm-services/mysql/db-tools/mysql-crond/pkg/third_party/init.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package third_party
33
import (
44
"dbm-services/mysql/db-tools/mysql-crond/pkg/third_party/instance_info_updater"
55
"dbm-services/mysql/db-tools/mysql-crond/pkg/third_party/nginx_updater"
6+
"errors"
67

78
"github.com/robfig/cron/v3"
89
)
@@ -15,3 +16,17 @@ func init() {
1516
instance_info_updater.Register,
1617
}
1718
}
19+
20+
func Updater() (err error) {
21+
e := instance_info_updater.Updater()
22+
if e != nil {
23+
err = errors.Join(err, e)
24+
}
25+
26+
e = nginx_updater.Updater()
27+
if e != nil {
28+
err = errors.Join(err, e)
29+
}
30+
31+
return err
32+
}

dbm-services/mysql/db-tools/mysql-crond/pkg/third_party/instance_info_updater/init.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,21 @@ func Register(cj *cron.Cron) {
3434
}
3535

3636
func updater() error {
37-
err := os.MkdirAll(rconfig.CommonConfigDir, 0777)
38-
if err != nil {
39-
return errors.Wrap(err, "can't create config directory")
40-
}
41-
4237
sleepN := time.Second * time.Duration(rand.Intn(120))
4338
slog.Info("rand sleep", slog.Float64("seconds", sleepN.Seconds()))
4439
time.Sleep(sleepN)
4540
slog.Info("rand sleep awake")
4641

42+
return Updater()
43+
}
44+
45+
func Updater() error {
46+
err := os.MkdirAll(rconfig.CommonConfigDir, 0777)
47+
if err != nil {
48+
return errors.Wrap(err, "can't create config directory")
49+
}
50+
51+
slog.Info("call reverse api", slog.Any("runtime config", config.RuntimeConfig))
4752
info, layer, err := mysql.ListInstanceInfo(*config.RuntimeConfig.BkCloudID)
4853
if err != nil {
4954
slog.Error("list instance info failed", slog.String("err", err.Error()))

dbm-services/mysql/db-tools/mysql-crond/pkg/third_party/nginx_updater/init.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,20 @@ func Register(cj *cron.Cron) {
3535
}
3636

3737
func updater() error {
38-
err := os.MkdirAll(rconfig.CommonConfigDir, 0777)
39-
if err != nil {
40-
return errors.Wrap(err, "can't create config directory")
41-
}
42-
4338
sleepN := time.Second * time.Duration(rand.Intn(120))
4439
slog.Info("rand sleep", slog.Float64("seconds", sleepN.Seconds()))
4540
time.Sleep(sleepN)
4641
slog.Info("rand sleep awake")
4742

43+
return Updater()
44+
}
45+
46+
func Updater() error {
47+
err := os.MkdirAll(rconfig.CommonConfigDir, 0777)
48+
if err != nil {
49+
return errors.Wrap(err, "can't create config directory")
50+
}
51+
4852
addrs, err := common.ListNginxAddrs(*config.RuntimeConfig.BkCloudID)
4953
if err != nil {
5054
return errors.Wrap(err, "list nginx addrs failed")

dbm-services/mysql/db-tools/mysql-monitor/cmd/init.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
"dbm-services/mysql/db-tools/mysql-monitor/pkg/config"
1111

12+
"github.com/google/uuid"
1213
"gopkg.in/natefinch/lumberjack.v2"
1314
)
1415

@@ -73,12 +74,13 @@ func initLogger(cfg *config.LogConfig) {
7374
handleOpt.Level = slog.LevelInfo
7475
}
7576

76-
var logger *slog.Logger
7777
if cfg.Json {
78-
logger = slog.New(slog.NewJSONHandler(io.MultiWriter(ioWriters...), &handleOpt))
78+
config.Logger = slog.New(slog.NewJSONHandler(io.MultiWriter(ioWriters...), &handleOpt))
7979
} else {
80-
logger = slog.New(slog.NewTextHandler(io.MultiWriter(ioWriters...), &handleOpt))
80+
config.Logger = slog.New(slog.NewTextHandler(io.MultiWriter(ioWriters...), &handleOpt))
8181
}
8282

83-
slog.SetDefault(logger)
83+
config.Logger = config.Logger.With("uuid", uuid.New().String())
84+
85+
slog.SetDefault(config.Logger)
8486
}

dbm-services/mysql/db-tools/mysql-monitor/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ require (
2323

2424
require (
2525
github.com/gofrs/flock v0.12.1
26+
github.com/google/uuid v1.1.2
2627
github.com/mitchellh/mapstructure v1.5.0
2728
golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc
2829
golang.org/x/time v0.1.0

dbm-services/mysql/db-tools/mysql-monitor/go.sum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe
133133
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
134134
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
135135
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
136+
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
136137
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
137138
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
138139
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=

dbm-services/mysql/db-tools/mysql-monitor/pkg/config/init.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import (
1212
"gopkg.in/yaml.v2"
1313
)
1414

15+
var Logger *slog.Logger
16+
1517
var HeartBeatName = "mysql_monitor_heart_beat"
1618
var HeartBeatSchedule = "@every 5m"
1719
var MonitorConfig *Config

dbm-services/mysql/db-tools/mysql-monitor/pkg/mainloop/main_loop.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ func Run(hardcode bool) error {
4141
iNames = viper.GetStringSlice("run-items")
4242
}
4343
slog.Info("main loop", slog.String("items", strings.Join(iNames, ",")))
44+
config.Logger = config.Logger.With("items", strings.Join(iNames, ","))
45+
slog.SetDefault(config.Logger)
46+
4447
slog.Info("main loop", slog.Bool("hardcode", hardcode))
4548

4649
lockFileName := fmt.Sprintf("%d-%s.lock", config.MonitorConfig.Port, strings.Join(iNames, "."))
@@ -115,19 +118,21 @@ func Run(hardcode bool) error {
115118
slog.Info("make connection collect", slog.Any("connection collect", cc))
116119

117120
if hardcode {
121+
slog.Info("hardcode finish")
118122
return nil
119123
}
120124

121125
randSleepN := rand.Intn(5)
122126
slog.Info(
123127
"run monitor items",
124-
slog.Any("items", iNames),
125128
slog.Int("randSleepN", randSleepN),
126129
)
127130
// 每次整体随机休眠 [0:5), 多实例场景时稍微错开
128131
time.Sleep(time.Duration(randSleepN) * time.Second)
129132

130133
for _, iName := range iNames {
134+
config.Logger = config.Logger.With("current item", iName)
135+
slog.SetDefault(config.Logger)
131136

132137
if constructor, ok := itemscollect.RegisteredItemConstructor()[iName]; ok {
133138

@@ -159,5 +164,7 @@ func Run(hardcode bool) error {
159164
continue
160165
}
161166
}
167+
168+
slog.Info("main loop round finish")
162169
return nil
163170
}

dbm-services/mysql/db-tools/mysql-monitor/pkg/monitoriteminterface/internal/connect_db.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func connectDB(ip string, port int, ca *config.ConnectAuth, withPing bool, isPro
2121
),
2222
)
2323
if err != nil {
24-
slog.Error("connect db with ping", err)
24+
slog.Error("connect db with ping", slog.String("err", err.Error()))
2525
return nil, err
2626
}
2727
} else {
@@ -35,7 +35,7 @@ func connectDB(ip string, port int, ca *config.ConnectAuth, withPing bool, isPro
3535
),
3636
)
3737
if err != nil {
38-
slog.Error("connect db without ping", err)
38+
slog.Error("connect db without ping", slog.String("err", err.Error()))
3939
return nil, err
4040
}
4141
// 没有 ping 可能返回的是一个无效连接
@@ -48,7 +48,7 @@ func connectDB(ip string, port int, ca *config.ConnectAuth, withPing bool, isPro
4848
sr, err = db.Queryx(`SELECT 1`)
4949
}
5050
if err != nil {
51-
slog.Error("ping proxy failed", err)
51+
slog.Error("ping proxy failed", slog.String("err", err.Error()))
5252
return nil, err
5353
}
5454
defer func() {

0 commit comments

Comments
 (0)