Skip to content

Commit 208aa9f

Browse files
committed
prometheus
1 parent 3052227 commit 208aa9f

5 files changed

Lines changed: 114 additions & 98 deletions

File tree

cmd/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,6 @@ pre-commit:
2020

2121

2222
sync:
23+
cp ../../vc5/cmd/config.pl .
2324
rsync -av --exclude=main.go --exclude=balancer.go --exclude=xvs.go ../../vc5/cmd/*.go .
2425
rsync -av --delete ../../vc5/cmd/static/ static/

cmd/config.pl

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,7 @@ sub params {
516516
as_number: 65000
517517
peers:
518518
- 10.1.10.200
519+
- 10.1.10.201
519520
520521
# If Teams or Slack webhook URLs are set then messages of level <alert> (default 0) or lower wil be sent to the channel.
521522
# If elasticsearch/index is set then all logs will be written to elasticsearch
@@ -536,28 +537,32 @@ sub params {
536537
#vlans:
537538
# 10: 10.1.10.0/24
538539
# 20: 10.1.20.0/24
539-
540+
# 30: 10.1.30.0/24
541+
# 40: 10.1.40.0/24
542+
540543
services:
541544
542545
- name: nginx
543546
virtual:
544547
- 192.168.101.1
545548
servers:
546-
- 10.1.10.1
547-
- 10.1.10.2
548-
- 10.1.10.3
549+
- 10.1.10.10
550+
- 10.1.10.11
551+
- 10.1.10.12
552+
- 10.1.10.13
549553
need: 1
550554
path: /alive
551555
policy:
552556
http:
553557
554558
# - name: bind
555-
# description: DNS server on a different VLAN
559+
# description: DNS servers on a different VLAN
556560
# virtual:
557561
# - 192.168.101.2
558562
# servers:
559-
# - 10.1.20.1
560-
# - 10.1.20.2
561-
# - 10.1.20.3
563+
# - 10.1.20.10
564+
# - 10.1.20.12
565+
# - 10.1.20.13
566+
# - 10.1.20.14
562567
# policy:
563568
# domain:

cmd/go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,5 @@ require (
3333
modernc.org/strutil v1.1.3 // indirect
3434
modernc.org/token v1.0.1 // indirect
3535
)
36+
37+
replace github.com/davidcoles/cue => ../../cue

cmd/main.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,12 +278,20 @@ func main() {
278278
Service lb.ServiceExtended
279279
Destinations []lb.DestinationExtended
280280
}
281+
info, _ := client.Info()
281282
svcs, _ := client.Services()
282283
for _, se := range svcs {
283284
dsts, _ := client.Destinations(se.Service)
284285
ret = append(ret, status{Service: se, Destinations: dsts})
285286
}
286-
js, err := json.MarshalIndent(&ret, " ", " ")
287+
//js, err := json.MarshalIndent(&ret, " ", " ")
288+
js, err := json.MarshalIndent(struct {
289+
Info any
290+
Services []any
291+
}{
292+
Info: info,
293+
Services: ret,
294+
}, "", " ")
287295
if err != nil {
288296
w.WriteHeader(http.StatusInternalServerError)
289297
return
@@ -351,7 +359,7 @@ func main() {
351359
http.HandleFunc("/metrics", func(w http.ResponseWriter, r *http.Request) {
352360

353361
mutex.Lock()
354-
metrics := prometheus(services, summary, vip)
362+
metrics := prometheus("stayinalived", services, summary, vip)
355363
mutex.Unlock()
356364

357365
w.Header().Set("Content-Type", "text/plain")

cmd/prometheus.go

Lines changed: 88 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,20 @@ import (
2525
"time"
2626
)
2727

28-
func prometheus(services map[netip.Addr][]Serv, summary Summary, vips map[netip.Addr]State) []string {
29-
r := []string{help()}
28+
func prometheus(p string, services map[netip.Addr][]Serv, summary Summary, vips map[netip.Addr]State) []string {
29+
r := []string{help(p)}
3030

3131
var defcon uint8
3232

33-
r = append(r, fmt.Sprintf(`vc5_uptime %d`, summary.Uptime))
34-
r = append(r, fmt.Sprintf(`vc5_defcon %d`, defcon))
35-
r = append(r, fmt.Sprintf(`vc5_latency %d`, summary.Latency))
36-
r = append(r, fmt.Sprintf(`vc5_sessions %d`, summary.Current))
37-
r = append(r, fmt.Sprintf(`vc5_session_total %d`, summary.Flows))
38-
r = append(r, fmt.Sprintf(`vc5_rx_packets %d`, summary.IngressPackets))
39-
r = append(r, fmt.Sprintf(`vc5_rx_octets %d`, summary.IngressOctets))
40-
r = append(r, fmt.Sprintf(`vc5_tx_packets %d`, summary.EgressPackets))
41-
r = append(r, fmt.Sprintf(`vc5_tx_octets %d`, summary.EgressOctets))
33+
r = append(r, fmt.Sprintf(p+`_uptime %d`, summary.Uptime))
34+
r = append(r, fmt.Sprintf(p+`_defcon %d`, defcon))
35+
r = append(r, fmt.Sprintf(p+`_latency %d`, summary.Latency))
36+
r = append(r, fmt.Sprintf(p+`_sessions %d`, summary.Current))
37+
r = append(r, fmt.Sprintf(p+`_session_total %d`, summary.Flows))
38+
r = append(r, fmt.Sprintf(p+`_rx_packets %d`, summary.IngressPackets))
39+
r = append(r, fmt.Sprintf(p+`_rx_octets %d`, summary.IngressOctets))
40+
r = append(r, fmt.Sprintf(p+`_tx_packets %d`, summary.EgressPackets))
41+
r = append(r, fmt.Sprintf(p+`_tx_octets %d`, summary.EgressOctets))
4242

4343
zeroone := func(u bool) uint8 {
4444
if u {
@@ -57,8 +57,8 @@ func prometheus(services map[netip.Addr][]Serv, summary Summary, vips map[netip.
5757
now := time.Now()
5858

5959
for vip, s := range vips {
60-
r = metric(r, `vc5_vip_status{vip="%s"} %d`, vip, zeroone(s.up))
61-
r = metric(r, `vc5_vip_status_duration{vip="%s",status="%s"} %d`, vip, updown(s.up), now.Sub(s.time)/time.Second)
60+
r = metric(r, p+`_vip_status{vip="%s"} %d`, vip, zeroone(s.up))
61+
r = metric(r, p+`_vip_status_duration{vip="%s",status="%s"} %d`, vip, updown(s.up), now.Sub(s.time)/time.Second)
6262
}
6363

6464
for _, x := range services {
@@ -72,29 +72,29 @@ func prometheus(services map[netip.Addr][]Serv, summary Summary, vips map[netip.
7272
name = strings.ReplaceAll(name, `\`, `\\`)
7373
name = strings.ReplaceAll(name, `"`, `\"`)
7474

75-
r = metric(r, `vc5_service_sessions{service="%s",name="%s"} %d`, serv, name, stat.Current)
76-
r = metric(r, `vc5_service_sessions_total{service="%s",name="%s"} %d`, serv, name, stat.Flows)
77-
r = metric(r, `vc5_service_rx_packets{service="%s",name="%s"} %d`, serv, name, stat.IngressPackets)
78-
r = metric(r, `vc5_service_rx_octets{service="%s",name="%s"} %d`, serv, name, stat.IngressOctets)
79-
r = metric(r, `vc5_service_tx_packets{service="%s",name="%s"} %d`, serv, name, stat.EgressPackets)
80-
r = metric(r, `vc5_service_tx_octets{service="%s",name="%s"} %d`, serv, name, stat.EgressOctets)
81-
r = metric(r, `vc5_service_status{service="%s",name="%s"} %d`, serv, name, up)
82-
r = metric(r, `vc5_service_status_duration{service="%s",name="%s",status="%s"} %d`, serv, name, updown(s.Up), s.For)
83-
r = metric(r, `vc5_service_reserves_used{service="%s",name="%s"} %d`, serv, name, 666)
75+
r = metric(r, p+`_service_sessions{service="%s",name="%s"} %d`, serv, name, stat.Current)
76+
r = metric(r, p+`_service_sessions_total{service="%s",name="%s"} %d`, serv, name, stat.Flows)
77+
r = metric(r, p+`_service_rx_packets{service="%s",name="%s"} %d`, serv, name, stat.IngressPackets)
78+
r = metric(r, p+`_service_rx_octets{service="%s",name="%s"} %d`, serv, name, stat.IngressOctets)
79+
r = metric(r, p+`_service_tx_packets{service="%s",name="%s"} %d`, serv, name, stat.EgressPackets)
80+
r = metric(r, p+`_service_tx_octets{service="%s",name="%s"} %d`, serv, name, stat.EgressOctets)
81+
r = metric(r, p+`_service_status{service="%s",name="%s"} %d`, serv, name, up)
82+
r = metric(r, p+`_service_status_duration{service="%s",name="%s",status="%s"} %d`, serv, name, updown(s.Up), s.For)
83+
r = metric(r, p+`_service_reserves_used{service="%s",name="%s"} %d`, serv, name, 666)
8484

8585
for _, d := range s.Destinations {
8686
real := fmt.Sprintf("%s:%d", d.Address, d.Port)
8787
up := zeroone(d.Up)
8888

89-
r = metric(r, `vc5_backend_sessions{service="%s",name="%s",backend="%s"} %d`, serv, name, real, stat.Current)
90-
r = metric(r, `vc5_backend_sessions_total{service="%s",name="%s",backend="%s"} %d`, serv, name, real, stat.Flows)
91-
r = metric(r, `vc5_backend_rx_packets{service="%s",name="%s",backend="%s"} %d`, serv, name, real, stat.IngressPackets)
92-
r = metric(r, `vc5_backend_rx_octets{service="%s",name="%s",backend="%s"} %d`, serv, name, real, stat.IngressOctets)
93-
r = metric(r, `vc5_backend_tx_packets{service="%s",name="%s",backend="%s"} %d`, serv, name, real, stat.EgressPackets)
94-
r = metric(r, `vc5_backend_tx_octets{service="%s",name="%s",backend="%s"} %d`, serv, name, real, stat.EgressOctets)
95-
r = metric(r, `vc5_backend_status{service="%s",name="%s",backend="%s"} %d`, serv, name, real, up)
96-
r = metric(r, `vc5_backend_status_duration{service="%s",name="%s",backend="%s",status="%s"} %d`, serv, name, real, updown(d.Up), d.For)
97-
r = metric(r, `vc5_backend_reserves_used{service="%s",name="%s",backend="%s"} %d`, serv, name, real, 666)
89+
r = metric(r, p+`_backend_sessions{service="%s",name="%s",backend="%s"} %d`, serv, name, real, stat.Current)
90+
r = metric(r, p+`_backend_sessions_total{service="%s",name="%s",backend="%s"} %d`, serv, name, real, stat.Flows)
91+
r = metric(r, p+`_backend_rx_packets{service="%s",name="%s",backend="%s"} %d`, serv, name, real, stat.IngressPackets)
92+
r = metric(r, p+`_backend_rx_octets{service="%s",name="%s",backend="%s"} %d`, serv, name, real, stat.IngressOctets)
93+
r = metric(r, p+`_backend_tx_packets{service="%s",name="%s",backend="%s"} %d`, serv, name, real, stat.EgressPackets)
94+
r = metric(r, p+`_backend_tx_octets{service="%s",name="%s",backend="%s"} %d`, serv, name, real, stat.EgressOctets)
95+
r = metric(r, p+`_backend_status{service="%s",name="%s",backend="%s"} %d`, serv, name, real, up)
96+
r = metric(r, p+`_backend_status_duration{service="%s",name="%s",backend="%s",status="%s"} %d`, serv, name, real, updown(d.Up), d.For)
97+
r = metric(r, p+`_backend_reserves_used{service="%s",name="%s",backend="%s"} %d`, serv, name, real, 666)
9898

9999
}
100100
}
@@ -108,61 +108,61 @@ func metric(l []string, f string, a ...any) []string {
108108
return append(l, fmt.Sprintf(f, a...))
109109
}
110110

111-
func help() string {
112-
return `# TYPE vc5_uptime counter
113-
# TYPE vc5_defcon gauge
114-
# TYPE vc5_latency gauge
115-
# TYPE vc5_sessions gauge
116-
# TYPE vc5_session_total counter
117-
# TYPE vc5_rx_packets counter
118-
# TYPE vc5_rx_octets counter
119-
# TYPE vc5_tx_packets counter
120-
# TYPE vc5_tx_octets counter
121-
# TYPE vc5_vip_status gauge
122-
# TYPE vc5_vip_status_duration gauge
123-
# TYPE vc5_service_sessions gauge
124-
# TYPE vc5_service_sessions_total counter
125-
# TYPE vc5_service_rx_packets counter
126-
# TYPE vc5_service_rx_octets counter
127-
# TYPE vc5_service_tx_packets counter
128-
# TYPE vc5_service_tx_octets counter
129-
# TYPE vc5_service_status gauge
130-
# TYPE vc5_service_status_duration gauge
131-
# TYPE vc5_service_reserves_used gauge
132-
# TYPE vc5_backend_sessions gauge
133-
# TYPE vc5_backend_sessions_total counter
134-
# TYPE vc5_backend_rx_packets counter
135-
# TYPE vc5_backend_rx_octets counter
136-
# TYPE vc5_backend_tx_packets counter
137-
# TYPE vc5_backend_tx_octets counter
138-
# TYPE vc5_backend_status gauge
139-
# TYPE vc5_backend_status_duration gauge
140-
# HELP vc5_uptime Uptime in seconds
141-
# HELP vc5_defcon Readiness level
142-
# HELP vc5_latency Average packet processing latency in nanoseconds
143-
# HELP vc5_sessions Estimated number of current active sessions
144-
# HELP vc5_session_total Total number of new sessions written to state tracking table
145-
# HELP vc5_rx_packets Total number of incoming packets
146-
# HELP vc5_rx_octets Total number incoming bytes
147-
# HELP vc5_tx_packets Total number of outgoing packets
148-
# HELP vc5_tx_octets Total number outgoing bytes
149-
# HELP vc5_vip_status gauge
150-
# HELP vc5_vip_status_duration gauge
151-
# HELP vc5_service_sessions gauge
152-
# HELP vc5_service_sessions_total counter
153-
# HELP vc5_service_rx_packets counter
154-
# HELP vc5_service_rx_octets counter
155-
# HELP vc5_service_tx_packets counter
156-
# HELP vc5_service_tx_octets counter
157-
# HELP vc5_service_status gauge
158-
# HELP vc5_service_status_duration gauge
159-
# HELP vc5_service_reserves_used gauge
160-
# HELP vc5_backend_sessions gauge
161-
# HELP vc5_backend_sessions_total counter
162-
# HELP vc5_backend_rx_packets counter
163-
# HELP vc5_backend_rx_octets counter
164-
# HELP vc5_backend_tx_packets counter
165-
# HELP vc5_backend_tx_octets counter
166-
# HELP vc5_backend_status gauge
167-
# HELP vc5_backend_status_duration gauge`
111+
func help(p string) string {
112+
return `# TYPE ` + p + `_uptime counter
113+
# TYPE ` + p + `_defcon gauge
114+
# TYPE ` + p + `_latency gauge
115+
# TYPE ` + p + `_sessions gauge
116+
# TYPE ` + p + `_session_total counter
117+
# TYPE ` + p + `_rx_packets counter
118+
# TYPE ` + p + `_rx_octets counter
119+
# TYPE ` + p + `_tx_packets counter
120+
# TYPE ` + p + `_tx_octets counter
121+
# TYPE ` + p + `_vip_status gauge
122+
# TYPE ` + p + `_vip_status_duration gauge
123+
# TYPE ` + p + `_service_sessions gauge
124+
# TYPE ` + p + `_service_sessions_total counter
125+
# TYPE ` + p + `_service_rx_packets counter
126+
# TYPE ` + p + `_service_rx_octets counter
127+
# TYPE ` + p + `_service_tx_packets counter
128+
# TYPE ` + p + `_service_tx_octets counter
129+
# TYPE ` + p + `_service_status gauge
130+
# TYPE ` + p + `_service_status_duration gauge
131+
# TYPE ` + p + `_service_reserves_used gauge
132+
# TYPE ` + p + `_backend_sessions gauge
133+
# TYPE ` + p + `_backend_sessions_total counter
134+
# TYPE ` + p + `_backend_rx_packets counter
135+
# TYPE ` + p + `_backend_rx_octets counter
136+
# TYPE ` + p + `_backend_tx_packets counter
137+
# TYPE ` + p + `_backend_tx_octets counter
138+
# TYPE ` + p + `_backend_status gauge
139+
# TYPE ` + p + `_backend_status_duration gauge
140+
# HELP ` + p + `_uptime Uptime in seconds
141+
# HELP ` + p + `_defcon Readiness level
142+
# HELP ` + p + `_latency Average packet processing latency in nanoseconds
143+
# HELP ` + p + `_sessions Estimated number of current active sessions
144+
# HELP ` + p + `_session_total Total number of new sessions written to state tracking table
145+
# HELP ` + p + `_rx_packets Total number of incoming packets
146+
# HELP ` + p + `_rx_octets Total number incoming bytes
147+
# HELP ` + p + `_tx_packets Total number of outgoing packets
148+
# HELP ` + p + `_tx_octets Total number outgoing bytes
149+
# HELP ` + p + `_vip_status gauge
150+
# HELP ` + p + `_vip_status_duration gauge
151+
# HELP ` + p + `_service_sessions gauge
152+
# HELP ` + p + `_service_sessions_total counter
153+
# HELP ` + p + `_service_rx_packets counter
154+
# HELP ` + p + `_service_rx_octets counter
155+
# HELP ` + p + `_service_tx_packets counter
156+
# HELP ` + p + `_service_tx_octets counter
157+
# HELP ` + p + `_service_status gauge
158+
# HELP ` + p + `_service_status_duration gauge
159+
# HELP ` + p + `_service_reserves_used gauge
160+
# HELP ` + p + `_backend_sessions gauge
161+
# HELP ` + p + `_backend_sessions_total counter
162+
# HELP ` + p + `_backend_rx_packets counter
163+
# HELP ` + p + `_backend_rx_octets counter
164+
# HELP ` + p + `_backend_tx_packets counter
165+
# HELP ` + p + `_backend_tx_octets counter
166+
# HELP ` + p + `_backend_status gauge
167+
# HELP ` + p + `_backend_status_duration gauge`
168168
}

0 commit comments

Comments
 (0)