Skip to content

Commit

Permalink
policystatemetrics: use observer.GetSensorManager()
Browse files Browse the repository at this point in the history
policystatemetrics needs a reference to the sensor manager so that it
can collect metrics. Currently, this reference is passed using
observer.GetSensorManager() at initialization time.

In observer tests, we currently do not restart the metrics (see [1])
which means that if we create a new observer, then the metrics will
still reference the old sensor manager.

Fix this by having policystatemetrics to call
observer.GetSensorManager() to get the latest version of the sensor
manager.

[1] https://github.com/cilium/tetragon/blob/22eb995b19207ac0ced2dd83950ec8e8aedd122d/pkg/observer/observertesthelper/observer_test_helper.go#L272-L276

Signed-off-by: Kornilios Kourtis <kornilios@isovalent.com>
  • Loading branch information
kkourt committed Apr 2, 2024
1 parent f3bd8ee commit e26b385
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 10 deletions.
17 changes: 8 additions & 9 deletions pkg/metrics/policystatemetrics/policystatemetrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,15 @@ import (
"github.com/cilium/tetragon/pkg/logger"
"github.com/cilium/tetragon/pkg/metrics/consts"
"github.com/cilium/tetragon/pkg/observer"
"github.com/cilium/tetragon/pkg/sensors"
"github.com/prometheus/client_golang/prometheus"
)

type policyStateCollector struct {
descriptor *prometheus.Desc
sensorManager *sensors.Manager
descriptor *prometheus.Desc
}

func InitMetrics(registry *prometheus.Registry) {
registry.MustRegister(newPolicyStateCollector(observer.GetSensorManager()))
registry.MustRegister(newPolicyStateCollector())
}

func InitMetricsForDocs(registry *prometheus.Registry) {
Expand All @@ -30,14 +28,13 @@ func InitMetricsForDocs(registry *prometheus.Registry) {

// This metric collector converts the output of ListTracingPolicies into a few
// gauges metrics on collection. Thus, it needs a sensor manager to query.
func newPolicyStateCollector(sensorManager *sensors.Manager) *policyStateCollector {
func newPolicyStateCollector() *policyStateCollector {
return &policyStateCollector{
descriptor: prometheus.NewDesc(
prometheus.BuildFQName(consts.MetricsNamespace, "", "tracingpolicy_loaded"),
"The number of loaded tracing policy by state.",
[]string{"state"}, nil,
),
sensorManager: sensorManager,
}
}

Expand All @@ -46,11 +43,13 @@ func (c *policyStateCollector) Describe(ch chan<- *prometheus.Desc) {
}

func (c *policyStateCollector) Collect(ch chan<- prometheus.Metric) {
if c.sensorManager == nil {

sm := observer.GetSensorManager()
if sm == nil {
logger.GetLogger().Debug("failed retrieving the sensor manager: manager is nil")
return
}
list, err := c.sensorManager.ListTracingPolicies(context.Background())
list, err := sm.ListTracingPolicies(context.Background())
if err != nil {
logger.GetLogger().WithError(err).Warn("error listing tracing policies to collect policies state")
return
Expand Down Expand Up @@ -97,7 +96,7 @@ type policyStateZeroCollector struct {

func newPolicyStateZeroCollector() prometheus.Collector {
return &policyStateZeroCollector{
policyStateCollector: *newPolicyStateCollector(nil),
policyStateCollector: *newPolicyStateCollector(),
}
}

Expand Down
10 changes: 9 additions & 1 deletion pkg/metrics/policystatemetrics/policystatemetrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"strings"
"testing"

"github.com/cilium/tetragon/pkg/observer"
tus "github.com/cilium/tetragon/pkg/testutils/sensors"
"github.com/cilium/tetragon/pkg/tracingpolicy"
"github.com/prometheus/client_golang/prometheus"
Expand All @@ -30,9 +31,16 @@ tetragon_tracingpolicy_loaded{state="load_error"} %d
}

reg := prometheus.NewRegistry()

// NB(kkourt): the policy state collector uses observer.GetSensorManager() to get the sensor
// manager because in the observer tests we only initialize metrics while the observer
// changes for every test (see:
// https://github.com/cilium/tetragon/blob/22eb995b19207ac0ced2dd83950ec8e8aedd122d/pkg/observer/observertesthelper/observer_test_helper.go#L272-L276)
manager := tus.GetTestSensorManager(context.TODO(), t).Manager
observer.SetSensorManager(manager)
t.Cleanup(observer.ResetSensorManager)

collector := newPolicyStateCollector(manager)
collector := newPolicyStateCollector()
reg.Register(collector)

err := manager.AddTracingPolicy(context.TODO(), &tracingpolicy.GenericTracingPolicy{
Expand Down

0 comments on commit e26b385

Please sign in to comment.