Skip to content

Commit 4a13057

Browse files
authored
feat: enhance metrics of controller and gateway (#408)
* feat: enhance metrics of controller * add gateway metrics * update
1 parent 6eea51a commit 4a13057

File tree

18 files changed

+319
-90
lines changed

18 files changed

+319
-90
lines changed

cmd/gateway/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"github.com/linkall-labs/vanus/internal/gateway"
2323
"github.com/linkall-labs/vanus/observability"
2424
"github.com/linkall-labs/vanus/observability/log"
25+
"github.com/linkall-labs/vanus/observability/metrics"
2526
"github.com/linkall-labs/vanus/pkg/util/signal"
2627
)
2728

@@ -51,7 +52,7 @@ func main() {
5152
}
5253

5354
cfg.Observability.T.ServerName = "Vanus Gateway"
54-
_ = observability.Initialize(ctx, cfg.Observability, nil)
55+
_ = observability.Initialize(ctx, cfg.Observability, metrics.GetGatewayMetrics)
5556
log.Info(ctx, "Gateway has started", nil)
5657
select {
5758
case <-ctx.Done():

deploy/poc/poc.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ spec:
208208
app: vanus-gateway
209209
spec:
210210
containers:
211-
- image: public.ecr.aws/vanus/gateway:6b23e5a
211+
- image: public.ecr.aws/vanus/gateway:6b76eb8
212212
imagePullPolicy: IfNotPresent
213213
name: gateway
214214
ports:
@@ -269,7 +269,7 @@ spec:
269269
valueFrom:
270270
fieldRef:
271271
fieldPath: status.podIP
272-
image: public.ecr.aws/vanus/timer:6b23e5a
272+
image: public.ecr.aws/vanus/timer:6b76eb8
273273
imagePullPolicy: IfNotPresent
274274
name: timer
275275
ports:
@@ -329,7 +329,7 @@ spec:
329329
valueFrom:
330330
fieldRef:
331331
fieldPath: status.podIP
332-
image: public.ecr.aws/vanus/trigger:6b23e5a
332+
image: public.ecr.aws/vanus/trigger:6b76eb8
333333
imagePullPolicy: IfNotPresent
334334
name: trigger
335335
ports:
@@ -411,7 +411,7 @@ spec:
411411
valueFrom:
412412
fieldRef:
413413
fieldPath: status.podIP
414-
image: public.ecr.aws/vanus/controller:6b23e5a
414+
image: public.ecr.aws/vanus/controller:6b76eb8
415415
imagePullPolicy: IfNotPresent
416416
name: controller
417417
ports:
@@ -495,7 +495,7 @@ spec:
495495
valueFrom:
496496
fieldRef:
497497
fieldPath: status.podIP
498-
image: public.ecr.aws/vanus/store:6b23e5a
498+
image: public.ecr.aws/vanus/store:6b76eb8
499499
imagePullPolicy: IfNotPresent
500500
name: store
501501
ports:

deploy/poc/yaml/controller.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ spec:
8888
valueFrom:
8989
fieldRef:
9090
fieldPath: status.podIP
91-
image: public.ecr.aws/vanus/controller:6b23e5a
91+
image: public.ecr.aws/vanus/controller:02c5b59
9292
imagePullPolicy: IfNotPresent
9393
name: controller
9494
ports:

deploy/poc/yaml/gateway.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ spec:
5353
app: vanus-gateway
5454
spec:
5555
containers:
56-
- image: public.ecr.aws/vanus/gateway:6b23e5a
56+
- image: public.ecr.aws/vanus/gateway:6b76eb8
5757
imagePullPolicy: IfNotPresent
5858
name: gateway
5959
ports:

deploy/poc/yaml/store.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ spec:
7272
valueFrom:
7373
fieldRef:
7474
fieldPath: status.podIP
75-
image: public.ecr.aws/vanus/store:6b23e5a
75+
image: public.ecr.aws/vanus/store:6b76eb8
7676
imagePullPolicy: IfNotPresent
7777
name: store
7878
ports:

deploy/poc/yaml/timer.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ spec:
5656
valueFrom:
5757
fieldRef:
5858
fieldPath: status.podIP
59-
image: public.ecr.aws/vanus/timer:6b23e5a
59+
image: public.ecr.aws/vanus/timer:6b76eb8
6060
imagePullPolicy: IfNotPresent
6161
name: timer
6262
volumeMounts:

deploy/poc/yaml/trigger.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ spec:
5555
valueFrom:
5656
fieldRef:
5757
fieldPath: status.podIP
58-
image: public.ecr.aws/vanus/trigger:6b23e5a
58+
image: public.ecr.aws/vanus/trigger:6b76eb8
5959
imagePullPolicy: IfNotPresent
6060
name: trigger
6161
ports:

internal/controller/eventbus/controller.go

Lines changed: 49 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@ import (
2121
"fmt"
2222
"io"
2323
"path/filepath"
24+
"strconv"
2425
"strings"
2526
"sync"
27+
"sync/atomic"
2628
"time"
2729

2830
embedetcd "github.com/linkall-labs/embed-etcd"
@@ -73,20 +75,22 @@ func NewController(cfg Config, member embedetcd.Member) *controller {
7375
}
7476

7577
type controller struct {
76-
cfg *Config
77-
kvStore kv.Client
78-
volumeMgr volume.Manager
79-
eventLogMgr eventlog.Manager
80-
ssMgr server.Manager
81-
eventBusMap map[string]*metadata.Eventbus
82-
member embedetcd.Member
83-
cancelCtx context.Context
84-
cancelFunc context.CancelFunc
85-
membershipMutex sync.Mutex
86-
isLeader bool
87-
readyNotify chan error
88-
stopNotify chan error
89-
mutex sync.Mutex
78+
cfg *Config
79+
kvStore kv.Client
80+
volumeMgr volume.Manager
81+
eventLogMgr eventlog.Manager
82+
ssMgr server.Manager
83+
eventBusMap map[string]*metadata.Eventbus
84+
member embedetcd.Member
85+
cancelCtx context.Context
86+
cancelFunc context.CancelFunc
87+
membershipMutex sync.Mutex
88+
isLeader bool
89+
readyNotify chan error
90+
stopNotify chan error
91+
mutex sync.Mutex
92+
eventbusUpdatedCount int64
93+
eventbusDeletedCount int64
9094
}
9195

9296
func (ctrl *controller) Start(_ context.Context) error {
@@ -97,6 +101,7 @@ func (ctrl *controller) Start(_ context.Context) error {
97101
ctrl.kvStore = store
98102
ctrl.cancelCtx, ctrl.cancelFunc = context.WithCancel(context.Background())
99103
go ctrl.member.RegisterMembershipChangedProcessor(ctrl.membershipChangedProcessor)
104+
go ctrl.recordMetrics()
100105
return nil
101106
}
102107

@@ -188,7 +193,7 @@ func (ctrl *controller) createEventBus(ctx context.Context,
188193
return nil, errors.ErrResourceAlreadyExist.WithMessage("the eventbus already exist")
189194
}
190195
for idx := 0; idx < eb.LogNumber; idx++ {
191-
el, err := ctrl.eventLogMgr.AcquireEventLog(ctx, eb.ID)
196+
el, err := ctrl.eventLogMgr.AcquireEventLog(ctx, eb.ID, eb.Name)
192197
if err != nil {
193198
return nil, err
194199
}
@@ -202,7 +207,6 @@ func (ctrl *controller) createEventBus(ctx context.Context,
202207
return nil, err
203208
}
204209
}
205-
metrics.EventbusGauge.Set(float64(len(ctrl.eventBusMap)))
206210
return ctrl.getEventbus(eb.Name)
207211
}
208212

@@ -231,7 +235,7 @@ func (ctrl *controller) DeleteEventBus(ctx context.Context, eb *metapb.EventBus)
231235
}(v.ID)
232236
}
233237
wg.Wait()
234-
metrics.EventbusGauge.Set(float64(len(ctrl.eventBusMap)))
238+
atomic.AddInt64(&ctrl.eventbusDeletedCount, 1)
235239
return &emptypb.Empty{}, nil
236240
}
237241

