Skip to content

Make logs consistent #243

@flavio

Description

@flavio

Currently the logs produced by the agent and by the controller are not consistent.

Some log stament produced by the agent are json encoded, while others are not.

Agent logs - example-1

Mixed bag of json and text:

time=2026-02-05T13:46:00.857Z level=INFO msg="Probing eBPF features..." component=agent
time=2026-02-05T13:46:01.192Z level=INFO msg="Cgroupv2 supported controllers detected successfully" component=agent cgroup.controllers="[cpuset cpu io memory hugetlb pids rdma misc dmem]"
time=2026-02-05T13:46:01.192Z level=INFO msg="Load time configuration detected" component=agent component=ebpf-manager cgrp_fs_magic=cgroupv2 cgrp_v1_subsys_idx=0 debug_mode=0
time=2026-02-05T13:46:01.480Z level=INFO msg="learning mode is enabled" component=agent
time=2026-02-05T13:46:01.481Z level=INFO msg="connecting to NRI socket" component=agent component=nri-handler
time=2026-02-05T13:46:01.533Z level=INFO msg="starting manager" component=agent
{"level":"info","ts":"2026-02-05T13:46:01Z","msg":"starting server","name":"health probe","addr":"[::]:8081"}
{"level":"info","ts":"2026-02-05T13:46:01Z","logger":"controller-runtime.metrics","msg":"Starting metrics server"}
{"level":"info","ts":"2026-02-05T13:46:01Z","logger":"controller-runtime.metrics","msg":"Serving metrics server","bindAddress":":8080","secure":false}
time=2026-02-05T13:46:01.636Z level=INFO msg="Starting BPF Manager..." component=agent component=ebpf-manager
{"level":"info","ts":"2026-02-05T13:46:01Z","msg":"Starting EventSource","controller":"learningEvent","source":"channel source: 0xc000186230"}
{"level":"info","ts":"2026-02-05T13:46:01Z","msg":"Starting Controller","controller":"learningEvent"}
{"level":"info","ts":"2026-02-05T13:46:01Z","msg":"Starting workers","controller":"learningEvent","worker count":1}
time="2026-02-05T13:46:01Z" level=info msg="Created plugin 00-agent (agent, handles StartContainer,RemoveContainer)"
time=2026-02-05T13:46:01.642Z level=INFO msg="Starting gRPC exporter" component=agent component=grpc_exporter addr=:50051 mTLS=true
Agent logs - example-2

Some log levels are uppercase, others are not:

time=2026-02-05T13:46:01.642Z level=INFO msg="Starting gRPC exporter" component=agent component=grpc_exporter addr=:50051 mTLS=true
time="2026-02-05T13:46:01Z" level=info msg="Registering plugin 00-agent..."

The same seems to happen also inside of the controller.

Controller logs
2026-02-05T13:45:28Z	INFO	controller-runtime.webhook	Serving webhook server	{"host": "", "port": 9443}
2026-02-05T13:45:28Z	INFO	controller-runtime.certwatcher	Starting certificate poll+watcher	{"cert": "/tmp/k8s-webhook-server/serving-certs/tls.crt", "key": "/tmp/k8s-webhook-server/serving-certs/tls.key", "interval": "10s"}

I0205 13:45:28.853226      43 leaderelection.go:258] "Attempting to acquire leader lease..." lock="runtime-enforcer/4e873589.rancher.io"

2026-02-05T13:45:29Z	INFO	controller-runtime.metrics	Serving metrics server	{"bindAddress": ":8443", "secure": true}

I0205 13:45:46.670555      43 leaderelection.go:272] "Successfully acquired lease" lock="runtime-enforcer/4e873589.rancher.io"

2026-02-05T13:45:46Z	INFO	WorkloadPolicyStatusSync	Starting with	{"interval": "30s"}

Acceptance Criteria

  • Use structured logging everwhere
  • Use JSON format by default
  • Use Go's log/slog, there are adapters also for controller runtime (see what sbomscanner is doing)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Backlog

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions