Skip to content
This repository was archived by the owner on Jan 20, 2026. It is now read-only.

Commit 530da86

Browse files
committed
Add otel metrics for seidb
1 parent 00d174d commit 530da86

4 files changed

Lines changed: 186 additions & 54 deletions

File tree

common/metrics/metrics.go

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package metrics
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
"net/http"
8+
9+
"github.com/prometheus/client_golang/prometheus/promhttp"
10+
"go.opentelemetry.io/otel"
11+
"go.opentelemetry.io/otel/exporters/prometheus"
12+
"go.opentelemetry.io/otel/metric"
13+
sdk "go.opentelemetry.io/otel/sdk/metric"
14+
)
15+
16+
var (
17+
meter = otel.Meter("seidb")
18+
19+
SeiDBMetrics = struct {
20+
RestartLatency metric.Float64Histogram
21+
SnapshotCreationLatency metric.Float64Histogram
22+
CommitLatency metric.Float64Histogram
23+
MemNodeTotalSize metric.Float64Gauge
24+
MemNodeCount metric.Float64Gauge
25+
}{
26+
RestartLatency: must(meter.Float64Histogram(
27+
"restart_latency_seconds",
28+
metric.WithDescription("Time taken to restart the memiavl database"),
29+
metric.WithUnit("s"),
30+
)),
31+
SnapshotCreationLatency: must(meter.Float64Histogram(
32+
"snapshot_creation_latency_seconds",
33+
metric.WithDescription("Time taken to create memiavl snapshot"),
34+
metric.WithUnit("s"),
35+
)),
36+
CommitLatency: must(meter.Float64Histogram(
37+
"commit_latency_seconds",
38+
metric.WithDescription("Time taken to commit"),
39+
metric.WithUnit("s"),
40+
)),
41+
MemNodeTotalSize: must(meter.Float64Gauge(
42+
"mem_node_total_size",
43+
metric.WithDescription("Time taken to restart the memiavl database"),
44+
metric.WithUnit("s"),
45+
)),
46+
MemNodeCount: must(meter.Float64Gauge(
47+
"mem_node_count",
48+
metric.WithDescription("Time taken to restart the memiavl database"),
49+
metric.WithUnit("s"),
50+
)),
51+
}
52+
)
53+
54+
// must panics if err is non-nil, otherwise returns v.
55+
func must[V any](v V, err error) V {
56+
if err != nil {
57+
panic(err)
58+
}
59+
return v
60+
}
61+
62+
func SetupMetricsProvider(ctx context.Context, listenAddr string) error {
63+
metricsExporter, err := prometheus.New(prometheus.WithNamespace("seidb"))
64+
if err != nil {
65+
return fmt.Errorf("failed to create Prometheus exporter: %w", err)
66+
}
67+
otel.SetMeterProvider(sdk.NewMeterProvider(sdk.WithReader(metricsExporter)))
68+
go func() {
69+
defer func() { _ = metricsExporter.Shutdown(ctx) }()
70+
http.Handle("/metrics", promhttp.Handler())
71+
err := http.ListenAndServe(listenAddr, nil)
72+
if err != nil {
73+
log.Printf("failed to serve metrics: %v", err)
74+
return
75+
}
76+
}()
77+
return nil
78+
}

go.mod

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
module github.com/sei-protocol/sei-db
22

3-
go 1.19
3+
go 1.23.0
4+
5+
toolchain go1.23.5
46

