{"record":{"id":"e392b8ad94381c87","repo":"istio/istio","slug":"address-is-required","errorCode":null,"errorMessage":"address is required","messagePattern":"address is required","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/config/validation/agent/validation.go","lineNumber":259,"sourceCode":"\t\treturn fmt.Errorf(\"port (%s) is not a number: %v\", p, err)\n\t}\n\tif err = ValidatePort(port); err != nil {\n\t\treturn err\n\t}\n\tif err = ValidateFQDN(hostname); err != nil {\n\t\tif !netutil.IsValidIPAddress(hostname) {\n\t\t\treturn fmt.Errorf(\"%q is not a valid hostname or an IP address\", hostname)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// ValidateLightstepCollector validates the configuration for sending envoy spans to LightStep\nfunc ValidateLightstepCollector(ls *meshconfig.Tracing_Lightstep) error {\n\tvar errs error\n\tif ls.GetAddress() == \"\" {\n\t\terrs = multierror.Append(errs, errors.New(\"address is required\"))\n\t}\n\tif err := ValidateProxyAddress(ls.GetAddress()); err != nil {\n\t\terrs = multierror.Append(errs, multierror.Prefix(err, \"invalid lightstep address:\"))\n\t}\n\tif ls.GetAccessToken() == \"\" {\n\t\terrs = multierror.Append(errs, errors.New(\"access token is required\"))\n\t}\n\treturn errs\n}\n\n// ValidateZipkinCollector validates the configuration for sending envoy spans to Zipkin\nfunc ValidateZipkinCollector(z *meshconfig.Tracing_Zipkin) error {\n\treturn ValidateProxyAddress(strings.Replace(z.GetAddress(), \"$(HOST_IP)\", \"127.0.0.1\", 1))\n}\n\n// ValidateDatadogCollector validates the configuration for sending envoy spans to Datadog\nfunc ValidateDatadogCollector(d *meshconfig.Tracing_Datadog) error {\n\t// If the address contains $(HOST_IP), replace it with a valid IP before validation.","sourceCodeStart":241,"sourceCodeEnd":277,"githubUrl":"https://github.com/istio/istio/blob/8dc789c5cf17517c64e3c36cb3288230f149dfae/pkg/config/validation/agent/validation.go#L241-L277","documentation":"Lightstep tracer validation in agent config validation: `ValidateLightstepCollector` requires `meshConfig.defaultConfig.tracing.lightstep.address` to be non-empty before it even attempts `ValidateProxyAddress` on it. Lightstep is deprecated (the source marks it so upstream) but still validated; an absent address means the agent cannot ship spans. Note the companion check: an empty address also fails `ValidateProxyAddress` in the next line, so you can see both errors appended.","triggerScenarios":"Configuring `tracing.lightstep: {}` or `lightstep.accessToken: <token>` without `address` in ProxyConfig; templates that only set the token; YAML indentation putting address under the wrong key.","commonSituations":"Copy-pasted tracing blocks where the address line was dropped; migrating from zipkin to lightstep configs incompletely; legacy configs after Lightstep→ServiceNow migration changed collector hosts.","solutions":["Set a full host:port address, e.g. `lightstep.address: collector.lightstep.com:443` (or your ServiceNow/Lightstep collector).","Since Lightstep is deprecated, prefer zipkin/otel collector unless you must keep it.","Validate the whole meshConfig (`pilot` will re-validate on startup — check istiod logs for the aggregated multierror list)."],"exampleFix":"# before\ndefaultConfig:\n  tracing:\n    lightstep:\n      accessToken: <token>\n# address is required\n\n# after\ndefaultConfig:\n  tracing:\n    lightstep:\n      address: collector.lightstep.com:443\n      accessToken: <token>","handlingStrategy":"validation","validationCode":"// Go: check Lightstep config completeness before bootstrap\nfunc lightstepConfigured(ls *meshconfig.Tracing_Lightstep) error {\n\tif ls.GetAddress() == \"\" {\n\t\treturn errors.New(\"lightstep.address required (host:port)\")\n\t}\n\treturn nil\n}","typeGuard":"func hasLightstepAddress(ls *meshconfig.Tracing_Lightstep) bool {\n\treturn ls != nil && ls.GetAddress() != \"\"\n}","tryCatchPattern":"if err := agent.ValidateLightstepCollector(ls); err != nil {\n\tif strings.Contains(err.Error(), \"address is required\") {\n\t\treturn errors.New(\"lightstep tracer selected but address missing; set tracing.lightstep.address or switch provider\")\n\t}\n\treturn err\n}","preventionTips":["Prefer zipkin/otel over deprecated Lightstep in new configs.","Unit-test rendered meshConfig to assert tracing blocks are complete."],"tags":["validation","tracing","lightstep","mesh-config"],"backgroundTag":null,"analyzedSha":"8dc789c5cf17517c64e3c36cb3288230f149dfae","analyzedAt":"2026-08-15T15:16:55.434Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}