diff --git a/CHANGELOG.md b/CHANGELOG.md index a1890538b2c..3ecc0c216df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,7 @@ * [ENHANCEMENT] Clarify docs for `-ingester.client.*` flags to make it clear that these are used by both queriers and distributors. #5375 * [BUGFIX] Ingester: Handle when previous ring state is leaving and the number of tokens has changed. #5204 * [BUGFIX] Querier: fix issue where queries that use the `timestamp()` function fail with `execution: attempted to read series at index 0 from stream, but the stream has already been exhausted` if streaming chunks from ingesters to queriers is enabled. #5370 +* [BUGFIX] memberlist: bring back `memberlist_client_kv_store_count` metric that used to exist in Cortex, but got lost during dskit updates before Mimir 2.0. #5377 ### Mixin diff --git a/go.mod b/go.mod index f9979697acb..6c521f18940 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( github.com/golang/snappy v0.0.4 github.com/google/gopacket v1.1.19 github.com/gorilla/mux v1.8.0 - github.com/grafana/dskit v0.0.0-20230628003247-9db715ae9442 + github.com/grafana/dskit v0.0.0-20230629144239-f335545f8ba3 github.com/grafana/e2e v0.1.1-0.20230221201045-21ebba73580b github.com/hashicorp/golang-lru v0.6.0 github.com/json-iterator/go v1.1.12 diff --git a/go.sum b/go.sum index b8daf40c989..bfa25574a46 100644 --- a/go.sum +++ b/go.sum @@ -867,8 +867,8 @@ github.com/gosimple/slug v1.1.1 h1:fRu/digW+NMwBIP+RmviTK97Ho/bEj/C9swrCspN3D4= github.com/gosimple/slug v1.1.1/go.mod h1:ER78kgg1Mv0NQGlXiDe57DpCyfbNywXXZ9mIorhxAf0= github.com/grafana-tools/sdk v0.0.0-20211220201350-966b3088eec9 h1:LQAhgcUPnzdjU/OjCJaLlPQI7NmQCRlfjMPSA1VegvA= github.com/grafana-tools/sdk v0.0.0-20211220201350-966b3088eec9/go.mod h1:AHHlOEv1+GGQ3ktHMlhuTUwo3zljV3QJbC0+8o2kn+4= -github.com/grafana/dskit v0.0.0-20230628003247-9db715ae9442 h1:F7m06ikQSm2fta0wb0a57H7RfvD7uzsNTwLE6egYx/0= -github.com/grafana/dskit v0.0.0-20230628003247-9db715ae9442/go.mod h1:M03k2fzuQ2n9TVE1xfVKTESibxsXdw0wYfWT3+9Owp4= +github.com/grafana/dskit v0.0.0-20230629144239-f335545f8ba3 h1:EXq/7LpU4G75hEVtcW/Bs8K+Mk7U18cCsg9huTJcDOU= +github.com/grafana/dskit v0.0.0-20230629144239-f335545f8ba3/go.mod h1:M03k2fzuQ2n9TVE1xfVKTESibxsXdw0wYfWT3+9Owp4= github.com/grafana/e2e v0.1.1-0.20230221201045-21ebba73580b h1:dzle+89/D0hOxscjZlkb6ovYA52t9hl6h/S+hI8ek1Q= github.com/grafana/e2e v0.1.1-0.20230221201045-21ebba73580b/go.mod h1:3UsooRp7yW5/NJQBlXcTsAHOoykEhNUYXkQ3r6ehEEY= github.com/grafana/gomemcache v0.0.0-20230316202710-a081dae0aba9 h1:WB3bGH2f1UN6jkd6uAEWfHB8OD7dKJ0v2Oo6SNfhpfQ= diff --git a/pkg/mimir/modules.go b/pkg/mimir/modules.go index 1d0f5215988..a467449b8c9 100644 --- a/pkg/mimir/modules.go +++ b/pkg/mimir/modules.go @@ -832,9 +832,6 @@ func (t *Mimir) initStoreGateway() (serv services.Service, err error) { } func (t *Mimir) initMemberlistKV() (services.Service, error) { - reg := t.Registerer - t.Cfg.MemberlistKV.MetricsRegisterer = reg - // Append to the list of codecs instead of overwriting the value to allow third parties to inject their own codecs. t.Cfg.MemberlistKV.Codecs = append(t.Cfg.MemberlistKV.Codecs, ring.GetCodec()) @@ -842,11 +839,11 @@ func (t *Mimir) initMemberlistKV() (services.Service, error) { "cortex_", prometheus.WrapRegistererWith( prometheus.Labels{"component": "memberlist"}, - reg, + t.Registerer, ), ) dnsProvider := dns.NewProvider(util_log.Logger, dnsProviderReg, dns.GolangResolverType) - t.MemberlistKV = memberlist.NewKVInitService(&t.Cfg.MemberlistKV, util_log.Logger, dnsProvider, reg) + t.MemberlistKV = memberlist.NewKVInitService(&t.Cfg.MemberlistKV, util_log.Logger, dnsProvider, t.Registerer) t.API.RegisterMemberlistKV(t.Cfg.Server.PathPrefix, t.MemberlistKV) // Update the config. diff --git a/vendor/github.com/grafana/dskit/kv/memberlist/memberlist_client.go b/vendor/github.com/grafana/dskit/kv/memberlist/memberlist_client.go index bcfc6ac99c9..30a27531fd0 100644 --- a/vendor/github.com/grafana/dskit/kv/memberlist/memberlist_client.go +++ b/vendor/github.com/grafana/dskit/kv/memberlist/memberlist_client.go @@ -164,9 +164,7 @@ type KVConfig struct { TCPTransport TCPTransportConfig `yaml:",inline"` - // Where to put custom metrics. Metrics are not registered, if this is nil. - MetricsRegisterer prometheus.Registerer `yaml:"-"` - MetricsNamespace string `yaml:"-"` + MetricsNamespace string `yaml:"-"` // Codecs to register. Codecs need to be registered before joining other members. Codecs []codec.Codec `yaml:"-"` @@ -354,7 +352,6 @@ var ( // trigger connecting to the existing memberlist cluster. If that fails and AbortIfJoinFails is true, error is returned // and service enters Failed state. func NewKV(cfg KVConfig, logger log.Logger, dnsProvider DNSProvider, registerer prometheus.Registerer) *KV { - cfg.TCPTransport.MetricsRegisterer = cfg.MetricsRegisterer cfg.TCPTransport.MetricsNamespace = cfg.MetricsNamespace mlkv := &KV{ @@ -386,7 +383,7 @@ func defaultMemberlistConfig() *memberlist.Config { } func (m *KV) buildMemberlistConfig() (*memberlist.Config, error) { - tr, err := NewTCPTransport(m.cfg.TCPTransport, m.logger) + tr, err := NewTCPTransport(m.cfg.TCPTransport, m.logger, m.registerer) if err != nil { return nil, fmt.Errorf("failed to create transport: %v", err) } diff --git a/vendor/github.com/grafana/dskit/kv/memberlist/metrics.go b/vendor/github.com/grafana/dskit/kv/memberlist/metrics.go index 9ab56a662db..75a6b232476 100644 --- a/vendor/github.com/grafana/dskit/kv/memberlist/metrics.go +++ b/vendor/github.com/grafana/dskit/kv/memberlist/metrics.go @@ -171,17 +171,25 @@ func (m *KV) createAndRegisterMetrics() { Help: "Number of dropped notifications in WatchPrefix function", }, []string{"prefix"}) - if m.cfg.MetricsRegisterer == nil { + if m.registerer == nil { return } + m.registerer.MustRegister(m) + // memberlist uses armonmetrics package for internal usage - // here we configure armonmetrics to use prometheus - sink, err := armonprometheus.NewPrometheusSink() // there is no option to pass registrerer, this uses default + // here we configure armonmetrics to use prometheus. + opts := armonprometheus.PrometheusOpts{ + Expiration: 0, // Don't expire metrics. + Registerer: m.registerer, + } + + sink, err := armonprometheus.NewPrometheusSinkFrom(opts) if err == nil { cfg := armonmetrics.DefaultConfig("") cfg.EnableHostname = false // no need to put hostname into metric cfg.EnableHostnameLabel = false // no need to put hostname into labels + cfg.EnableServiceLabel = false // Don't put service name into a label. (We don't set service name anyway). cfg.EnableRuntimeMetrics = false // metrics about Go runtime already provided by prometheus cfg.EnableTypePrefix = true // to make better sense of internal memberlist metrics cfg.TimerGranularity = time.Second // timers are in seconds in prometheus world diff --git a/vendor/github.com/grafana/dskit/kv/memberlist/tcp_transport.go b/vendor/github.com/grafana/dskit/kv/memberlist/tcp_transport.go index 78fe1963230..bd82c585a8b 100644 --- a/vendor/github.com/grafana/dskit/kv/memberlist/tcp_transport.go +++ b/vendor/github.com/grafana/dskit/kv/memberlist/tcp_transport.go @@ -56,8 +56,7 @@ type TCPTransportConfig struct { TransportDebug bool `yaml:"-" category:"advanced"` // Where to put custom metrics. nil = don't register. - MetricsRegisterer prometheus.Registerer `yaml:"-"` - MetricsNamespace string `yaml:"-"` + MetricsNamespace string `yaml:"-"` TLSEnabled bool `yaml:"tls_enabled" category:"advanced"` TLS dstls.ClientConfig `yaml:",inline"` @@ -113,7 +112,7 @@ type TCPTransport struct { // NewTCPTransport returns a new tcp-based transport with the given configuration. On // success all the network listeners will be created and listening. -func NewTCPTransport(config TCPTransportConfig, logger log.Logger) (*TCPTransport, error) { +func NewTCPTransport(config TCPTransportConfig, logger log.Logger, registerer prometheus.Registerer) (*TCPTransport, error) { if len(config.BindAddrs) == 0 { config.BindAddrs = []string{zeroZeroZeroZero} } @@ -135,7 +134,7 @@ func NewTCPTransport(config TCPTransportConfig, logger log.Logger) (*TCPTranspor } } - t.registerMetrics(config.MetricsRegisterer) + t.registerMetrics(registerer) // Clean up listeners if there's an error. defer func() { diff --git a/vendor/modules.txt b/vendor/modules.txt index 681a611594c..3a79855539c 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -553,7 +553,7 @@ github.com/gosimple/slug # github.com/grafana-tools/sdk v0.0.0-20211220201350-966b3088eec9 ## explicit; go 1.13 github.com/grafana-tools/sdk -# github.com/grafana/dskit v0.0.0-20230628003247-9db715ae9442 +# github.com/grafana/dskit v0.0.0-20230629144239-f335545f8ba3 ## explicit; go 1.18 github.com/grafana/dskit/backoff github.com/grafana/dskit/cache