Skip to content

Commit ca4d9de

Browse files
committed
mon: load metrics for numa nodes
1 parent 8d4e908 commit ca4d9de

File tree

5 files changed

+147
-28
lines changed

5 files changed

+147
-28
lines changed

pkg/config.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ func loadConfigAndInit(ctx *Context) error {
4949
ctx.state.Idle = NewIdlePinCpu(ctx)
5050

5151
ctx.HttpApi = http_api.NewHttpApi(ctx, config0.Service.HttpApi)
52-
ctx.Monitoring = monitoring.NewMonitoring(config0.Service.Monitoring)
52+
numaNodesCount := len(pool.Nodes)
53+
ctx.Monitoring = monitoring.NewMonitoring(config0.Service.Monitoring, numaNodesCount)
5354

5455
return nil
5556
}

pkg/monitoring.go

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,26 @@ func setMonitoringState(ctx *Context) error {
1111
func fillMonitoringState(ctx *Context) *monitoring.State {
1212
state := monitoring.NewState()
1313

14-
state.IdleLoad0 = ctx.pool.IdleLoad0
15-
state.IdleLoad1 = ctx.pool.IdleLoad1
16-
state.LoadFree0 = ctx.pool.LoadFree0
17-
state.LoadFree1 = ctx.pool.LoadFree1
18-
state.LoadUsed0 = ctx.pool.LoadUsed0
19-
state.LoadUsed1 = ctx.pool.LoadUsed1
14+
state.Pool.IdleLoad0 = ctx.pool.IdleLoad0
15+
state.Pool.IdleLoad1 = ctx.pool.IdleLoad1
16+
state.Pool.LoadFree0 = ctx.pool.LoadFree0
17+
state.Pool.LoadFree1 = ctx.pool.LoadFree1
18+
state.Pool.LoadUsed0 = ctx.pool.LoadUsed0
19+
state.Pool.LoadUsed1 = ctx.pool.LoadUsed1
20+
21+
l0 := len(ctx.pool.Nodes)
22+
for i := 0; i < l0; i++ {
23+
node := ctx.pool.Nodes[i]
24+
25+
nodeMon := &monitoring.PoolNode{
26+
Index: i,
27+
LoadFree0: node.LoadFree0,
28+
LoadFree1: node.LoadFree1,
29+
LoadUsed0: node.LoadUsed0,
30+
LoadUsed1: node.LoadUsed1,
31+
}
32+
state.Pool.Nodes = append(state.Pool.Nodes, nodeMon)
33+
}
2034

2135
return state
2236
}

pkg/monitoring/collector.go

Lines changed: 104 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,65 +2,129 @@ package monitoring
22

33
import (
44
"github.com/prometheus/client_golang/prometheus"
5+
"strconv"
56
"time"
67
)
78

89
type StaticCollector struct {
10+
PoolCollector *PoolCollector
11+
12+
State *State
13+
}
14+
15+
type PoolCollector struct {
916
IdleLoad0 *prometheus.Desc
1017
IdleLoad1 *prometheus.Desc
1118
LoadFree0 *prometheus.Desc
1219
LoadFree1 *prometheus.Desc
1320
LoadUsed0 *prometheus.Desc
1421
LoadUsed1 *prometheus.Desc
1522

16-
State *State
23+
Nodes []*PoolNodeCollector
1724
}
1825

19-
func NewStaticCollector() *StaticCollector {
20-
ent := &StaticCollector{}
26+
type PoolNodeCollector struct {
27+
Index int
28+
LoadFree0 *prometheus.Desc
29+
LoadFree1 *prometheus.Desc
30+
LoadUsed0 *prometheus.Desc
31+
LoadUsed1 *prometheus.Desc
32+
}
2133

22-
ent.IdleLoad0 = prometheus.NewDesc("idle_load0",
34+
func NewPoolCollector(nodesCount int) *PoolCollector {
35+
ent := &PoolCollector{}
36+
37+
ent.IdleLoad0 = prometheus.NewDesc("pool_idle_load0",
2338
"400, 600, 800 %",
2439
nil, nil,
2540
)
26-
ent.IdleLoad1 = prometheus.NewDesc("idle_load1",
41+
ent.IdleLoad1 = prometheus.NewDesc("pool_idle_load1",
2742
"0-100 %",
2843
nil, nil,
2944
)
30-
ent.LoadFree0 = prometheus.NewDesc("load_free0",
45+
ent.LoadFree0 = prometheus.NewDesc("pool_load_free0",
3146
"400, 600, 800 %",
3247
nil, nil,
3348
)
34-
ent.LoadFree1 = prometheus.NewDesc("load_free1",
49+
ent.LoadFree1 = prometheus.NewDesc("pool_load_free1",
3550
"0-100 %",
3651
nil, nil,
3752
)
38-
ent.LoadUsed0 = prometheus.NewDesc("load_used0",
53+
ent.LoadUsed0 = prometheus.NewDesc("pool_load_used0",
3954
"400, 600, 800 %",
4055
nil, nil,
4156
)
42-
ent.LoadUsed1 = prometheus.NewDesc("load_used1",
57+
ent.LoadUsed1 = prometheus.NewDesc("pool_load_used1",
4358
"0-100 %",
4459
nil, nil,
4560
)
4661

47-
ent.State = NewState()
62+
for i := 0; i < nodesCount; i++ {
63+
node := &PoolNodeCollector{
64+
Index: i,
65+
}
66+
67+
labels0 := prometheus.Labels{
68+
"node": strconv.Itoa(i),
69+
}
70+
71+
node.LoadFree0 = prometheus.NewDesc("node_load_free0",
72+
"400, 600, 800 %",
73+
nil, labels0,
74+
)
75+
node.LoadFree1 = prometheus.NewDesc("node_load_free1",
76+
"0-100 %",
77+
nil, labels0,
78+
)
79+
node.LoadUsed0 = prometheus.NewDesc("node_load_used0",
80+
"400, 600, 800 %",
81+
nil, labels0,
82+
)
83+
node.LoadUsed1 = prometheus.NewDesc("node_load_used1",
84+
"0-100 %",
85+
nil, labels0,
86+
)
87+
88+
ent.Nodes = append(ent.Nodes, node)
89+
}
90+
91+
return ent
92+
}
93+
94+
func NewStaticCollector(nodesCount int) *StaticCollector {
95+
pool := NewPoolCollector(nodesCount)
96+
97+
ent := &StaticCollector{
98+
PoolCollector: pool,
99+
}
48100

49101
return ent
50102
}
51103

52104
func (x *StaticCollector) Describe(ch chan<- *prometheus.Desc) {
53-
ch <- x.IdleLoad0
54-
ch <- x.IdleLoad1
105+
ch <- x.PoolCollector.IdleLoad0
106+
ch <- x.PoolCollector.IdleLoad1
107+
ch <- x.PoolCollector.LoadFree0
108+
ch <- x.PoolCollector.LoadFree1
109+
ch <- x.PoolCollector.LoadUsed0
110+
ch <- x.PoolCollector.LoadUsed1
111+
112+
for _, node := range x.PoolCollector.Nodes {
113+
ch <- node.LoadFree0
114+
ch <- node.LoadFree1
115+
ch <- node.LoadUsed0
116+
ch <- node.LoadUsed1
117+
}
118+
55119
}
56120

57121
func (x *StaticCollector) Collect(ch chan<- prometheus.Metric) {
58-
m0 := prometheus.MustNewConstMetric(x.IdleLoad0, prometheus.GaugeValue, x.State.IdleLoad0)
59-
m1 := prometheus.MustNewConstMetric(x.IdleLoad1, prometheus.GaugeValue, x.State.IdleLoad1)
60-
m2 := prometheus.MustNewConstMetric(x.LoadFree0, prometheus.GaugeValue, x.State.LoadFree0)
61-
m3 := prometheus.MustNewConstMetric(x.LoadFree1, prometheus.GaugeValue, x.State.LoadFree1)
62-
m4 := prometheus.MustNewConstMetric(x.LoadUsed0, prometheus.GaugeValue, x.State.LoadUsed0)
63-
m5 := prometheus.MustNewConstMetric(x.LoadUsed1, prometheus.GaugeValue, x.State.LoadUsed1)
122+
m0 := prometheus.MustNewConstMetric(x.PoolCollector.IdleLoad0, prometheus.GaugeValue, x.State.Pool.IdleLoad0)
123+
m1 := prometheus.MustNewConstMetric(x.PoolCollector.IdleLoad1, prometheus.GaugeValue, x.State.Pool.IdleLoad1)
124+
m2 := prometheus.MustNewConstMetric(x.PoolCollector.LoadFree0, prometheus.GaugeValue, x.State.Pool.LoadFree0)
125+
m3 := prometheus.MustNewConstMetric(x.PoolCollector.LoadFree1, prometheus.GaugeValue, x.State.Pool.LoadFree1)
126+
m4 := prometheus.MustNewConstMetric(x.PoolCollector.LoadUsed0, prometheus.GaugeValue, x.State.Pool.LoadUsed0)
127+
m5 := prometheus.MustNewConstMetric(x.PoolCollector.LoadUsed1, prometheus.GaugeValue, x.State.Pool.LoadUsed1)
64128

65129
now := time.Now()
66130
mt0 := prometheus.NewMetricWithTimestamp(now, m0)
@@ -76,4 +140,26 @@ func (x *StaticCollector) Collect(ch chan<- prometheus.Metric) {
76140
ch <- mt3
77141
ch <- mt4
78142
ch <- mt5
143+
144+
l0 := len(x.PoolCollector.Nodes)
145+
for i := 0; i < l0; i++ {
146+
node := x.State.Pool.Nodes[i]
147+
148+
nodeCollector := x.PoolCollector.Nodes[i]
149+
150+
mn0 := prometheus.MustNewConstMetric(nodeCollector.LoadFree0, prometheus.GaugeValue, node.LoadFree0)
151+
mn1 := prometheus.MustNewConstMetric(nodeCollector.LoadFree1, prometheus.GaugeValue, node.LoadFree1)
152+
mn2 := prometheus.MustNewConstMetric(nodeCollector.LoadUsed0, prometheus.GaugeValue, node.LoadUsed0)
153+
mn3 := prometheus.MustNewConstMetric(nodeCollector.LoadUsed1, prometheus.GaugeValue, node.LoadUsed1)
154+
155+
mnt0 := prometheus.NewMetricWithTimestamp(now, mn0)
156+
mnt1 := prometheus.NewMetricWithTimestamp(now, mn1)
157+
mnt2 := prometheus.NewMetricWithTimestamp(now, mn2)
158+
mnt3 := prometheus.NewMetricWithTimestamp(now, mn3)
159+
160+
ch <- mnt0
161+
ch <- mnt1
162+
ch <- mnt2
163+
ch <- mnt3
164+
}
79165
}

pkg/monitoring/monitoring.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ type Monitoring struct {
1717
staticCollector *StaticCollector
1818
}
1919

20-
func NewMonitoring(config *config.Monitoring) *Monitoring {
21-
collector := NewStaticCollector()
20+
func NewMonitoring(config *config.Monitoring, numaNodesCount int) *Monitoring {
21+
collector := NewStaticCollector(numaNodesCount)
2222

2323
ent := &Monitoring{
2424
config: config,

pkg/monitoring/state.go

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,32 @@
11
package monitoring
22

33
type State struct {
4+
Pool *Pool
5+
}
6+
7+
type Pool struct {
48
IdleLoad0 float64
59
IdleLoad1 float64
610
LoadFree0 float64
711
LoadFree1 float64
812
LoadUsed0 float64
913
LoadUsed1 float64
14+
15+
Nodes []*PoolNode
16+
}
17+
18+
type PoolNode struct {
19+
Index int
20+
LoadFree0 float64
21+
LoadFree1 float64
22+
LoadUsed0 float64
23+
LoadUsed1 float64
1024
}
1125

1226
func NewState() *State {
13-
return &State{}
27+
pool := &Pool{}
28+
29+
return &State{
30+
pool,
31+
}
1432
}

0 commit comments

Comments
 (0)