Skip to content

Commit 6df7cde

Browse files
committed
feat(tracing): add agent.impvm.rootfs_build and firecracker_launch spans
1 parent 83ca31d commit 6df7cde

1 file changed

Lines changed: 34 additions & 7 deletions

File tree

internal/agent/firecracker_driver.go

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ import (
1919
firecracker "github.com/firecracker-microvm/firecracker-go-sdk"
2020
"github.com/firecracker-microvm/firecracker-go-sdk/client/models"
2121
fcclientops "github.com/firecracker-microvm/firecracker-go-sdk/client/operations"
22+
"go.opentelemetry.io/otel"
23+
"go.opentelemetry.io/otel/attribute"
24+
"go.opentelemetry.io/otel/trace"
2225
apimeta "k8s.io/apimachinery/pkg/api/meta"
2326
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2427
"k8s.io/apimachinery/pkg/types"
@@ -31,6 +34,7 @@ import (
3134
"github.com/syscode-labs/imp/internal/agent/rootfs"
3235
agentvsock "github.com/syscode-labs/imp/internal/agent/vsock"
3336
pb "github.com/syscode-labs/imp/internal/proto/guest"
37+
"github.com/syscode-labs/imp/internal/tracing"
3438
)
3539

3640
// shuttingDownTimeout is how long Stop waits for a graceful ACPI shutdown
@@ -161,9 +165,21 @@ func (d *FirecrackerDriver) Start(ctx context.Context, vm *impdevv1alpha1.ImpVM)
161165
if gaEnabled {
162166
buildOpts = append(buildOpts, rootfs.WithGuestAgent(d.guestAgentPath()))
163167
}
164-
rootfsPath, err := d.buildRootfs(ctx, vm, buildOpts...)
165-
if err != nil {
166-
return 0, fmt.Errorf("build rootfs for %s: %w", vm.Spec.Image, err)
168+
var rootfsPath string
169+
{
170+
rCtx, rSpan := otel.Tracer("imp.agent").Start(ctx, "agent.impvm.rootfs_build",
171+
trace.WithAttributes(
172+
attribute.String("vm.name", vm.Name),
173+
attribute.String("vm.image", vm.Spec.Image),
174+
),
175+
)
176+
var buildErr error
177+
rootfsPath, buildErr = d.buildRootfs(rCtx, vm, buildOpts...)
178+
tracing.RecordError(rSpan, buildErr)
179+
rSpan.End()
180+
if buildErr != nil {
181+
return 0, fmt.Errorf("build rootfs for %s: %w", vm.Spec.Image, buildErr)
182+
}
167183
}
168184

169185
// 3. Set up networking if a NetworkRef is specified.
@@ -200,10 +216,21 @@ func (d *FirecrackerDriver) Start(ctx context.Context, vm *impdevv1alpha1.ImpVM)
200216
if err != nil {
201217
return 0, fmt.Errorf("create machine: %w", err)
202218
}
203-
if err := m.Start(ctx); err != nil {
204-
_ = m.StopVMM() //nolint:errcheck
205-
_ = os.Remove(sockPath) //nolint:errcheck // best-effort cleanup
206-
return 0, fmt.Errorf("start machine: %w", err)
219+
{
220+
lCtx, lSpan := otel.Tracer("imp.agent").Start(ctx, "agent.impvm.firecracker_launch",
221+
trace.WithAttributes(
222+
attribute.String("vm.name", vm.Name),
223+
attribute.String("vm.namespace", vm.Namespace),
224+
),
225+
)
226+
startErr := m.Start(lCtx)
227+
tracing.RecordError(lSpan, startErr)
228+
lSpan.End()
229+
if startErr != nil {
230+
_ = m.StopVMM() //nolint:errcheck
231+
_ = os.Remove(sockPath) //nolint:errcheck // best-effort cleanup
232+
return 0, fmt.Errorf("start machine: %w", startErr)
233+
}
207234
}
208235

209236
pid, err := m.PID()

0 commit comments

Comments
 (0)