github DataDog/dd-trace-go v2.8.0

5 hours ago

Summary

New integrations. Two new integrations land in this release: Azure API Management (APIM) callout processor for security (#4620), and twmb/franz-go for Kafka (#4250).

Data Streams Monitoring. All three major Kafka integrations — confluent-kafka-go (#4470), segmentio/kafka-go (#4477), and Sarama (#4560) — now attach kafka_cluster_id for cluster-level visibility. TrackDataStreamsTransaction also gains span tagging and custom timestamp support (#4499).

OpenTelemetry (OTel) and OTLP. The tracer can now export traces directly via the OpenTelemetry Protocol (OTLP), bypassing the Datadog Agent entirely (#4600, #4583). OTel process context v2 (OTLP proto format) is supported (#4478), and the parentbased_always_on sampler works in OTLP mode (#4567).

Large Language Model (LLM) Observability. Prompt tracking is now available for LLMObs spans (#4608). Experiment scope propagates from APM baggage into spans automatically (#4651).

Profiler. An experimental goroutine leak profile is available as opt-in (#4420). The goroutine wait profile type has been removed — this is a breaking change for anyone using it explicitly (#4589).

HTTP and tracing. A new environment variable DD_TRACE_HTTP_URL_QUERY_STRING_ALLOWLIST lets you whitelist query string parameters to keep unredacted (#4562). A new tracer.StartSpanFromPropagatedContext API simplifies span creation from propagated contexts (#4492). AWS EventBridge max payload size is bumped to 1 MB (#4458). Envoy Service Extensions integration gains Unix Domain Socket (UDS) support (#4463).

OpenFeature. Flag evaluation metrics now emit via OTel Metrics (#4489), with allocation key tagging (#4515) and Remote Configuration (RC) integration via FFE_FLAGS subscription at tracer startup (#4495).

Bug fixes. gorm now respects DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED (#4618). Redis and Valkey pipeline commands are joined with newlines, fixing agent obfuscation (#4593). A race condition in HTTP client trace timings is resolved (#4591). AppSec block responses now include a correct Content-Length header (#4496), and spurious Remote Configuration errors are silenced when RC is disabled (#4612). ContextWithSpan no longer panics on nil context (#4313). The OTel bridge preserves keep/drop sampling decisions for unsampled spans (#4631). User-provided DogStatsD addresses now correctly take priority over defaults (#4575).

Performance. Trace ID hex encoding is cached (#4481), the span metadata map is preallocated (#4541), and locking is removed from both sampling priority access (#4546) and the internal logger (#4547) — reducing allocations and contention on hot paths.

CI Visibility. Bazel offline cache and payload-file modes are supported (#4503). Known test pagination is implemented for large test suites (#4509).

What's Changed

Application Performance Monitoring (APM)

  • feat: collect service override source by @raphaelgavache in #4500
  • feat: support service source for 19 integrations by @raphaelgavache in #4526
  • feat: support service source for 13integrations by @raphaelgavache in #4534
  • feat: add service source on 10 integrations by @raphaelgavache in #4540
  • feat: force usage of ServiceWithSource in contrib by @raphaelgavache in #4549
  • fix(eventbridge): update max payload size to 1m by @Dogbu-cyber in #4458
  • feat(telemetry): add stable session identifier headers by @khanayan123 in #4574
  • feat: collect service source in client stats by @raphaelgavache in #4519
  • feat: OTel process context v2 (otlp proto) by @nsavoire in #4478
  • fix: join redis and valkey pipeline commands with newlines for correct agent obfuscation by @rarguelloF in #4593
  • fix(http): Prevent concurrent read/writes on http client trace timings by @mtoffl01 in #4591
  • feat(contrib): add Azure APIM callout security processor by @eliottness in #4620
  • feat(envoyproxy/serviceextensions): add Unix domain socket support by @eliottness in #4463
  • feat(httptrace): add query string parameter allowlist via DD_TRACE_HTTP_URL_QUERY_STRING_ALLOWLIST by @genesor in #4562
  • fix(gorm): respect DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED by @rarguelloF in #4618
  • feat(contrib/apim-callout): Deploy to Azure button + production hardening by @eliottness in #4641
  • feat(contrib/valkey-io): bump valkey-go and add SetOnInvalidations wrapper by @Scorfly in #4657
  • feat(contrib/redis/rueidis): add SetOnInvalidations to dedicatedClient by @darccio in #4659
  • fix(ddtrace/tracer): reduce UDS connection resets under agent backpressure by @kakkoyun in #4484
  • fix(ddtrace/tracer): cache trace ID hex encoding by @darccio in #4481
  • fix: remove duplicate span tags and test cases in rueidis and valkey-go by @snutiise in #4510
  • fix: stack and handling_stack were not aligned with ET by @hannahkm in #4529
  • fix(ddtrace/tracer): avoid race on TestTracerPrioritySampler by @darccio in #4490
  • fix(tracer): eliminate IEEE 754 flakes in TestSamplingDecision by @darccio in #4530
  • feat(ddtrace/tracer): preallocate span meta map to reduce growth cycles by @darccio in #4541
  • fix(ddtrace/tracer): fix BenchmarkSpanStartConcurrent by @nsrip-dd in #4539
  • chore(profiler): remove testHooks and runProfile from tests by @nsrip-dd in #4533
  • fix(ddtracer/tracer): reuse scratch buffer on ETP's encoding for metastruct by @darccio in #4544
  • feat(tracer): periodically poll agent /info endpoint for dynamic capability updates by @kakkoyun in #4451
  • feat(ddtrace/tracer): reduce allocations on ETP/v1 trace protocol by @darccio in #4497
  • fix(tracer): Fix outdated references to tracer.config agentURL and traceProtocol fields by @mtoffl01 in #4565
  • fix(tracer): only set _dd.p.ksr after agent rates are received by @bm1549 in #4523
  • fix(internal/orchestrion): fix span parenting with GSL by @darccio in #4528
  • feat(otel): Implement parentbased_always_on in otlp mode by @mtoffl01 in #4567
  • fix(tracer): skip JSON span-links serialization when using v1 protocol by @darccio in #4573
  • feat(ddtrace/tracer): remove locking on sampling priority access by @darccio in #4546
  • fix(ddtrace/tracer): pre-compute _dd.p.dm numeric value at write-time by @darccio in #4576
  • fix(ddtrace/tracer): check DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED once, use a global bool by @darccio in #4548
  • fix(tracer): pass prioritySampler in agentTraceWriter benchmarks to prevent nil panic by @mtoffl01 in #4601
  • fix(tracer): use fixed-point format for _dd.p.ksr tag by @bm1549 in #4603
  • feat: track service source for manually assigned spans by @raphaelgavache in #4551
  • fix(tracer): use background context instead of panicking on nil ctx in ContextWithSpan by @genesor in #4313
  • fix(ddtrace/tracer): prioritize user-provided settings for dogstatsd addr by @rarguelloF in #4575
  • feat(telemetry): add DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL env var support by @khanayan123 in #4621
  • fix(tracer): correct WithStatsComputation godoc default value by @genesor in #4630
  • fix(tracer): preserve keep/drop possibility for OTel bridge on unsampled spans by @genesor in #4631
  • fix(telemetry): app-extended-heartbeat event not correctly reporting entire config state by @khanayan123 in #4633
  • chore: improvements to ETP by @hannahkm in #4586
  • feat(ddtrace/tracer): add tracer.StartSpanFromPropagatedContext to start a span from a propagated context by @darccio in #4492
  • feat(contrib/valkey-io/valkey-go): support WithCreateClientFunc option by @naoto0822 in #4636
  • feat(tracer): Implement OTLP Traces Export by @mtoffl01 in #4600
  • feat: cap default sampling rate increases by @raphaelgavache in #4488

Application Security Management (ASM)

  • fix(appsec): explicitly set Content-Length header in block request handler by @RomainMuller in #4496
  • fix(appsec): silence spurious errors when DD_REMOTE_CONFIGURATION_ENABLED=false by @darccio in #4612

CI Visibility

  • feat(internal/civisibility): implement pagination for known tests by @daniel-mohedano in #4509
  • fix(internal/civisibility): fix orchestrion deadlock with parallel subtests by @tonyredondo in #4554
  • feat(civisibility): Bazel offline cache and payload-file modes by @tonyredondo in #4503
  • ci: reactivate tracer-release with dd-sts for test optimization by @nccatoni in #4647

Data Streams Monitoring

  • feat(dsm): add kafka_cluster_id to confluent-kafka-go by @robcarlan-datadog in #4470
  • feat(dsm): add kafka_cluster_id to segmentio/kafka-go integration by @robcarlan-datadog in #4477
  • fix(datastreams): early flush + throughput limit for transaction buffer by @ericfirth in #4558
  • fix(datastreams): make TestProcessor/test_service_name_override deterministic by @bm1549 in #4517
  • feat(dsm): add kafka_cluster_id to Sarama integrations by @robcarlan-datadog in #4560
  • feat(datastreams): add span tagging and custom timestamp to TrackDataStreamsTransaction by @ericfirth in #4499

Feature flags

  • chore(openfeature): assign CODEOWNERS solely to FFE SDK team by @leoromanovsky in #4646
  • fix(openfeature): return TARGETING_KEY_MISSING for null targeting key by @leoromanovsky in #4614
  • feat(openfeature): add flag evaluation tracking via OTel Metrics by @leoromanovsky in #4489
  • fix(openfeature): improve FFE eval metrics cross-tracer consistency by @sameerank in #4590
  • docs(openfeature): fix compilability issues and improve accuracy in d… by @leoromanovsky in #4282
  • feat(openfeature): subscribe to FFE_FLAGS during tracer RC setup by @leoromanovsky in #4495
  • feat: Add allocation key tag to flag evaluation metrics by @leoromanovsky in #4515
  • fix(openfeature): correct AssignmentReason for catch-all allocations by @leoromanovsky in #4527

LLM Observability

Profiling

  • feat(profiler): remove the goroutine wait profile type by @nsrip-dd in #4589
  • feat(profiler): support the experimental goroutine leak profile by @nsrip-dd in #4420
  • fix(profiler): support gzip compression mode by @felixge in #4696

General

  • fix: modernize to b.Loop by @darccio in #4480

  • chore: fix all vulnerabilities by @hannahkm in #4532

  • ci: harden GitHub Actions against supply chain attacks by @kakkoyun in #4607

  • feat(ci): add semantic API diff via golang.org/x/exp/apidiff by @kakkoyun in #4596

  • feat(ci): govulncheck - add PR checks, SARIF Code Scanning, and automated remediation by @kakkoyun in #4595

  • chore(ci): Update optimizable slos by @faydef in #4616

  • chore(ci): revert add final_status property on junit XML [APMSP-2610] by @cbeauchesne in #4628

  • chore(go1.25): remove internal/synctest shim, use modernize by @eliottness in #4643

  • refactor(config): POC remote config migration by @mtoffl01 in #4645

  • fix: test app fails on schedule by @hannahkm in #4661

  • chore(ci): add contents: read permission to test-apps-schedule by @darccio in #4658

  • fix: bump testcontainers to v0.42.0 by @rarguelloF in #4656

  • fix: last missing perm for scheduled runs by @hannahkm in #4655

  • fix: upgrade nats, grpc, and mcp by @hannahkm in #4619

  • fix(.github/actions): use Codecov CLI instead of codecov.io/bash script by @darccio in #4491

  • chore(config): create README by @mtoffl01 in #4487

  • fix(.github/workflows): aggregate and print APM test agent checks by @darccio in #4493

  • ci: add Datadog Code Coverage reporting alongside Codecov by @ManuelPalenzuelaDD in #4498

  • test: migrate timer-based tests to testing/synctest by @kakkoyun in #4453

  • ci: use coverage-upload-github-action for Datadog coverage uploads by @ManuelPalenzuelaDD in #4501

  • chore(ci): add final_status property on junit XML [APMSP-2610] by @cbeauchesne in #4505

  • refactor(internal/config): put configprovider and telemetry into their own packages by @mtoffl01 in #4494

  • ci: revert use coverage-upload-github-action for Datadog coverage uploads by @ManuelPalenzuelaDD in #4536

  • ci: use coverage-upload-github-action for Datadog coverage uploads by @ManuelPalenzuelaDD in #4537

  • ci: upload system-tests results to Test Optimization and add tracer-release nightly by @nccatoni in #4439

  • chore(deps): bump the gh-actions-packages group across 2 directories with 6 updates by @dependabot[bot] in #4482

  • fix: [Security] Pin GitHub Actions to a full-length commit SHA by @juliendoutre in #4542

  • chore: disable ETP by default by @hannahkm in #4545

  • feat(internal/log): remove locking by @darccio in #4547

  • ci: automate SHA-pinned GitHub Actions updates via Dependabot by @kakkoyun in #4552

  • chore(deps): bump github.com/nats-io/nats-server/v2 from 2.12.1 to 2.12.3 in /orchestrion/all by @dependabot[bot] in #4553

  • fix: update libdatadog-build image tags to 100425777 by @harmonherring-pro in #4557

  • fix: v1 payload tests fail after 7.77 agent upgrade by @hannahkm in #4561

  • fix(internal/remoteconfig): disable RC if disabled on the agent by @darccio in #4475

  • refactor(config): Migrate agentURL and traceProtocol by @mtoffl01 in #4550

  • fix(internal/telemetry): avoid flakiness on telemetry tests; pin localstack/localstack by @darccio in #4581

  • chore(ci): Migrate deprecated GitLab runner tags by @gh-worker-engraver-d31c25[bot] in #4571

  • fix(.github/workflows): pin push_to_test_optim by @darccio in #4584

  • chore(deps): bump the github-actions group across 3 directories with 11 updates by @dependabot[bot] in #4569

  • refactor(config): Migrate serviceName by @mtoffl01 in #4559

  • chore(ci): Update optimizable slos follow up by @faydef in #4625

  • chore: reenable tracer release step by @hannahkm in #4652

  • refactor(config): peer service revamp by @funyjane in #4653

  • refactor(config): add cross-product gate to prevent conflicting programmatic overrides by @mtoffl01 in #4640

  • fix: use correct policy for accessing app key by @hannahkm in #4644

  • fix: system test fails on old runs by @hannahkm in #4626

  • chore: migrate keys to dd-sts by @hannahkm in #4627

  • fix(ci): make dd-sts credential fetch best-effort where consumers are best-effort by @RamyElkest in #4634

  • chore: migrate needs-triage workflow to dd-octo-sts by @RamyElkest in #4632

  • fix: changes post-ddsts migration caused failures by @hannahkm in #4637

  • chore: update cron schedule to run daily by @cbeauchesne in #4615

  • feat(config): add OTLP trace export configuration support by @mtoffl01 in #4583

  • chore: disable automated dependency updater config [incident-51602] by @moezein0 in #4594

New Contributors

Full Changelog: v2.7.0...v2.8.0

Don't miss a new dd-trace-go release

NewReleases is sending notifications on new releases.