fork of https://github.com/sourcegraph/zoekt
0

Configure Feed

Select the types of activity you want to include in your feed.

trace: add service.instance.id (#629)

logs hostname to traces

+39 -28
+2 -13
cmd/zoekt-sourcegraph-indexserver/main.go
··· 970 970 return repoIDs 971 971 } 972 972 973 - func hostnameBestEffort() string { 974 - if h := os.Getenv("NODE_NAME"); h != "" { 975 - return h 976 - } 977 - if h := os.Getenv("HOSTNAME"); h != "" { 978 - return h 979 - } 980 - hostname, _ := os.Hostname() 981 - return hostname 982 - } 983 - 984 973 // setupTmpDir sets up a temporary directory on the same volume as the 985 974 // indexes. 986 975 // ··· 1207 1196 fs.Int64Var(&rc.indexConcurrency, "index_concurrency", getEnvWithDefaultInt64("SRC_INDEX_CONCURRENCY", 1), "the number of concurrent index jobs to run.") 1208 1197 fs.StringVar(&rc.index, "index", getEnvWithDefaultString("DATA_DIR", build.DefaultDir), "set index directory to use") 1209 1198 fs.StringVar(&rc.listen, "listen", ":6072", "listen on this address.") 1210 - fs.StringVar(&rc.hostname, "hostname", hostnameBestEffort(), "the name we advertise to Sourcegraph when asking for the list of repositories to index. Can also be set via the NODE_NAME environment variable.") 1199 + fs.StringVar(&rc.hostname, "hostname", zoekt.HostnameBestEffort(), "the name we advertise to Sourcegraph when asking for the list of repositories to index. Can also be set via the NODE_NAME environment variable.") 1211 1200 fs.Float64Var(&rc.cpuFraction, "cpu_fraction", 1.0, "use this fraction of the cores for indexing.") 1212 1201 fs.IntVar(&rc.blockProfileRate, "block_profile_rate", getEnvWithDefaultInt("BLOCK_PROFILE_RATE", -1), "Sampling rate of Go's block profiler in nanoseconds. Values <=0 disable the blocking profiler Var(default). A value of 1 includes every blocking event. See https://pkg.go.dev/runtime#SetBlockProfileRate") 1213 1202 fs.DurationVar(&rc.backoffDuration, "backoff_duration", getEnvWithDefaultDuration("BACKOFF_DURATION", 10*time.Minute), "for the given duration we backoff from enqueue operations for a repository that's failed its previous indexing attempt. Consecutive failures increase the duration of the delay linearly up to the maxBackoffDuration. A negative value disables indexing backoff.") ··· 1521 1510 liblog := sglog.Init(sglog.Resource{ 1522 1511 Name: "zoekt-indexserver", 1523 1512 Version: zoekt.Version, 1524 - InstanceID: hostnameBestEffort(), 1513 + InstanceID: zoekt.HostnameBestEffort(), 1525 1514 }) 1526 1515 defer liblog.Sync() 1527 1516
+6 -4
cmd/zoekt-webserver/main.go
··· 164 164 os.Exit(0) 165 165 } 166 166 167 - liblog := sglog.Init(sglog.Resource{ 167 + resource := sglog.Resource{ 168 168 Name: "zoekt-webserver", 169 169 Version: zoekt.Version, 170 - InstanceID: os.Getenv("HOSTNAME"), 171 - }) 170 + InstanceID: zoekt.HostnameBestEffort(), 171 + } 172 + 173 + liblog := sglog.Init(resource) 172 174 defer liblog.Sync() 173 - tracer.Init("zoekt-webserver", zoekt.Version) 175 + tracer.Init(resource) 174 176 profiler.Init("zoekt-webserver", zoekt.Version, -1) 175 177 176 178 if *logDir != "" {
+12
indexbuilder.go
··· 21 21 "hash/crc64" 22 22 "html/template" 23 23 "log" 24 + "os" 24 25 "path/filepath" 25 26 "sort" 26 27 "time" ··· 39 40 40 41 // Filled by the linker 41 42 var Version string 43 + 44 + func HostnameBestEffort() string { 45 + if h := os.Getenv("NODE_NAME"); h != "" { 46 + return h 47 + } 48 + if h := os.Getenv("HOSTNAME"); h != "" { 49 + return h 50 + } 51 + hostname, _ := os.Hostname() 52 + return hostname 53 + } 42 54 43 55 // Store character (unicode codepoint) offset (in bytes) this often. 44 56 const runeOffsetFrequency = 100
+8 -3
internal/tracer/jaeger.go
··· 5 5 "reflect" 6 6 7 7 "github.com/opentracing/opentracing-go" 8 + sglog "github.com/sourcegraph/log" 8 9 "github.com/uber/jaeger-client-go" 9 10 jaegercfg "github.com/uber/jaeger-client-go/config" 10 11 jaegermetrics "github.com/uber/jaeger-lib/metrics" 11 12 ) 12 13 13 - func configureJaeger(svcName string, version string) (opentracing.Tracer, error) { 14 + func configureJaeger(resource sglog.Resource) (opentracing.Tracer, error) { 14 15 cfg, err := jaegercfg.FromEnv() 15 - cfg.ServiceName = svcName 16 + cfg.ServiceName = resource.Name 16 17 if err != nil { 17 18 return nil, err 18 19 } 19 - cfg.Tags = append(cfg.Tags, opentracing.Tag{Key: "service.version", Value: version}) 20 + cfg.Tags = append( 21 + cfg.Tags, 22 + opentracing.Tag{Key: "service.version", Value: resource.Version}, 23 + opentracing.Tag{Key: "service.instance.id", Value: resource.InstanceID}, 24 + ) 20 25 if reflect.DeepEqual(cfg.Sampler, &jaegercfg.SamplerConfig{}) { 21 26 // Default sampler configuration for when it is not specified via 22 27 // JAEGER_SAMPLER_* env vars. In most cases, this is sufficient
+7 -5
internal/tracer/opentelemetry.go
··· 8 8 9 9 "github.com/opentracing/opentracing-go" 10 10 "github.com/pkg/errors" 11 + sglog "github.com/sourcegraph/log" 11 12 jaegerpropagator "go.opentelemetry.io/contrib/propagators/jaeger" 12 13 otpropagator "go.opentelemetry.io/contrib/propagators/ot" 13 14 "go.opentelemetry.io/otel" ··· 16 17 "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" 17 18 "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp" 18 19 w3cpropagator "go.opentelemetry.io/otel/propagation" 19 - "go.opentelemetry.io/otel/sdk/resource" 20 + otelresource "go.opentelemetry.io/otel/sdk/resource" 20 21 oteltracesdk "go.opentelemetry.io/otel/sdk/trace" 21 22 semconv "go.opentelemetry.io/otel/semconv/v1.4.0" 22 23 ··· 33 34 // 34 35 // This setup is based on the one done in sourcegraph/sourcegraph - when making changes, 35 36 // be wary of divergences from the source: https://github.com/sourcegraph/sourcegraph/blob/main/internal/tracer/otel.go 36 - func configureOpenTelemetry(svcName string, version string) (opentracing.Tracer, error) { 37 + func configureOpenTelemetry(resource sglog.Resource) (opentracing.Tracer, error) { 37 38 // Ensure propagation between services continues to work. This is also done by another 38 39 // project that uses the OpenTracing bridge: 39 40 // https://sourcegraph.com/github.com/thanos-io/thanos/-/blob/pkg/tracing/migration/bridge.go?L62 ··· 51 52 return nil, fmt.Errorf("new exporter: %w", err) 52 53 } 53 54 provider := oteltracesdk.NewTracerProvider( 54 - oteltracesdk.WithResource(resource.NewWithAttributes( 55 + oteltracesdk.WithResource(otelresource.NewWithAttributes( 55 56 semconv.SchemaURL, 56 - semconv.ServiceNameKey.String(svcName), 57 - semconv.ServiceVersionKey.String(version))), 57 + semconv.ServiceNameKey.String(resource.Name), 58 + semconv.ServiceInstanceIDKey.String(resource.InstanceID), 59 + semconv.ServiceVersionKey.String(resource.Version))), 58 60 oteltracesdk.WithSampler(oteltracesdk.AlwaysSample()), 59 61 oteltracesdk.WithSpanProcessor(processor), 60 62 )
+4 -3
internal/tracer/tracer.go
··· 6 6 "strconv" 7 7 8 8 "github.com/opentracing/opentracing-go" 9 + sglog "github.com/sourcegraph/log" 9 10 ) 10 11 11 12 type tracerType string ··· 35 36 // Init should only be called from main and only once 36 37 // It will initialize the configured tracer, and register it as the global tracer 37 38 // This MUST be the same tracer as the one used by Sourcegraph 38 - func Init(svcName, version string) { 39 + func Init(resource sglog.Resource) { 39 40 var ( 40 41 tt = inferTracerType() 41 42 tracer opentracing.Tracer ··· 43 44 ) 44 45 switch tt { 45 46 case tracerTypeJaeger: 46 - tracer, err = configureJaeger(svcName, version) 47 + tracer, err = configureJaeger(resource) 47 48 if err != nil { 48 49 log.Printf("failed to configure Jaeger tracer: %v", err) 49 50 return ··· 51 52 log.Printf("INFO: using Jaeger tracer") 52 53 53 54 case tracerTypeOpenTelemetry: 54 - tracer, err = configureOpenTelemetry(svcName, version) 55 + tracer, err = configureOpenTelemetry(resource) 55 56 if err != nil { 56 57 log.Printf("failed to configure OpenTelemetry tracer: %v", err) 57 58 return