@@ -271,6 +275,7 @@ func (ctrl *controller) ListEventBus(ctx context.Context, _ *emptypb.Empty) (*ct
271275

272276
func (ctrl *controller) UpdateEventBus(ctx context.Context,
273277
req *ctrlpb.UpdateEventBusRequest) (*metapb.EventBus, error) {
278+
atomic.AddInt64(&ctrl.eventbusUpdatedCount, 1)
274279
return &metapb.EventBus{}, nil
275280
}
276281

@@ -516,6 +521,33 @@ func (ctrl *controller) ReportSegmentLeader(ctx context.Context,
516521
return &emptypb.Empty{}, nil
517522
}
518523

524+
func (ctrl *controller) recordMetrics() {
525+
t := time.NewTicker(time.Second)
526+
defer t.Stop()
527+
for {
528+
select {
529+
case <-t.C:
530+
ctrl.membershipMutex.Lock()
531+
if ctrl.isLeader {
532+
metrics.ControllerLeaderGaugeVec.DeleteLabelValues(strconv.FormatBool(!ctrl.isLeader))
533+
metrics.ControllerLeaderGaugeVec.WithLabelValues(strconv.FormatBool(ctrl.isLeader)).Set(1)
534+
} else {
535+
metrics.ControllerLeaderGaugeVec.WithLabelValues(strconv.FormatBool(!ctrl.isLeader)).Set(0)
536+
}
537+
ctrl.membershipMutex.Unlock()
538+
539+
ctrl.mutex.Lock()
540+
metrics.EventbusGauge.Set(float64(len(ctrl.eventBusMap)))
541+
metrics.EventbusUpdatedGauge.Set(float64(atomic.LoadInt64(&ctrl.eventbusUpdatedCount)))
542+
metrics.EventbusDeletedGauge.Set(float64(atomic.LoadInt64(&ctrl.eventbusDeletedCount)))
543+
ctrl.mutex.Unlock()
544+
case <-ctrl.cancelCtx.Done():
545+
log.Info(ctrl.cancelCtx, "record leadership exiting...", nil)
546+
return
547+
}
548+
}
549+
}
550+
519551
func (ctrl *controller) membershipChangedProcessor(ctx context.Context, event embedetcd.MembershipChangedEvent) error {
520552
ctrl.membershipMutex.Lock()
521553
defer ctrl.membershipMutex.Unlock()
@@ -571,7 +603,6 @@ func (ctrl *controller) loadEventbus(ctx context.Context) error {
571603
}
572604
ctrl.eventBusMap[filepath.Base(pair.Key)] = busInfo
573605
}
574-
metrics.EventbusGauge.Set(float64(len(ctrl.eventBusMap)))
575606
return nil
576607
}
577608

internal/controller/eventbus/controller_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,10 @@ func TestController_CreateEventBus(t *testing.T) {
5757
el := &metadata.Eventlog{
5858
ID: vanus.NewTestID(),
5959
}
60-
elMgr.EXPECT().AcquireEventLog(ctx, gomock.Any()).Times(1).DoAndReturn(func(ctx stdCtx.Context,
61-
eventbusID vanus.ID) (*metadata.Eventlog, error) {
60+
elMgr.EXPECT().AcquireEventLog(ctx, gomock.Any(), gomock.Any()).Times(1).DoAndReturn(func(ctx stdCtx.Context,
61+
eventbusID vanus.ID, ebName string) (*metadata.Eventlog, error) {
6262
el.ID = eventbusID
63+
el.EventbusName = ebName
6364
el.SegmentNumber = 2
6465
return el, nil
6566
})

0 commit comments

Comments
 (0)