bug(karmor logs): karmor logs are getting panicked when we use label function
yasin-cs-ko-ak opened this issue · comments
Refer below:
➜ ~ karmor logs --json -n wordpress-mysql -l app=mysql | jq .
local port to be used for port forwarding kubearmor-relay-6fddb8865b-d6v2f: 32775
Created a gRPC client (localhost:32775)
Checked the liveness of the gRPC server
Started to watch alerts
panic: interface conversion: interface {} is nil, not string
goroutine 44 [running]:
github.com/kubearmor/kubearmor-client/log.WatchTelemetryHelper({0xc000032480, 0x232, _}, {_, _}, {{0x0, 0x0}, {0x1ea1d7a, 0x4}, {0x1ea4d05, ...}, ...})
/home/runner/work/kubearmor-client/kubearmor-client/log/logClient.go:304 +0xd27
github.com/kubearmor/kubearmor-client/log.(*Feeder).WatchAlerts(0xc00068de00, {{0x0, 0x0}, {0x1ea1d7a, 0x4}, {0x1ea4d05, 0x6}, {0x1ea49e7, 0x6}, 0x1, ...})
/home/runner/work/kubearmor-client/kubearmor-client/log/logClient.go:249 +0x105
created by github.com/kubearmor/kubearmor-client/log.StartObserver
/home/runner/work/kubearmor-client/kubearmor-client/log/log.go:173 +0x5cc
To Reproduce:
- Deploy this wordpress-mysql deployment
kubectl apply -f https://raw.githubusercontent.com/kubearmor/KubeArmor/main/examples/wordpress-mysql/wordpress-mysql-deployment.yaml
- Install karmor client
- Deploy kubearmor in your cluster
- Check for logs using
karmor logs --json -n wordpress-mysql -l app=mysql | jq .
this.
i can't repeat your results,what is your version of karmor?
root@yyj-test-master1:/home/ubuntu# karmor logs --json -n wordpress-mysql -l app=mysql | jq .
local port to be used for port forwarding kubearmor-relay-64c6fff875-q67l9: 32863
Created a gRPC client (localhost:32863)
Checked the liveness of the gRPC server
Started to watch alerts
https://github.com/kubearmor/kubearmor-client/blob/main/log/logClient.go#L304
may be the result of the res["Labels"]
is nil?
func WatchTelemetryHelper(arr []byte, t string, o Options) {
var res map[string]interface{}
err := json.Unmarshal(arr, &res)
if err != nil {
return
}
// Filter Telemetry based on provided options
if len(o.Selector) != 0 {
304 val := selectLabels(o, res["Labels"].(string))
if val != nil {
return
}
}
if o.Namespace != "" {
ns, ok := res["NamespaceName"].(string)
if !ok {
return
}
match := regexMatcher(CNamespace, ns)
if !match {
return
}
}
@xiao-jay Thank you for looking into this issue. I was using 11.4 version. But now I updated to the latest version.
@yasin-cs-ko-ak Oh i find the reason why will lead to panic.
file path:log/logClient_test.go,i change test file some place,i found when have no label but have Selector: []string{"foo"}
,must have panic.Selector []string{"foo"}
is a example.
func TestLogClient(t *testing.T) {
var res = &pb.Alert{
ClusterName: "breaking-bad",
HostName: "saymyname",
NamespaceName: "heisenberg",
PodName: "new-mexico",
ContainerID: "12345678901234567890",
ContainerName: "los-polos",
ContainerImage: "evergreen",
Type: "MatchedPolicy",
}
eventChan = make(chan EventInfo, maxEvents)
var o = Options{
EventChan: eventChan,
Selector: []string{"foo"},
}
/assign
@xiao-jay That's a great finding. Thank you. If you can raise a PR for that issue. That would be better. Thanks