57
require (
68
github.com/alitto/pond v1.8.3
@@ -13,12 +15,16 @@ require (
1315
github.com/ledgerwatch/erigon-lib v0.0.0-20230210071639-db0e7ed11263
1416
github.com/linxGnu/grocksdb v1.8.4
1517
github.com/spf13/cobra v1.6.1
16-
github.com/stretchr/testify v1.8.4
18+
github.com/stretchr/testify v1.11.1
1719
github.com/tendermint/tm-db v0.6.8-0.20220519162814-e24b96538a12
1820
github.com/tidwall/btree v1.6.0
1921
github.com/tidwall/gjson v1.10.2
2022
github.com/tidwall/wal v1.1.7
2123
github.com/zbiljic/go-filelock v0.0.0-20170914061330-1dbf7103ab7d
24+
go.opentelemetry.io/otel v1.38.0
25+
go.opentelemetry.io/otel/exporters/prometheus v0.60.0
26+
go.opentelemetry.io/otel/metric v1.38.0
27+
go.opentelemetry.io/otel/sdk/metric v1.38.0
2228
golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb
2329
modernc.org/sqlite v1.26.0
2430
)
@@ -27,7 +33,7 @@ require (
2733
github.com/DataDog/zstd v1.4.5 // indirect
2834
github.com/beorn7/perks v1.0.1 // indirect
2935
github.com/cespare/xxhash v1.1.0 // indirect
30-
github.com/cespare/xxhash/v2 v2.2.0 // indirect
36+
github.com/cespare/xxhash/v2 v2.3.0 // indirect
3137
github.com/cockroachdb/errors v1.8.1 // indirect
3238
github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f // indirect
3339
github.com/cockroachdb/redact v1.0.8 // indirect
@@ -40,34 +46,38 @@ require (
4046
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect
4147
github.com/dustin/go-humanize v1.0.1 // indirect
4248
github.com/fsnotify/fsnotify v1.6.0 // indirect
49+
github.com/go-logr/logr v1.4.3 // indirect
50+
github.com/go-logr/stdr v1.2.2 // indirect
4351
github.com/golang/glog v1.1.0 // indirect
4452
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
4553
github.com/golang/protobuf v1.5.3 // indirect
4654
github.com/golang/snappy v0.0.4 // indirect
4755
github.com/google/btree v1.1.2 // indirect
4856
github.com/google/flatbuffers v1.12.1 // indirect
49-
github.com/google/uuid v1.3.0 // indirect
57+
github.com/google/uuid v1.6.0 // indirect
58+
github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect
5059
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
5160
github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect
5261
github.com/inconshreveable/mousetrap v1.0.1 // indirect
5362
github.com/jmespath/go-jmespath v0.4.0 // indirect
5463
github.com/jmhodges/levigo v1.0.0 // indirect
5564
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
56-
github.com/klauspost/compress v1.16.3 // indirect
65+
github.com/klauspost/compress v1.18.0 // indirect
5766
github.com/kr/pretty v0.3.1 // indirect
5867
github.com/kr/text v0.2.0 // indirect
5968
github.com/mattn/go-isatty v0.0.19 // indirect
60-
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
69+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
6170
github.com/onsi/gomega v1.20.0 // indirect
6271
github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect
6372
github.com/pkg/errors v0.9.1 // indirect
6473
github.com/pmezard/go-difflib v1.0.0 // indirect
65-
github.com/prometheus/client_golang v1.14.0 // indirect
66-
github.com/prometheus/client_model v0.3.0 // indirect
67-
github.com/prometheus/common v0.42.0 // indirect
68-
github.com/prometheus/procfs v0.9.0 // indirect
74+
github.com/prometheus/client_golang v1.23.0 // indirect
75+
github.com/prometheus/client_model v0.6.2 // indirect
76+
github.com/prometheus/common v0.65.0 // indirect
77+
github.com/prometheus/otlptranslator v0.0.2 // indirect
78+
github.com/prometheus/procfs v0.17.0 // indirect
6979
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
70-
github.com/rogpeppe/go-internal v1.11.0 // indirect
80+
github.com/rogpeppe/go-internal v1.13.1 // indirect
7181
github.com/spf13/pflag v1.0.5 // indirect
7282
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect
7383
github.com/tendermint/tendermint v0.34.20 // indirect
@@ -76,13 +86,16 @@ require (
7686
github.com/tidwall/tinylru v1.1.0 // indirect
7787
go.etcd.io/bbolt v1.3.7 // indirect
7888
go.opencensus.io v0.23.0 // indirect
79-
golang.org/x/crypto v0.14.0 // indirect
80-
golang.org/x/mod v0.11.0 // indirect
81-
golang.org/x/net v0.17.0 // indirect
82-
golang.org/x/sync v0.3.0 // indirect
83-
golang.org/x/sys v0.13.0 // indirect
84-
golang.org/x/tools v0.6.0 // indirect
85-
google.golang.org/protobuf v1.31.0 // indirect
89+
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
90+
go.opentelemetry.io/otel/sdk v1.38.0 // indirect
91+
go.opentelemetry.io/otel/trace v1.38.0 // indirect
92+
golang.org/x/crypto v0.38.0 // indirect
93+
golang.org/x/mod v0.18.0 // indirect
94+
golang.org/x/net v0.40.0 // indirect
95+
golang.org/x/sync v0.15.0 // indirect
96+
golang.org/x/sys v0.35.0 // indirect
97+
golang.org/x/tools v0.22.0 // indirect
98+
google.golang.org/protobuf v1.36.8 // indirect
8699
gopkg.in/yaml.v3 v3.0.1 // indirect
87100
lukechampine.com/uint128 v1.2.0 // indirect
88101
modernc.org/cc/v3 v3.40.0 // indirect

0 commit comments

Comments
 (0)