Skip to content

Commit 3990b8f

Browse files
committed
Replace DI memory-pressure distributions with bucketed counts
1 parent 5c99511 commit 3990b8f

47 files changed

Lines changed: 578 additions & 501 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

tracer/src/Datadog.Trace/Debugger/RateLimiting/MemoryPressureMonitor.cs

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -210,20 +210,48 @@ private static void RecordTransitionTelemetry(bool isHighPressure, MetricTags.De
210210

211211
if (memoryUsagePercent.HasValue)
212212
{
213-
TelemetryFactory.Metrics.RecordDistributionSharedDebuggerMemoryPressureMemoryUsagePct(state, memoryUsagePercent.Value);
213+
TelemetryFactory.Metrics.RecordCountDebuggerMemoryPressureMemoryUsagePct(state, GetMemoryBucket(memoryUsagePercent.Value));
214214
}
215215

216216
if (gen2CollectionsPerSecond.HasValue)
217217
{
218-
TelemetryFactory.Metrics.RecordDistributionSharedDebuggerMemoryPressureGen2PerSec(state, gen2CollectionsPerSecond.Value);
218+
TelemetryFactory.Metrics.RecordCountDebuggerMemoryPressureGen2PerSec(state, GetGen2Bucket(gen2CollectionsPerSecond.Value));
219219
}
220220

221221
if (!isHighPressure)
222222
{
223-
TelemetryFactory.Metrics.RecordDistributionSharedDebuggerMemoryPressureDurationMs(highPressureDurationMs);
223+
TelemetryFactory.Metrics.RecordCountDebuggerMemoryPressureDurationMs(GetDurationBucket(highPressureDurationMs));
224224
}
225225
}
226226

