Skip to content

Commit

Permalink
Disable usage metrics on performance standby nodes. (#9966)
Browse files Browse the repository at this point in the history
  • Loading branch information
Mark Gritter committed Sep 15, 2020
1 parent 3410ce8 commit c486652
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 4 deletions.
3 changes: 2 additions & 1 deletion vault/core.go
Original file line number Diff line number Diff line change
Expand Up @@ -1971,7 +1971,8 @@ func (s standardUnsealStrategy) unseal(ctx context.Context, logger log.Logger, c
return nil
}

// postUnseal is invoked on the active node after the barrier is unsealed, but before
// postUnseal is invoked on the active node, and performance standby nodes,
// after the barrier is unsealed, but before
// allowing any user operations. This allows us to setup any state that
// requires the Vault to be unsealed such as mount tables, logical backends,
// credential stores, etc.
Expand Down
18 changes: 15 additions & 3 deletions vault/core_metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,13 @@ func (c *Core) metricsLoop(stopCh chan struct{}) {
select {
case <-emitTimer:
c.metricsMutex.Lock()
if c.expiration != nil {

// Emit on active node only
if c.expiration != nil && !c.perfStandby {
c.expiration.emitMetrics()
}
// Refresh the sealed gauge

// Refresh the sealed gauge, on all nodes
if c.Sealed() {
c.metricSink.SetGaugeWithLabels([]string{"core", "unsealed"}, 0, nil)
} else {
Expand All @@ -54,6 +57,11 @@ func (c *Core) metricsLoop(stopCh chan struct{}) {
}
c.stateLock.RUnlock()
case <-identityCountTimer:
// Only emit on active node
if c.perfStandby {
break
}

// TODO: this can be replaced by the identity gauge counter; we need to
// sum across all namespaces.
go func() {
Expand Down Expand Up @@ -123,6 +131,9 @@ func (c *Core) emitMetrics(stopCh chan struct{}) {
// The gauge collection processes are started and stopped here
// because there's more than one TokenManager created during startup,
// but we only want one set of gauges.
//
// Both active nodes and performance standby nodes call emitMetrics
// so we have to handle both.

metricsInit := []struct {
MetricName []string
Expand Down Expand Up @@ -174,9 +185,10 @@ func (c *Core) emitMetrics(stopCh chan struct{}) {
},
}

// Disable collection if configured, or if we're a performance standby.
if c.MetricSink().GaugeInterval == time.Duration(0) {
c.logger.Info("usage gauge collection is disabled")
} else {
} else if !c.perfStandby {
for _, init := range metricsInit {
if init.DisableEnvVar != "" {
if os.Getenv(init.DisableEnvVar) != "" {
Expand Down

0 comments on commit c486652

Please sign in to comment.