diff --git a/make/photon/prepare/templates/jobservice/env.jinja b/make/photon/prepare/templates/jobservice/env.jinja index b6d7f2d65..799616095 100644 --- a/make/photon/prepare/templates/jobservice/env.jinja +++ b/make/photon/prepare/templates/jobservice/env.jinja @@ -25,3 +25,23 @@ REGISTRY_CREDENTIAL_PASSWORD={{registry_password}} METRIC_NAMESPACE=harbor METRIC_SUBSYSTEM=jobservice {% endif %} + +{% if trace.enabled %} +TRACE_ENABLED=true +TRACE_SERVICE_NAME=harbor-jobservice +TRACE_SAMPLE_RATE={{ trace.sample_rate }} +{% if trace.jaeger is defined %} +TRACE_JAEGER_ENDPOINT={{ trace.jaeger.endpoint if trace.jaeger.endpoint else '' }} +TRACE_JAEGER_USERNAME={{ trace.jaeger.username if trace.jaeger.username else '' }} +TRACE_JAEGER_PASSWORD={{ trace.jaeger.password if trace.jaeger.password else '' }} +TRACE_JAEGER_AGENT_HOSTNAME={{ trace.jaeger.agent_host if trace.jaeger.agent_host else '' }} +TRACE_JAEGER_AGENT_PORT={{ trace.jaeger.agent_port if trace.jaeger.agent_port else '' }} +{% endif %} +{%if trace.otel is defined %} +TRACE_OTEL_ENDPOINT={{ trace.otel.endpoint if trace.otel.endpoint else '' }} +TRACE_OTEL_URL_PATH={{ trace.otel.url_path if trace.otel.url_path else '' }} +TRACE_OTEL_COMPRESSION={{ trace.otel.compression if trace.otel.compression else '' }} +TRACE_OTEL_TIMEOUT={{ trace.otel.timeout }} +TRACE_OTEL_INSECURE={{ trace.otel.insecure if trace.otel.insecure else '' }} +{% endif %} +{% endif %} diff --git a/src/jobservice/api/router.go b/src/jobservice/api/router.go index c2f2ba97d..d0557e944 100644 --- a/src/jobservice/api/router.go +++ b/src/jobservice/api/router.go @@ -16,12 +16,15 @@ package api import ( "fmt" - "github.com/goharbor/harbor/src/lib/errors" "net/http" + "github.com/gorilla/mux" + "go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux" + "github.com/goharbor/harbor/src/jobservice/errs" "github.com/goharbor/harbor/src/jobservice/logger" - "github.com/gorilla/mux" + "github.com/goharbor/harbor/src/lib/errors" + tracelib "github.com/goharbor/harbor/src/lib/trace" ) const ( @@ -59,6 +62,9 @@ func NewBaseRouter(handler Handler, authenticator Authenticator) Router { // Register routes here br.registerRoutes() + if tracelib.Enabled() { + br.router.Use(otelmux.Middleware("serve-http")) + } return br } diff --git a/src/jobservice/main.go b/src/jobservice/main.go index 4467c1ae4..9f5e93046 100644 --- a/src/jobservice/main.go +++ b/src/jobservice/main.go @@ -19,6 +19,7 @@ import ( "errors" "flag" "fmt" + "github.com/goharbor/harbor/src/common" "github.com/goharbor/harbor/src/jobservice/common/utils" "github.com/goharbor/harbor/src/jobservice/config" @@ -27,6 +28,8 @@ import ( "github.com/goharbor/harbor/src/jobservice/logger" "github.com/goharbor/harbor/src/jobservice/runtime" cfgLib "github.com/goharbor/harbor/src/lib/config" + "github.com/goharbor/harbor/src/lib/log" + tracelib "github.com/goharbor/harbor/src/lib/trace" _ "github.com/goharbor/harbor/src/pkg/config/rest" ) @@ -57,6 +60,15 @@ func main() { panic(err) } + if tracelib.Enabled() { + tp := tracelib.InitGlobalTracer(ctx) + defer func() { + if err := tp.Shutdown(context.Background()); err != nil { + log.Errorf("Error shutting down tracer provider: %v", err) + } + }() + } + // Set job context initializer runtime.JobService.SetJobContextInitializer(func(ctx context.Context) (job.Context, error) { secret := config.GetAuthSecret()