Skip to content

Commit

Permalink
tetragon: Add kprobe stats timer
Browse files Browse the repository at this point in the history
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
  • Loading branch information
olsajiri committed Feb 2, 2024
1 parent 8e8e710 commit 6e23002
Showing 1 changed file with 43 additions and 0 deletions.
43 changes: 43 additions & 0 deletions pkg/sensors/tracing/generickprobe.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@ import (
"net/http"
"path"
"strings"
"time"

"github.com/cilium/ebpf"
"github.com/cilium/ebpf/link"
"github.com/cilium/tetragon/pkg/api/ops"
"github.com/cilium/tetragon/pkg/api/processapi"
api "github.com/cilium/tetragon/pkg/api/tracingapi"
Expand All @@ -29,12 +31,14 @@ import (
"github.com/cilium/tetragon/pkg/kernels"
"github.com/cilium/tetragon/pkg/logger"
"github.com/cilium/tetragon/pkg/metrics/kprobemetrics"
"github.com/cilium/tetragon/pkg/metrics/probemetrics"
"github.com/cilium/tetragon/pkg/observer"
"github.com/cilium/tetragon/pkg/option"
"github.com/cilium/tetragon/pkg/policyfilter"
"github.com/cilium/tetragon/pkg/selectors"
"github.com/cilium/tetragon/pkg/sensors"
"github.com/cilium/tetragon/pkg/sensors/program"
"github.com/cilium/tetragon/pkg/timer"
lru "github.com/hashicorp/golang-lru/v2"
"github.com/sirupsen/logrus"

Expand Down Expand Up @@ -496,6 +500,34 @@ func getKprobeSymbols(symbol string, syscall bool, lists []v1alpha1.ListSpec) ([
return []string{symbol}, syscall, nil
}

func getKprobeStats(policyID policyfilter.PolicyID, policyName string, progs []*program.Program) {
for _, prog := range progs {
info, err := prog.Link.Info()
if err != nil {
continue
}

missed := uint64(0)

switch info.Type {
case link.PerfEventType:
pevent := info.PerfEvent()
switch pevent.Type {
case link.KprobePEIType, link.KretprobePEIType:
kprobe := pevent.Kprobe()
missed = kprobe.Missed
default:
}
case link.KprobeMultiType:
kmulti := info.KprobeMulti()
missed = kmulti.Missed
default:
}

probemetrics.Store(uint32(policyID), policyName, prog.Attach, float64(missed))
}
}

func createGenericKprobeSensor(
spec *v1alpha1.TracingPolicySpec,
name string,
Expand Down Expand Up @@ -566,10 +598,17 @@ func createGenericKprobeSensor(
return nil, err
}

statsTimer := timer.NewPeriodicTimer("generickprobe stats timer",
func() { getKprobeStats(policyID, policyName, progs) }, true)

return &sensors.Sensor{
Name: name,
Progs: progs,
Maps: maps,
PostLoadHook: func() error {
statsTimer.Start(2 * time.Second)
return nil
},
PostUnloadHook: func() error {
var errs error
for _, id := range ids {
Expand All @@ -585,6 +624,10 @@ func createGenericKprobeSensor(
gk.stackTraceMapRef = nil
}
}
statsTimer.Stop()
for _, prog := range progs {
probemetrics.Remove(uint32(policyID), prog.Attach)
}
return errs
},
DestroyHook: func() error {
Expand Down

0 comments on commit 6e23002

Please # to comment.