From 8ca0207281db9b2ef7a588db7c44678354325831 Mon Sep 17 00:00:00 2001 From: Chelsea Mafrica Date: Tue, 1 Jun 2021 13:42:00 -0700 Subject: [PATCH] tracing: Add sandbox and container ID to trace spans Add sandbox, container, and hypervisor IDs to trace spans. Note that some spans in sandbox.go are created with a trace() call from api.go. These spans have additional attributes set after span creation to overwrite the api attributes. Fixes #1878 Signed-off-by: Chelsea Mafrica --- src/runtime/pkg/katautils/create.go | 4 ++-- src/runtime/virtcontainers/acrn.go | 2 +- src/runtime/virtcontainers/clh.go | 2 +- src/runtime/virtcontainers/container.go | 2 +- src/runtime/virtcontainers/fc.go | 2 +- src/runtime/virtcontainers/qemu.go | 2 +- src/runtime/virtcontainers/sandbox.go | 5 ++++- 7 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/runtime/pkg/katautils/create.go b/src/runtime/pkg/katautils/create.go index ce9401084d..01b59a8ecb 100644 --- a/src/runtime/pkg/katautils/create.go +++ b/src/runtime/pkg/katautils/create.go @@ -104,7 +104,7 @@ func SetEphemeralStorageType(ociSpec specs.Spec) specs.Spec { // CreateSandbox create a sandbox container func CreateSandbox(ctx context.Context, vci vc.VC, ociSpec specs.Spec, runtimeConfig oci.RuntimeConfig, rootFs vc.RootFs, containerID, bundlePath, console string, disableOutput, systemdCgroup bool) (_ vc.VCSandbox, _ vc.Process, err error) { - span, ctx := Trace(ctx, "CreateSandbox", []label.KeyValue{label.Key("source").String("runtime"), label.Key("package").String("katautils"), label.Key("subsystem").String("sandbox")}...) + span, ctx := Trace(ctx, "CreateSandbox", []label.KeyValue{label.Key("source").String("runtime"), label.Key("package").String("katautils"), label.Key("subsystem").String("sandbox"), label.Key("container_id").String(containerID)}...) defer span.End() sandboxConfig, err := oci.SandboxConfig(ociSpec, runtimeConfig, bundlePath, containerID, console, disableOutput, systemdCgroup) @@ -202,7 +202,7 @@ func checkForFIPS(sandboxConfig *vc.SandboxConfig) error { func CreateContainer(ctx context.Context, sandbox vc.VCSandbox, ociSpec specs.Spec, rootFs vc.RootFs, containerID, bundlePath, console string, disableOutput bool) (vc.Process, error) { var c vc.VCContainer - span, ctx := Trace(ctx, "CreateContainer", []label.KeyValue{label.Key("source").String("runtime"), label.Key("package").String("katautils"), label.Key("subsystem").String("sandbox")}...) + span, ctx := Trace(ctx, "CreateContainer", []label.KeyValue{label.Key("source").String("runtime"), label.Key("package").String("katautils"), label.Key("subsystem").String("sandbox"), label.Key("container_id").String(containerID)}...) defer span.End() ociSpec = SetEphemeralStorageType(ociSpec) diff --git a/src/runtime/virtcontainers/acrn.go b/src/runtime/virtcontainers/acrn.go index bb5441a777..3c1ab8fcde 100644 --- a/src/runtime/virtcontainers/acrn.go +++ b/src/runtime/virtcontainers/acrn.go @@ -214,7 +214,7 @@ func (a *Acrn) trace(parent context.Context, name string) (otelTrace.Span, conte } tracer := otel.Tracer("kata") - ctx, span := tracer.Start(parent, name, otelTrace.WithAttributes(label.String("source", "runtime"), label.String("package", "virtcontainers"), label.String("subsystem", "hypervisor"), label.String("type", "acrn"))) + ctx, span := tracer.Start(parent, name, otelTrace.WithAttributes(label.String("source", "runtime"), label.String("package", "virtcontainers"), label.String("subsystem", "hypervisor"), label.String("type", "acrn"), label.String("sandbox_id", a.id))) return span, ctx } diff --git a/src/runtime/virtcontainers/clh.go b/src/runtime/virtcontainers/clh.go index e771405e7d..9088f05283 100644 --- a/src/runtime/virtcontainers/clh.go +++ b/src/runtime/virtcontainers/clh.go @@ -770,7 +770,7 @@ func (clh *cloudHypervisor) trace(parent context.Context, name string) (otelTrac } tracer := otel.Tracer("kata") - ctx, span := tracer.Start(parent, name, otelTrace.WithAttributes(otelLabel.String("source", "runtime"), otelLabel.String("package", "virtcontainers"), otelLabel.String("subsystem", "hypervisor"), otelLabel.String("type", "clh"))) + ctx, span := tracer.Start(parent, name, otelTrace.WithAttributes(otelLabel.String("source", "runtime"), otelLabel.String("package", "virtcontainers"), otelLabel.String("subsystem", "hypervisor"), otelLabel.String("type", "clh"), otelLabel.String("sandbox_id", clh.id))) return span, ctx } diff --git a/src/runtime/virtcontainers/container.go b/src/runtime/virtcontainers/container.go index 93a68c9913..d2ce6021cc 100644 --- a/src/runtime/virtcontainers/container.go +++ b/src/runtime/virtcontainers/container.go @@ -360,7 +360,7 @@ func (c *Container) trace(parent context.Context, name string) (otelTrace.Span, } tracer := otel.Tracer("kata") - ctx, span := tracer.Start(parent, name, otelTrace.WithAttributes(otelLabel.String("source", "runtime"), otelLabel.String("package", "virtcontainers"), otelLabel.String("subsystem", "container"))) + ctx, span := tracer.Start(parent, name, otelTrace.WithAttributes(otelLabel.String("source", "runtime"), otelLabel.String("package", "virtcontainers"), otelLabel.String("subsystem", "container"), otelLabel.String("container_id", c.id))) return span, ctx } diff --git a/src/runtime/virtcontainers/fc.go b/src/runtime/virtcontainers/fc.go index eda5360ca7..368c5ad1c1 100644 --- a/src/runtime/virtcontainers/fc.go +++ b/src/runtime/virtcontainers/fc.go @@ -175,7 +175,7 @@ func (fc *firecracker) trace(parent context.Context, name string) (otelTrace.Spa } tracer := otel.Tracer("kata") - ctx, span := tracer.Start(parent, name, otelTrace.WithAttributes(otelLabel.String("source", "runtime"), otelLabel.String("package", "virtcontainers"), otelLabel.String("subsystem", "hypervisor"), otelLabel.String("type", "firecracker"))) + ctx, span := tracer.Start(parent, name, otelTrace.WithAttributes(otelLabel.String("source", "runtime"), otelLabel.String("package", "virtcontainers"), otelLabel.String("subsystem", "hypervisor"), otelLabel.String("type", "firecracker"), otelLabel.String("sandbox_id", fc.id))) return span, ctx } diff --git a/src/runtime/virtcontainers/qemu.go b/src/runtime/virtcontainers/qemu.go index 347fa19d7b..953b611242 100644 --- a/src/runtime/virtcontainers/qemu.go +++ b/src/runtime/virtcontainers/qemu.go @@ -219,7 +219,7 @@ func (q *qemu) trace(parent context.Context, name string) (otelTrace.Span, conte } tracer := otel.Tracer("kata") - ctx, span := tracer.Start(parent, name, otelTrace.WithAttributes(otelLabel.String("source", "runtime"), otelLabel.String("package", "virtcontainers"), otelLabel.String("subsystem", "hypervisor"), otelLabel.String("type", "qemu"))) + ctx, span := tracer.Start(parent, name, otelTrace.WithAttributes(otelLabel.String("source", "runtime"), otelLabel.String("package", "virtcontainers"), otelLabel.String("subsystem", "hypervisor"), otelLabel.String("type", "qemu"), otelLabel.String("sandbox_id", q.id))) return span, ctx } diff --git a/src/runtime/virtcontainers/sandbox.go b/src/runtime/virtcontainers/sandbox.go index ee37f31fdf..33a90cf992 100644 --- a/src/runtime/virtcontainers/sandbox.go +++ b/src/runtime/virtcontainers/sandbox.go @@ -134,7 +134,7 @@ func (s *Sandbox) trace(parent context.Context, name string) (otelTrace.Span, co } tracer := otel.Tracer("kata") - ctx, span := tracer.Start(parent, name, otelTrace.WithAttributes(otelLabel.String("source", "runtime"), otelLabel.String("package", "virtcontainers"), otelLabel.String("subsystem", "sandbox"))) + ctx, span := tracer.Start(parent, name, otelTrace.WithAttributes(otelLabel.String("source", "runtime"), otelLabel.String("package", "virtcontainers"), otelLabel.String("subsystem", "sandbox"), otelLabel.String("sandbox_id", s.id))) return span, ctx } @@ -394,6 +394,7 @@ func (s *Sandbox) IOStream(containerID, processID string) (io.WriteCloser, io.Re func createAssets(ctx context.Context, sandboxConfig *SandboxConfig) error { span, _ := trace(ctx, "createAssets") + span.SetAttributes(otelLabel.String("sandbox_id", sandboxConfig.ID), otelLabel.String("subsystem", "sandbox")) defer span.End() for _, name := range types.AssetTypes() { @@ -444,6 +445,7 @@ func (s *Sandbox) getAndStoreGuestDetails(ctx context.Context) error { // be started. func createSandbox(ctx context.Context, sandboxConfig SandboxConfig, factory Factory) (*Sandbox, error) { span, ctx := trace(ctx, "createSandbox") + span.SetAttributes(otelLabel.String("sandbox_id", sandboxConfig.ID), otelLabel.String("subsystem", "sandbox")) defer span.End() if err := createAssets(ctx, &sandboxConfig); err != nil { @@ -482,6 +484,7 @@ func createSandbox(ctx context.Context, sandboxConfig SandboxConfig, factory Fac func newSandbox(ctx context.Context, sandboxConfig SandboxConfig, factory Factory) (sb *Sandbox, retErr error) { span, ctx := trace(ctx, "newSandbox") + span.SetAttributes(otelLabel.String("sandbox_id", sandboxConfig.ID), otelLabel.String("subsystem", "sandbox")) defer span.End() if !sandboxConfig.valid() {