1.11.0
Highlights
Remote Configuration
The Remote Configuration feature is now in General Availability.
What to expect from Remote Configuration?
ASM can now receive live updates via Remote Configuration, such as:
- protection rules, including request blocking
- IP and path passlists
- IP and user denylists
Remote Configuration will be progressively expanded to support other Datadog products such as APM.
How to configure Remote Configuration?
- Make sure ASM is enabled (see our documentation)
- Upgrade the Datadog agent to 7.42.0 or above (7.43.0 or above recommended)
- Configure the agent to allow Remote Configuration via e.g the environment variable
DD_REMOTE_CONFIGURATION_ENABLED=true
To opt out of Remote Configuration, it can be done via either the environment variable DD_REMOTE_CONFIGURATION_ENABLED=false
or Datadog.configure { |c| c.remote.enabled = false }
.
Read more about Remote Configuration in our documentation
Ruby CPU Profiling 2.0
The new CPU Profiling 2.0 feature is now in General Availability.
What to expect from Ruby CPU Profiling 2.0?
- Finer-grained profiling data due to our sampling engine rewritten in C+Rust. The profiler will be able to run more often and get more information while keeping the same 2% overhead target you're used to, and with a lower impact on latency. Especially when looking at the "Code Hotspots" panel for a distributed trace, expect more and finer grained profiles.
- Thread id information now includes the operating system thread id for Ruby 3.1+, so you'll be able to correlate your thread information when looking at other system monitoring tools
- Thread names are now collected and you're able to filter your profiles by these names
- The profiler now exposes a
Datadog::Profiling.allocation_count
API that can be used to measure how many objects were allocated in parts of your application - Experimental support for capturing CPU and Wall-time spent doing Garbage Collection. This is disabled by default as we're still improving the performance of this feature and fixing a few incompatibilities with Ruby Ractors. You can enable it by adding
DD_PROFILING_FORCE_ENABLE_GC=true
orc.profiling.advanced.force_enable_gc_profiling = true
to the instructions seen above.
...with more and faster improvements to come soon!
If you're using the profiler, the new feature will be automatically enabled, except in the following cases:
- When running on Ruby 2.5 and below
- When the
mysql2
orrugged
gems are installed
Known issues:
-
Rare incompatibilities with native extensions/libraries.
Ruby CPU Profiling 2.0 gathers profiling data by sending SIGPROF unix signals to Ruby applications. This is a common approach used by many other profilers, and it may cause system calls performed by native extensions/libraries to be interrupted with an EINTR error code (reference).
Most native extensions/libraries are unaffected by this issue, but we know that the
mysql2
andrugged
gems can trigger these issues (details). When either of these gems is detected, the new feature is not enabled.We expect these occurrences to be rare, and will be working to both improve the ecosystem as well as to deploy countermeasures in the profiler itself to avoid triggering these issues.
-
Ruby 2.5 and below are missing an API that allows the profiler to detect the currently-active Ruby thread. We plan to ship a workaround for this issue soon.
-
The disabled-by-default experimental support for capturing CPU and Wall-time spent doing Garbage Collection is incompatible with Ractors due to Ruby upstream bugs (https://bugs.ruby-lang.org/issues/18464 and https://bugs.ruby-lang.org/issues/19112). We plan to work with the Ruby developers to incorporate fixes for these issues.
-
The disabled-by-default experimental support for capturing CPU and Wall-time spent doing Garbage Collection can cause a lot of overhead in Ruby applications with high object allocation rates.
Telemetry
The Telemetry feature is now in General Availability and enabled by default. It will allow Datadog to provide more efficient support.
Added
- Add remote configuration, enabled by default (#2674, #2678, #2686, #2687, #2688, #2689, #2696, #2705, #2731, #2732, #2733, #2739, #2756, #2769, #2771, #2773, #2789, #2805, #2794)
- AppSec: Add response headers passing to WAF (#2701)
- Tracing: Distributed tracing for Sidekiq (#2513)
- Tracing: Add Roda integration (#2368)
- Profiling: Support disabling endpoint names collection in new profiler (#2698)
- Tracing: Support Sidekiq 7 (#2810)
- Core: Add support for Unix Domain Socket (UDS) configuration via
DD_TRACE_AGENT_URL
(#2806) - Core: Enable Telemetry by default (#2762)
Changed
- Core: Allow
1
as true value in environment variables (#2710) - Profiling: Enable CPU Profiling 2.0 by default (#2702)
- Tracing: Improve controller instrumentation and deprecate option
exception_controller
(#2726) - Tracing: Implement Span Attribute Schema Environment Variable (#2727)
- Tracing: Change default
service_name
values (gated by feature flag) (#2760)
Fixed
- Bug: Tracing: Fix w3c propagation special character handling (#2720)
- Performance: Tracing: Use
+@
instead ofdup
for duplicating strings (#2704) - Profiling: Avoid triggering allocation sampling during sampling (#2690)
- Integrations: Tracing: Fix Rails < 3 conditional check in Utils#railtie_supported? (#2695)
- Profiling: Do not auto-enable new profiler when rugged gem is detected (#2741)
- Tracing: Fix using SemanticLogger#log(severity, message, progname) (#2748) (@rqz13)
- Profiling: Improve detection of mysql2 gem incompatibilities with profiler (#2770)
- AppSec: Remove check for
::Rack::Request.instance_methods.include?(:each_header)
at load time (#2778) - Tracing: Fix quadratic backtracking on invalid URI (#2788)
- Community: Correctly set mutex (#2757) (@ixti)
Read the full changeset and the release milestone.