@@ -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