227+
private static MetricTags.DebuggerMemoryPressureMemoryBucket GetMemoryBucket(double memoryUsagePercent)
228+
=> memoryUsagePercent switch
229+
{
230+
< 70 => MetricTags.DebuggerMemoryPressureMemoryBucket.LessThan70,
231+
< 80 => MetricTags.DebuggerMemoryPressureMemoryBucket.From70To80,
232+
< 85 => MetricTags.DebuggerMemoryPressureMemoryBucket.From80To85,
233+
< 90 => MetricTags.DebuggerMemoryPressureMemoryBucket.From85To90,
234+
_ => MetricTags.DebuggerMemoryPressureMemoryBucket.GreaterThanOrEqual90,
235+
};
236+
237+
private static MetricTags.DebuggerMemoryPressureGen2Bucket GetGen2Bucket(double gen2CollectionsPerSecond)
238+
=> gen2CollectionsPerSecond switch
239+
{
240+
< 1 => MetricTags.DebuggerMemoryPressureGen2Bucket.LessThan1,
241+
< 2 => MetricTags.DebuggerMemoryPressureGen2Bucket.From1To2,
242+
< 5 => MetricTags.DebuggerMemoryPressureGen2Bucket.From2To5,
243+
_ => MetricTags.DebuggerMemoryPressureGen2Bucket.GreaterThanOrEqual5,
244+
};
245+
246+
private static MetricTags.DebuggerMemoryPressureDurationBucket GetDurationBucket(double durationMs)
247+
=> durationMs switch
248+
{
249+
< 1_000 => MetricTags.DebuggerMemoryPressureDurationBucket.LessThan1Second,
250+
< 5_000 => MetricTags.DebuggerMemoryPressureDurationBucket.From1To5Seconds,
251+
< 30_000 => MetricTags.DebuggerMemoryPressureDurationBucket.From5To30Seconds,
252+
_ => MetricTags.DebuggerMemoryPressureDurationBucket.GreaterThanOrEqual30Seconds,
253+
};
254+
227255
private static void RecordDisabledTelemetry(MetricTags.DebuggerMemoryPressureDisabledReason reason)
228256
{
229257
TelemetryFactory.Metrics.RecordCountDebuggerMemoryPressureDisabled(reason);

tracer/src/Datadog.Trace/Generated/net461/Datadog.Trace.SourceGenerators/TelemetryMetricGenerator/CiVisibilityMetricsTelemetryCollector_Count.g.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,18 @@ public void RecordCountDebuggerMemoryPressureDisabled(Datadog.Trace.Telemetry.Me
164164
{
165165
}
166166

167+
public void RecordCountDebuggerMemoryPressureMemoryUsagePct(Datadog.Trace.Telemetry.Metrics.MetricTags.DebuggerMemoryPressureState tag1, Datadog.Trace.Telemetry.Metrics.MetricTags.DebuggerMemoryPressureMemoryBucket tag2, int increment = 1)
168+
{
169+
}
170+
171+
public void RecordCountDebuggerMemoryPressureGen2PerSec(Datadog.Trace.Telemetry.Metrics.MetricTags.DebuggerMemoryPressureState tag1, Datadog.Trace.Telemetry.Metrics.MetricTags.DebuggerMemoryPressureGen2Bucket tag2, int increment = 1)
172+
{
173+
}
174+
175+
public void RecordCountDebuggerMemoryPressureDurationMs(Datadog.Trace.Telemetry.Metrics.MetricTags.DebuggerMemoryPressureDurationBucket tag, int increment = 1)
176+
{
177+
}
178+
167179
public void RecordCountWafInit(Datadog.Trace.Telemetry.Metrics.MetricTags.WafStatus tag, int increment = 1)
168180
{
169181
}

tracer/src/Datadog.Trace/Generated/net461/Datadog.Trace.SourceGenerators/TelemetryMetricGenerator/CiVisibilityMetricsTelemetryCollector_DistributionShared.g.cs

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
namespace Datadog.Trace.Telemetry;
1212
internal sealed partial class CiVisibilityMetricsTelemetryCollector
1313
{
14-
private const int DistributionSharedLength = 18;
14+
private const int DistributionSharedLength = 13;
1515

1616
/// <summary>
1717
/// Creates the buffer for the <see cref="Datadog.Trace.Telemetry.Metrics.DistributionShared" /> values.
@@ -33,14 +33,6 @@ private static AggregatedDistribution[] GetDistributionSharedBuffer()
3333
new(new[] { "component:dynamic_instrumentation" }),
3434
new(new[] { "component:tracemethods_pinvoke" }),
3535
new(new[] { "component:iast" }),
36-
// memory_pressure.memory_usage_pct, index = 13
37-
new(new[] { "state:enter" }),
38-
new(new[] { "state:exit" }),
39-
// memory_pressure.gen2_per_sec, index = 15
40-
new(new[] { "state:enter" }),
41-
new(new[] { "state:exit" }),
42-
// memory_pressure.duration_ms, index = 17
43-
new(null),
4436
};
4537

4638
/// <summary>
@@ -49,28 +41,11 @@ private static AggregatedDistribution[] GetDistributionSharedBuffer()
4941
/// It is equal to the cardinality of the tag combinations (or 1 if there are no tags)
5042
/// </summary>
5143
private static int[] DistributionSharedEntryCounts { get; }
52-
= new int[]{ 13, 2, 2, 1, };
44+
= new int[]{ 13, };
5345

5446
public void RecordDistributionSharedInitTime(Datadog.Trace.Telemetry.Metrics.MetricTags.InitializationComponent tag, double value)
5547
{
5648
var index = 0 + (int)tag;
5749
_buffer.DistributionShared[index].TryEnqueue(value);
5850
}
59-
60-
public void RecordDistributionSharedDebuggerMemoryPressureMemoryUsagePct(Datadog.Trace.Telemetry.Metrics.MetricTags.DebuggerMemoryPressureState tag, double value)
61-
{
62-
var index = 13 + (int)tag;
63-
_buffer.DistributionShared[index].TryEnqueue(value);
64-
}
65-
66-
public void RecordDistributionSharedDebuggerMemoryPressureGen2PerSec(Datadog.Trace.Telemetry.Metrics.MetricTags.DebuggerMemoryPressureState tag, double value)
67-
{
68-
var index = 15 + (int)tag;
69-
_buffer.DistributionShared[index].TryEnqueue(value);
70-
}
71-
72-
public void RecordDistributionSharedDebuggerMemoryPressureDurationMs(double value)
73-
{
74-
_buffer.DistributionShared[17].TryEnqueue(value);
75-
}
7651
}

tracer/src/Datadog.Trace/Generated/net461/Datadog.Trace.SourceGenerators/TelemetryMetricGenerator/CountExtensions.g.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ internal static partial class CountExtensions
1212
/// <summary>
1313
/// The number of separate metrics in the <see cref="Datadog.Trace.Telemetry.Metrics.Count" /> metric.
1414
/// </summary>
15-
public const int Length = 53;
15+
public const int Length = 56;
1616

1717
/// <summary>
1818
/// Gets the metric name for the provided metric
@@ -60,6 +60,9 @@ public static string GetName(this Datadog.Trace.Telemetry.Metrics.Count metric)
6060
Datadog.Trace.Telemetry.Metrics.Count.DirectLogApiErrors => "direct_log_api.errors",
6161
Datadog.Trace.Telemetry.Metrics.Count.DebuggerMemoryPressureTransitions => "memory_pressure.transitions",
6262
Datadog.Trace.Telemetry.Metrics.Count.DebuggerMemoryPressureDisabled => "memory_pressure.disabled",
63+
Datadog.Trace.Telemetry.Metrics.Count.DebuggerMemoryPressureMemoryUsagePct => "memory_pressure.memory_usage_pct",
64+
Datadog.Trace.Telemetry.Metrics.Count.DebuggerMemoryPressureGen2PerSec => "memory_pressure.gen2_per_sec",
65+
Datadog.Trace.Telemetry.Metrics.Count.DebuggerMemoryPressureDurationMs => "memory_pressure.duration_ms",
6366
Datadog.Trace.Telemetry.Metrics.Count.WafInit => "waf.init",
6467
Datadog.Trace.Telemetry.Metrics.Count.WafUpdates => "waf.updates",
6568
Datadog.Trace.Telemetry.Metrics.Count.WafRequests => "waf.requests",
@@ -115,6 +118,9 @@ public static bool IsCommon(this Datadog.Trace.Telemetry.Metrics.Count metric)
115118
Datadog.Trace.Telemetry.Metrics.Count.TelemetryApiErrors => "telemetry",
116119
Datadog.Trace.Telemetry.Metrics.Count.DebuggerMemoryPressureTransitions => "live_debugger",
117120
Datadog.Trace.Telemetry.Metrics.Count.DebuggerMemoryPressureDisabled => "live_debugger",
121+
Datadog.Trace.Telemetry.Metrics.Count.DebuggerMemoryPressureMemoryUsagePct => "live_debugger",
122+
Datadog.Trace.Telemetry.Metrics.Count.DebuggerMemoryPressureGen2PerSec => "live_debugger",
123+
Datadog.Trace.Telemetry.Metrics.Count.DebuggerMemoryPressureDurationMs => "live_debugger",
118124
Datadog.Trace.Telemetry.Metrics.Count.WafInit => "appsec",
119125
Datadog.Trace.Telemetry.Metrics.Count.WafUpdates => "appsec",
120126
Datadog.Trace.Telemetry.Metrics.Count.WafRequests => "appsec",

tracer/src/Datadog.Trace/Generated/net461/Datadog.Trace.SourceGenerators/TelemetryMetricGenerator/DistributionSharedExtensions.g.cs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ internal static partial class DistributionSharedExtensions
1212
/// <summary>
1313
/// The number of separate metrics in the <see cref="Datadog.Trace.Telemetry.Metrics.DistributionShared" /> metric.
1414
/// </summary>
15-
public const int Length = 4;
15+
public const int Length = 1;
1616

1717
/// <summary>
1818
/// Gets the metric name for the provided metric
@@ -23,9 +23,6 @@ public static string GetName(this Datadog.Trace.Telemetry.Metrics.DistributionSh
2323
=> metric switch
2424
{
2525
Datadog.Trace.Telemetry.Metrics.DistributionShared.InitTime => "init_time",
26-
Datadog.Trace.Telemetry.Metrics.DistributionShared.DebuggerMemoryPressureMemoryUsagePct => "memory_pressure.memory_usage_pct",
27-
Datadog.Trace.Telemetry.Metrics.DistributionShared.DebuggerMemoryPressureGen2PerSec => "memory_pressure.gen2_per_sec",
28-
Datadog.Trace.Telemetry.Metrics.DistributionShared.DebuggerMemoryPressureDurationMs => "memory_pressure.duration_ms",
2926
_ => null!,
3027
};
3128

@@ -49,9 +46,6 @@ public static bool IsCommon(this Datadog.Trace.Telemetry.Metrics.DistributionSha
4946
=> metric switch
5047
{
5148
Datadog.Trace.Telemetry.Metrics.DistributionShared.InitTime => "general",
52-
Datadog.Trace.Telemetry.Metrics.DistributionShared.DebuggerMemoryPressureMemoryUsagePct => "live_debugger",
53-
Datadog.Trace.Telemetry.Metrics.DistributionShared.DebuggerMemoryPressureGen2PerSec => "live_debugger",
54-
Datadog.Trace.Telemetry.Metrics.DistributionShared.DebuggerMemoryPressureDurationMs => "live_debugger",
5549
_ => null,
5650
};
5751
}

tracer/src/Datadog.Trace/Generated/net461/Datadog.Trace.SourceGenerators/TelemetryMetricGenerator/IMetricsTelemetryCollector_Count.g.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,12 @@ internal partial interface IMetricsTelemetryCollector
8585

8686
public void RecordCountDebuggerMemoryPressureDisabled(Datadog.Trace.Telemetry.Metrics.MetricTags.DebuggerMemoryPressureDisabledReason tag, int increment = 1);
8787

88+
public void RecordCountDebuggerMemoryPressureMemoryUsagePct(Datadog.Trace.Telemetry.Metrics.MetricTags.DebuggerMemoryPressureState tag1, Datadog.Trace.Telemetry.Metrics.MetricTags.DebuggerMemoryPressureMemoryBucket tag2, int increment = 1);
89+
90+
public void RecordCountDebuggerMemoryPressureGen2PerSec(Datadog.Trace.Telemetry.Metrics.MetricTags.DebuggerMemoryPressureState tag1, Datadog.Trace.Telemetry.Metrics.MetricTags.DebuggerMemoryPressureGen2Bucket tag2, int increment = 1);
91+
92+
public void RecordCountDebuggerMemoryPressureDurationMs(Datadog.Trace.Telemetry.Metrics.MetricTags.DebuggerMemoryPressureDurationBucket tag, int increment = 1);
93+
8894
public void RecordCountWafInit(Datadog.Trace.Telemetry.Metrics.MetricTags.WafStatus tag, int increment = 1);
8995

9096
public void RecordCountWafUpdates(Datadog.Trace.Telemetry.Metrics.MetricTags.WafStatus tag, int increment = 1);

tracer/src/Datadog.Trace/Generated/net461/Datadog.Trace.SourceGenerators/TelemetryMetricGenerator/IMetricsTelemetryCollector_DistributionShared.g.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,4 @@ namespace Datadog.Trace.Telemetry;
1010
internal partial interface IMetricsTelemetryCollector
1111
{
1212
public void RecordDistributionSharedInitTime(Datadog.Trace.Telemetry.Metrics.MetricTags.InitializationComponent tag, double value);
13-
14-
public void RecordDistributionSharedDebuggerMemoryPressureMemoryUsagePct(Datadog.Trace.Telemetry.Metrics.MetricTags.DebuggerMemoryPressureState tag, double value);
15-
16-
public void RecordDistributionSharedDebuggerMemoryPressureGen2PerSec(Datadog.Trace.Telemetry.Metrics.MetricTags.DebuggerMemoryPressureState tag, double value);
17-
18-
public void RecordDistributionSharedDebuggerMemoryPressureDurationMs(double value);
1913
}

0 commit comments

Comments
 (0)