Skip to content

Conversation

@lucaspimentel
Copy link
Member

@lucaspimentel lucaspimentel commented Oct 6, 2025

Summary of changes

Add aas.site.kind tag to logs submitted via Direct Log Submission (agentless logging) in Azure App Services and Azure Functions.

Reason for change

The Serverless UI needs this tag to correctly differentiate between Azure Web Apps and Azure Function Apps. Currently, some Azure Function Apps are incorrectly displayed as mis-configured Azure Web Apps because the logs lack this distinguishing tag.

Related Slack discussion: https://dd.slack.com/archives/C0880PRMWG3/p1757605468066169

Implementation details

Modified LogFormatter.EnrichTagsWithAasMetadata() to include the aas.site.kind tag from ImmutableAzureAppServiceSettings:

  • aas.site.kind: The kind of application instance (e.g., "functionapp", "app", "functionapp_linux")

This tag is determined based on the presence of Azure Functions environment variables:

  • If both FUNCTIONS_WORKER_RUNTIME and FUNCTIONS_EXTENSION_VERSION are present → SiteKind = "functionapp"
  • Otherwise → SiteKind = "app"

The tag is conditionally added only when it contains a non-empty value, preventing empty tag pollution in logs.

Performance optimizations

Additional commits optimize LogFormatter to reduce allocations in the logging hot path:

  • Changed separator constants from string to char to eliminate string allocations
  • Streamlined EnrichTagsWithAasMetadata() to build all tags in a single StringBuilder pass
  • Removed conditional separator logic by using consistent append-then-trim pattern
  • Simplified early return logic and removed unnecessary null checks

Test coverage

Updated LogFormatterTests.WritesLogFormatCorrectly to validate that the new tag is included when running in Azure App Services.

Other details

Fixes APMSVLS-195

@lucaspimentel lucaspimentel changed the title Add aas.site.kind and aas.site.type tags to agentless logs [Azure Functions] Add aas.site.kind and aas.site.type tags to agentless logs Oct 6, 2025
@lucaspimentel lucaspimentel marked this pull request as ready for review October 6, 2025 16:08
@lucaspimentel lucaspimentel requested a review from a team as a code owner October 6, 2025 16:08
@dd-trace-dotnet-ci-bot
Copy link

dd-trace-dotnet-ci-bot bot commented Oct 6, 2025

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing the following branches/commits:

Execution-time benchmarks measure the whole time it takes to execute a program. And are intended to measure the one-off costs. Cases where the execution time results for the PR are worse than latest master results are shown in red. The following thresholds were used for comparing the execution times:

  • Welch test with statistical test for significance of 5%
  • Only results indicating a difference greater than 5% and 5 ms are considered.

Note that these results are based on a single point-in-time result for each branch. For full results, see the dashboard.

Graphs show the p99 interval based on the mean and StdDev of the test run, as well as the mean value of the run (shown as a diamond below the graph).

gantt
    title Execution time (ms) FakeDbCommand (.NET Framework 4.8) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7623) - mean (72ms)  : 71, 73
     .   : milestone, 72,
    master - mean (73ms)  : 72, 74
     .   : milestone, 73,

    section Baseline
    This PR (7623) - mean (68ms)  : 67, 70
     .   : milestone, 68,
    master - mean (69ms)  : 67, 72
     .   : milestone, 69,

    section CallTarget+Inlining+NGEN
    This PR (7623) - mean (1,051ms)  : 1001, 1101
     .   : milestone, 1051,
    master - mean (1,058ms)  : 1016, 1100
     .   : milestone, 1058,

Loading
gantt
    title Execution time (ms) FakeDbCommand (.NET Core 3.1) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7623) - mean (108ms)  : 106, 109
     .   : milestone, 108,
    master - mean (110ms)  : 108, 111
     .   : milestone, 110,

    section Baseline
    This PR (7623) - mean (106ms)  : 104, 109
     .   : milestone, 106,
    master - mean (109ms)  : 106, 112
     .   : milestone, 109,

    section CallTarget+Inlining+NGEN
    This PR (7623) - mean (744ms)  : 717, 770
     .   : milestone, 744,
    master - mean (754ms)  : 728, 780
     .   : milestone, 754,

Loading
gantt
    title Execution time (ms) FakeDbCommand (.NET 6) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7623) - mean (101ms)  : 100, 103
     .   : milestone, 101,
    master - mean (103ms)  : 102, 104
     .   : milestone, 103,

    section Baseline
    This PR (7623) - mean (101ms)  : 99, 103
     .   : milestone, 101,
    master - mean (103ms)  : 100, 105
     .   : milestone, 103,

    section CallTarget+Inlining+NGEN
    This PR (7623) - mean (778ms)  : 740, 815
     .   : milestone, 778,
    master - mean (793ms)  : 748, 838
     .   : milestone, 793,

Loading
gantt
    title Execution time (ms) FakeDbCommand (.NET 8) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7623) - mean (93ms)  : 92, 94
     .   : milestone, 93,
    master - mean (95ms)  : 94, 97
     .   : milestone, 95,

    section Baseline
    This PR (7623) - mean (93ms)  : 91, 95
     .   : milestone, 93,
    master - mean (95ms)  : 92, 97
     .   : milestone, 95,

    section CallTarget+Inlining+NGEN
    This PR (7623) - mean (660ms)  : 643, 677
     .   : milestone, 660,
    master - mean (671ms)  : 652, 690
     .   : milestone, 671,

Loading
gantt
    title Execution time (ms) HttpMessageHandler (.NET Framework 4.8) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7623) - mean (198ms)  : 195, 201
     .   : milestone, 198,
    master - mean (201ms)  : 195, 207
     .   : milestone, 201,

    section Baseline
    This PR (7623) - mean (194ms)  : 190, 198
     .   : milestone, 194,
    master - mean (196ms)  : 191, 202
     .   : milestone, 196,

    section CallTarget+Inlining+NGEN
    This PR (7623) - mean (1,174ms)  : 1109, 1239
     .   : milestone, 1174,
    master - mean (1,178ms)  : 1125, 1230
     .   : milestone, 1178,

Loading
gantt
    title Execution time (ms) HttpMessageHandler (.NET Core 3.1) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7623) - mean (279ms)  : 276, 282
     .   : milestone, 279,
    master - mean (285ms)  : 277, 293
     .   : milestone, 285,

    section Baseline
    This PR (7623) - mean (278ms)  : 273, 283
     .   : milestone, 278,
    master - mean (290ms)  : 270, 310
     .   : milestone, 290,

    section CallTarget+Inlining+NGEN
    This PR (7623) - mean (941ms)  : 907, 975
     .   : milestone, 941,
    master - mean (964ms)  : 921, 1007
     .   : milestone, 964,

Loading
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7623) - mean (282ms)  : 279, 285
     .   : milestone, 282,
    master - mean (288ms)  : 278, 298
     .   : milestone, 288,

    section Baseline
    This PR (7623) - mean (282ms)  : 277, 288
     .   : milestone, 282,
    master - mean (288ms)  : 276, 300
     .   : milestone, 288,

    section CallTarget+Inlining+NGEN
    This PR (7623) - mean (995ms)  : 956, 1034
     .   : milestone, 995,
    master - mean (1,011ms)  : 972, 1050
     .   : milestone, 1011,

Loading
gantt
    title Execution time (ms) HttpMessageHandler (.NET 8) 
    dateFormat  X
    axisFormat %s
    todayMarker off
    section Bailout
    This PR (7623) - mean (271ms)  : 268, 274
     .   : milestone, 271,
    master - mean (275ms)  : 268, 282
     .   : milestone, 275,

    section Baseline
    This PR (7623) - mean (271ms)  : 266, 277
     .   : milestone, 271,
    master - mean (274ms)  : 266, 282
     .   : milestone, 274,

    section CallTarget+Inlining+NGEN
    This PR (7623) - mean (851ms)  : 831, 871
     .   : milestone, 851,
    master - mean (863ms)  : 836, 891
     .   : milestone, 863,

Loading

@lucaspimentel lucaspimentel changed the title [Azure Functions] Add aas.site.kind and aas.site.type tags to agentless logs [Azure Functions] Add aas.site.kind tag to agentless logs Oct 6, 2025
@datadog-official

This comment has been minimized.

@lucaspimentel lucaspimentel requested a review from a team October 7, 2025 21:36
@lucaspimentel lucaspimentel force-pushed the lpimentel/APMSVLS-195-add-azfunc-agentless-log-tags branch from bbdf395 to 4927a0c Compare October 10, 2025 19:26
@pr-commenter
Copy link

pr-commenter bot commented Oct 10, 2025

Benchmarks

Benchmarks Report for benchmark platform 🐌

Benchmarks for #7623 compared to master:

  • 2 benchmarks are faster, with geometric mean 1.675
  • 1 benchmarks are slower, with geometric mean 1.127
  • 6 benchmarks have fewer allocations
  • 5 benchmarks have more allocations

The following thresholds were used for comparing the benchmark speeds:

  • Mann–Whitney U test with statistical test for significance of 5%
  • Only results indicating a difference greater than 10% and 0.3 ns are considered.

Allocation changes below 0.5% are ignored.

Benchmark details

Benchmarks.Trace.ActivityBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7623

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.ActivityBenchmark.StartStopWithChild‑net472 6.07 KB 6.12 KB 49 B 0.81%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartStopWithChild net6.0 11.2μs 47.7ns 185ns 0 0 0 5.53 KB
master StartStopWithChild netcoreapp3.1 14μs 19.1ns 73.9ns 0 0 0 5.71 KB
master StartStopWithChild net472 21.4μs 116ns 667ns 1.01 0.337 0.112 6.07 KB
#7623 StartStopWithChild net6.0 10.8μs 44.9ns 168ns 0 0 0 5.51 KB
#7623 StartStopWithChild netcoreapp3.1 13.4μs 68.5ns 306ns 0 0 0 5.73 KB
#7623 StartStopWithChild net472 21.5μs 119ns 762ns 0.865 0.324 0 6.12 KB
Benchmarks.Trace.AgentWriterBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 933μs 118ns 427ns 0 0 0 2.71 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 1.03ms 277ns 1.04μs 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces net472 1.19ms 602ns 2.33μs 0 0 0 3.31 KB
#7623 WriteAndFlushEnrichedTraces net6.0 935μs 279ns 1.08μs 0 0 0 2.7 KB
#7623 WriteAndFlushEnrichedTraces netcoreapp3.1 1.06ms 5.11μs 20.5μs 0 0 0 2.7 KB
#7623 WriteAndFlushEnrichedTraces net472 1.19ms 365ns 1.41μs 0 0 0 3.31 KB
Benchmarks.Trace.Asm.AppSecBodyBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master AllCycleSimpleBody net6.0 342μs 1.65μs 6.58μs 0 0 0 178.25 KB
master AllCycleSimpleBody netcoreapp3.1 505μs 638ns 2.47μs 0 0 0 184.01 KB
master AllCycleSimpleBody net472 461μs 205ns 793ns 31.2 0 0 203.96 KB
master AllCycleMoreComplexBody net6.0 352μs 1.08μs 4.17μs 0 0 0 181.77 KB
master AllCycleMoreComplexBody netcoreapp3.1 509μs 1.22μs 4.71μs 0 0 0 187.44 KB
master AllCycleMoreComplexBody net472 468μs 99.3ns 371ns 32.4 0 0 207.5 KB
master ObjectExtractorSimpleBody net6.0 340ns 0.335ns 1.3ns 0 0 0 280 B
master ObjectExtractorSimpleBody netcoreapp3.1 406ns 0.317ns 1.23ns 0 0 0 272 B
master ObjectExtractorSimpleBody net472 301ns 0.0271ns 0.105ns 0.0437 0 0 281 B
master ObjectExtractorMoreComplexBody net6.0 6.35μs 29.3ns 117ns 0 0 0 3.78 KB
master ObjectExtractorMoreComplexBody netcoreapp3.1 7.84μs 27.9ns 108ns 0 0 0 3.69 KB
master ObjectExtractorMoreComplexBody net472 6.61μs 0.981ns 3.8ns 0.597 0 0 3.8 KB
#7623 AllCycleSimpleBody net6.0 351μs 1.11μs 4.31μs 0 0 0 178.25 KB
#7623 AllCycleSimpleBody netcoreapp3.1 492μs 1.75μs 6.78μs 0 0 0 184.01 KB
#7623 AllCycleSimpleBody net472 461μs 97.1ns 376ns 31.2 0 0 203.96 KB
#7623 AllCycleMoreComplexBody net6.0 356μs 1.11μs 3.99μs 0 0 0 181.79 KB
#7623 AllCycleMoreComplexBody netcoreapp3.1 532μs 681ns 2.64μs 0 0 0 187.44 KB
#7623 AllCycleMoreComplexBody net472 468μs 49.2ns 170ns 32.4 0 0 207.5 KB
#7623 ObjectExtractorSimpleBody net6.0 324ns 1.72ns 6.87ns 0 0 0 280 B
#7623 ObjectExtractorSimpleBody netcoreapp3.1 411ns 2.29ns 13.9ns 0 0 0 272 B
#7623 ObjectExtractorSimpleBody net472 298ns 0.0135ns 0.0487ns 0.0434 0 0 281 B
#7623 ObjectExtractorMoreComplexBody net6.0 6.36μs 5.93ns 23ns 0 0 0 3.78 KB
#7623 ObjectExtractorMoreComplexBody netcoreapp3.1 7.75μs 40.5ns 190ns 0 0 0 3.69 KB
#7623 ObjectExtractorMoreComplexBody net472 6.82μs 2.26ns 8.75ns 0.582 0 0 3.8 KB
Benchmarks.Trace.Asm.AppSecEncoderBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EncodeArgs net6.0 76.3μs 48.6ns 182ns 0 0 0 32.4 KB
master EncodeArgs netcoreapp3.1 96.7μs 327ns 1.27μs 0 0 0 32.4 KB
master EncodeArgs net472 109μs 26.1ns 101ns 4.92 0 0 32.5 KB
master EncodeLegacyArgs net6.0 144μs 31.1ns 116ns 0 0 0 2.15 KB
master EncodeLegacyArgs netcoreapp3.1 198μs 118ns 441ns 0 0 0 2.14 KB
master EncodeLegacyArgs net472 261μs 16.4ns 63.5ns 0 0 0 2.17 KB
#7623 EncodeArgs net6.0 77.7μs 14ns 54.3ns 0 0 0 32.4 KB
#7623 EncodeArgs netcoreapp3.1 96μs 291ns 1.13μs 0 0 0 32.4 KB
#7623 EncodeArgs net472 109μs 6.86ns 25.7ns 4.9 0 0 32.51 KB
#7623 EncodeLegacyArgs net6.0 142μs 28.2ns 105ns 0 0 0 2.15 KB
#7623 EncodeLegacyArgs netcoreapp3.1 200μs 219ns 849ns 0 0 0 2.15 KB
#7623 EncodeLegacyArgs net472 261μs 237ns 855ns 0 0 0 2.16 KB
Benchmarks.Trace.Asm.AppSecWafBenchmark - Faster 🎉 Same allocations ✔️

Faster 🎉 in #7623

Benchmark base/diff Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.Asm.AppSecWafBenchmark.RunWafRealisticBenchmarkWithAttack‑netcoreapp3.1 2.461 731,300.38 297,210.27

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunWafRealisticBenchmark net6.0 396μs 180ns 699ns 0 0 0 4.55 KB
master RunWafRealisticBenchmark netcoreapp3.1 417μs 785ns 2.83μs 0 0 0 4.48 KB
master RunWafRealisticBenchmark net472 436μs 50.8ns 197ns 0 0 0 4.66 KB
master RunWafRealisticBenchmarkWithAttack net6.0 286μs 25.3ns 94.6ns 0 0 0 2.24 KB
master RunWafRealisticBenchmarkWithAttack netcoreapp3.1 687μs 10.6μs 106μs 0 0 0 2.22 KB
master RunWafRealisticBenchmarkWithAttack net472 314μs 39ns 151ns 0 0 0 2.29 KB
#7623 RunWafRealisticBenchmark net6.0 401μs 133ns 496ns 0 0 0 4.55 KB
#7623 RunWafRealisticBenchmark netcoreapp3.1 412μs 119ns 447ns 0 0 0 4.48 KB
#7623 RunWafRealisticBenchmark net472 427μs 40.5ns 151ns 0 0 0 4.66 KB
#7623 RunWafRealisticBenchmarkWithAttack net6.0 292μs 37ns 138ns 0 0 0 2.24 KB
#7623 RunWafRealisticBenchmarkWithAttack netcoreapp3.1 298μs 268ns 1.04μs 0 0 0 2.22 KB
#7623 RunWafRealisticBenchmarkWithAttack net472 308μs 36.4ns 141ns 0 0 0 2.29 KB
Benchmarks.Trace.AspNetCoreBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendRequest net6.0 61.9μs 74.1ns 277ns 0 0 0 14.52 KB
master SendRequest netcoreapp3.1 71.8μs 34.2ns 128ns 0 0 0 17.42 KB
master SendRequest net472 0.000132ns 9.02E‑05ns 0.000349ns 0 0 0 0 b
#7623 SendRequest net6.0 60.6μs 67.2ns 260ns 0 0 0 14.52 KB
#7623 SendRequest netcoreapp3.1 72.1μs 84.6ns 305ns 0 0 0 17.42 KB
#7623 SendRequest net472 0.00357ns 0.00137ns 0.00529ns 0 0 0 0 b
Benchmarks.Trace.CharSliceBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7623

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSlice‑net6.0 7 B 8 B 1 B 14.29%

Fewer allocations 🎉 in #7623

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool‑net6.0 3 B 2 B -1 B -33.33%
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool‑netcoreapp3.1 1 B 0 b -1 B -100.00%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master OriginalCharSlice net6.0 1.96ms 6.84μs 26.5μs 0 0 0 640 KB
master OriginalCharSlice netcoreapp3.1 2.08ms 6.05μs 23.4μs 0 0 0 640 KB
master OriginalCharSlice net472 2.63ms 216ns 836ns 100 0 0 641.95 KB
master OptimizedCharSlice net6.0 1.37ms 214ns 829ns 0 0 0 7 B
master OptimizedCharSlice netcoreapp3.1 1.72ms 361ns 1.35μs 0 0 0 1 B
master OptimizedCharSlice net472 1.98ms 252ns 976ns 0 0 0 0 b
master OptimizedCharSliceWithPool net6.0 798μs 39.2ns 147ns 0 0 0 3 B
master OptimizedCharSliceWithPool netcoreapp3.1 869μs 31.7ns 118ns 0 0 0 1 B
master OptimizedCharSliceWithPool net472 1.13ms 115ns 447ns 0 0 0 0 b
#7623 OriginalCharSlice net6.0 1.95ms 323ns 1.21μs 0 0 0 640.01 KB
#7623 OriginalCharSlice netcoreapp3.1 2.1ms 3.49μs 13.5μs 0 0 0 640 KB
#7623 OriginalCharSlice net472 2.7ms 1.63μs 6.32μs 100 0 0 641.95 KB
#7623 OptimizedCharSlice net6.0 1.47ms 250ns 970ns 0 0 0 8 B
#7623 OptimizedCharSlice netcoreapp3.1 1.72ms 339ns 1.31μs 0 0 0 1 B
#7623 OptimizedCharSlice net472 1.91ms 355ns 1.33μs 0 0 0 0 b
#7623 OptimizedCharSliceWithPool net6.0 827μs 47.5ns 184ns 0 0 0 2 B
#7623 OptimizedCharSliceWithPool netcoreapp3.1 818μs 109ns 424ns 0 0 0 0 b
#7623 OptimizedCharSliceWithPool net472 1.24ms 80.5ns 312ns 0 0 0 0 b
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Faster 🎉 Fewer allocations 🎉

Faster 🎉 in #7623

Benchmark base/diff Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net472 1.141 1,017,113.94 891,516.29

Fewer allocations 🎉 in #7623

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net472 56.11 KB 55.68 KB -428 B -0.76%
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net6.0 42.65 KB 42.19 KB -461 B -1.08%
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑netcoreapp3.1 43.15 KB 41.78 KB -1.37 KB -3.16%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 717μs 3.87μs 21.5μs 0 0 0 42.65 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 820μs 702ns 2.72μs 0 0 0 43.15 KB
master WriteAndFlushEnrichedTraces net472 1.02ms 4.84μs 19.9μs 4.81 0 0 56.11 KB
#7623 WriteAndFlushEnrichedTraces net6.0 756μs 4.06μs 21.9μs 0 0 0 42.19 KB
#7623 WriteAndFlushEnrichedTraces netcoreapp3.1 768μs 4.43μs 37μs 0 0 0 41.78 KB
#7623 WriteAndFlushEnrichedTraces net472 893μs 3.92μs 14.7μs 4.46 0 0 55.68 KB
Benchmarks.Trace.DbCommandBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteNonQuery net6.0 1.96μs 2.03ns 7.59ns 0 0 0 1.02 KB
master ExecuteNonQuery netcoreapp3.1 2.55μs 5.25ns 20.3ns 0 0 0 1.02 KB
master ExecuteNonQuery net472 2.81μs 4.37ns 16.9ns 0.153 0.0139 0 987 B
#7623 ExecuteNonQuery net6.0 1.89μs 8.88ns 36.6ns 0 0 0 1.02 KB
#7623 ExecuteNonQuery netcoreapp3.1 2.7μs 9.05ns 33.8ns 0 0 0 1.02 KB
#7623 ExecuteNonQuery net472 2.74μs 5.71ns 22.1ns 0.15 0.0136 0 987 B
Benchmarks.Trace.ElasticsearchBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master CallElasticsearch net6.0 1.76μs 4.6ns 17.2ns 0 0 0 1.03 KB
master CallElasticsearch netcoreapp3.1 2.31μs 11.3ns 49.4ns 0 0 0 1.03 KB
master CallElasticsearch net472 3.48μs 2.65ns 10.3ns 0.155 0 0 1.04 KB
master CallElasticsearchAsync net6.0 1.88μs 7.85ns 30.4ns 0 0 0 1.01 KB
master CallElasticsearchAsync netcoreapp3.1 2.44μs 11.6ns 47.8ns 0 0 0 1.08 KB
master CallElasticsearchAsync net472 3.82μs 6.91ns 26.8ns 0.17 0 0 1.1 KB
#7623 CallElasticsearch net6.0 1.81μs 3.5ns 13.6ns 0 0 0 1.03 KB
#7623 CallElasticsearch netcoreapp3.1 2.24μs 1.02ns 3.94ns 0 0 0 1.03 KB
#7623 CallElasticsearch net472 3.41μs 3.18ns 12.3ns 0.154 0 0 1.04 KB
#7623 CallElasticsearchAsync net6.0 1.85μs 7.9ns 30.6ns 0 0 0 1.01 KB
#7623 CallElasticsearchAsync netcoreapp3.1 2.38μs 11.8ns 48.5ns 0 0 0 1.08 KB
#7623 CallElasticsearchAsync net472 3.65μs 3.05ns 11.8ns 0.164 0 0 1.1 KB
Benchmarks.Trace.GraphQLBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteAsync net6.0 1.89μs 3.9ns 15.1ns 0 0 0 952 B
master ExecuteAsync netcoreapp3.1 2.31μs 10.7ns 41.6ns 0 0 0 952 B
master ExecuteAsync net472 2.68μs 9.35ns 36.2ns 0.145 0 0 915 B
#7623 ExecuteAsync net6.0 1.81μs 8.07ns 29.1ns 0 0 0 952 B
#7623 ExecuteAsync netcoreapp3.1 2.57μs 11.1ns 43.2ns 0 0 0 952 B
#7623 ExecuteAsync net472 2.53μs 2.65ns 9.9ns 0.139 0 0 915 B
Benchmarks.Trace.HttpClientBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendAsync net6.0 6.78μs 3.98ns 15.4ns 0 0 0 2.36 KB
master SendAsync netcoreapp3.1 8.33μs 4.95ns 17.9ns 0 0 0 2.9 KB
master SendAsync net472 12.2μs 15.5ns 60ns 0.486 0 0 3.18 KB
#7623 SendAsync net6.0 6.93μs 11.9ns 44.7ns 0 0 0 2.36 KB
#7623 SendAsync netcoreapp3.1 8.38μs 7.53ns 29.2ns 0 0 0 2.9 KB
#7623 SendAsync net472 12.5μs 9.04ns 35ns 0.5 0 0 3.18 KB
Benchmarks.Trace.Iast.StringAspectsBenchmark - Slower ⚠️ More allocations ⚠️

Slower ⚠️ in #7623

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net6.0 1.127 443,550.00 500,000.00

More allocations ⚠️ in #7623

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net6.0 258.64 KB 278.48 KB 19.84 KB 7.67%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net472 278.53 KB 286.72 KB 8.19 KB 2.94%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑net6.0 43.54 KB 44.34 KB 800 B 1.84%

Fewer allocations 🎉 in #7623

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑netcoreapp3.1 260.58 KB 256.14 KB -4.45 KB -1.71%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StringConcatBenchmark net6.0 43.1μs 202ns 809ns 0 0 0 43.54 KB
master StringConcatBenchmark netcoreapp3.1 45.1μs 140ns 504ns 0 0 0 44.04 KB
master StringConcatBenchmark net472 56.7μs 268ns 1.07μs 0 0 0 57.34 KB
master StringConcatAspectBenchmark net6.0 446μs 1.98μs 7.93μs 0 0 0 258.64 KB
master StringConcatAspectBenchmark netcoreapp3.1 537μs 1.87μs 7μs 0 0 0 260.58 KB
master StringConcatAspectBenchmark net472 405μs 2.28μs 15.1μs 0 0 0 278.53 KB
#7623 StringConcatBenchmark net6.0 45.4μs 309ns 2.96μs 0 0 0 44.34 KB
#7623 StringConcatBenchmark netcoreapp3.1 48.6μs 185ns 665ns 0 0 0 44.04 KB
#7623 StringConcatBenchmark net472 56.3μs 299ns 1.5μs 0 0 0 57.34 KB
#7623 StringConcatAspectBenchmark net6.0 501μs 1.63μs 7.46μs 0 0 0 278.48 KB
#7623 StringConcatAspectBenchmark netcoreapp3.1 518μs 2.35μs 9.4μs 0 0 0 256.14 KB
#7623 StringConcatAspectBenchmark net472 398μs 1.59μs 6.35μs 0 0 0 286.72 KB
Benchmarks.Trace.ILoggerBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 2.53μs 12.1ns 50ns 0 0 0 1.7 KB
master EnrichedLog netcoreapp3.1 3.6μs 1.77ns 6.39ns 0 0 0 1.7 KB
master EnrichedLog net472 3.69μs 3.42ns 12.8ns 0.243 0 0 1.64 KB
#7623 EnrichedLog net6.0 2.57μs 4.12ns 15.9ns 0 0 0 1.7 KB
#7623 EnrichedLog netcoreapp3.1 3.49μs 17.9ns 85.8ns 0 0 0 1.7 KB
#7623 EnrichedLog net472 3.62μs 2.25ns 8.71ns 0.252 0 0 1.64 KB
Benchmarks.Trace.Log4netBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 123μs 180ns 675ns 0 0 0 4.31 KB
master EnrichedLog netcoreapp3.1 132μs 714ns 3.78μs 0 0 0 4.31 KB
master EnrichedLog net472 168μs 359ns 1.39μs 0 0 0 4.52 KB
#7623 EnrichedLog net6.0 123μs 77ns 298ns 0 0 0 4.31 KB
#7623 EnrichedLog netcoreapp3.1 128μs 182ns 682ns 0 0 0 4.31 KB
#7623 EnrichedLog net472 166μs 38.8ns 140ns 0 0 0 4.51 KB
Benchmarks.Trace.NLogBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 4.85μs 18.2ns 63.1ns 0 0 0 2.26 KB
master EnrichedLog netcoreapp3.1 6.66μs 15.7ns 58.9ns 0 0 0 2.26 KB
master EnrichedLog net472 7.65μs 5.06ns 19.6ns 0.306 0 0 2.08 KB
#7623 EnrichedLog net6.0 4.78μs 24.1ns 113ns 0 0 0 2.26 KB
#7623 EnrichedLog netcoreapp3.1 7μs 8.42ns 32.6ns 0 0 0 2.26 KB
#7623 EnrichedLog net472 7.7μs 4.2ns 16.3ns 0.307 0 0 2.08 KB
Benchmarks.Trace.RedisBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendReceive net6.0 2.02μs 7.86ns 30.5ns 0 0 0 1.2 KB
master SendReceive netcoreapp3.1 2.7μs 2.53ns 9.79ns 0 0 0 1.2 KB
master SendReceive net472 3.12μs 3.95ns 15.3ns 0.187 0 0 1.2 KB
#7623 SendReceive net6.0 2.04μs 10ns 41.4ns 0 0 0 1.2 KB
#7623 SendReceive netcoreapp3.1 2.54μs 12ns 46.5ns 0 0 0 1.2 KB
#7623 SendReceive net472 3.04μs 4.82ns 18.7ns 0.182 0 0 1.2 KB
Benchmarks.Trace.SerilogBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 4.16μs 13.9ns 53.8ns 0 0 0 1.58 KB
master EnrichedLog netcoreapp3.1 5.53μs 15.6ns 60.4ns 0 0 0 1.63 KB
master EnrichedLog net472 6.43μs 7.27ns 28.1ns 0.322 0 0 2.03 KB
#7623 EnrichedLog net6.0 4.26μs 12.9ns 50.1ns 0 0 0 1.58 KB
#7623 EnrichedLog netcoreapp3.1 5.59μs 15.3ns 59.4ns 0 0 0 1.63 KB
#7623 EnrichedLog net472 6.47μs 5.92ns 22.2ns 0.322 0 0 2.03 KB
Benchmarks.Trace.SpanBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartFinishSpan net6.0 734ns 0.149ns 0.577ns 0 0 0 576 B
master StartFinishSpan netcoreapp3.1 913ns 4.89ns 26.8ns 0 0 0 576 B
master StartFinishSpan net472 885ns 0.115ns 0.432ns 0.0884 0 0 578 B
master StartFinishScope net6.0 870ns 0.496ns 1.92ns 0 0 0 696 B
master StartFinishScope netcoreapp3.1 1.13μs 5.78ns 28.3ns 0 0 0 696 B
master StartFinishScope net472 1.04μs 0.498ns 1.86ns 0.0994 0 0 658 B
#7623 StartFinishSpan net6.0 747ns 3.42ns 13.7ns 0 0 0 576 B
#7623 StartFinishSpan netcoreapp3.1 927ns 4.63ns 21.2ns 0 0 0 576 B
#7623 StartFinishSpan net472 900ns 0.147ns 0.55ns 0.0902 0 0 578 B
#7623 StartFinishScope net6.0 888ns 4.47ns 21.4ns 0 0 0 696 B
#7623 StartFinishScope netcoreapp3.1 1.15μs 1.67ns 6.46ns 0 0 0 696 B
#7623 StartFinishScope net472 1.08μs 0.41ns 1.59ns 0.103 0 0 658 B
Benchmarks.Trace.TraceAnnotationsBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunOnMethodBegin net6.0 1.02μs 4.96ns 19.8ns 0 0 0 696 B
master RunOnMethodBegin netcoreapp3.1 1.36μs 6.96ns 31.1ns 0 0 0 696 B
master RunOnMethodBegin net472 1.42μs 1.57ns 5.66ns 0.0993 0 0 658 B
#7623 RunOnMethodBegin net6.0 1.03μs 5.45ns 28.8ns 0 0 0 696 B
#7623 RunOnMethodBegin netcoreapp3.1 1.39μs 2.4ns 8.96ns 0 0 0 696 B
#7623 RunOnMethodBegin net472 1.4μs 0.771ns 2.99ns 0.0988 0 0 658 B

Copy link
Member

@andrewlock andrewlock left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

lucaspimentel and others added 14 commits October 14, 2025 18:42
Add Azure App Services site kind and site type tags to logs submitted
via Direct Log Submission (agentless logging). These tags allow the
Serverless UI to correctly differentiate between Azure Web Apps and
Azure Function Apps.

The tags are:
- aas.site.kind: The kind of application instance (e.g., functionapp, app)
- aas.site.type: The type of application instance (e.g., function, app)

Fixes APMSVLS-195

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Update EnrichTagsWithAasMetadata to conditionally add aas.site.kind
and aas.site.type tags only when they contain non-empty values.
This prevents adding tags with empty values to the logs.

Uses StringBuilder for efficient string building and only adds
separator when needed between tags.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Only aas.site.kind is needed for the Serverless UI to differentiate between Azure Web Apps and Azure Function Apps.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
…ogFormatter.cs

Co-authored-by: Steven Bouwkamp <steven.bouwkamp@datadoghq.com>
Changed the check to use !string.IsNullOrEmpty(Tags) instead of
Tags is not null to prevent writing empty ddtags property to JSON logs.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-authored-by: Andrew Lock <andrew.lock@datadoghq.com>
Co-authored-by: Andrew Lock <andrew.lock@datadoghq.com>
@lucaspimentel lucaspimentel force-pushed the lpimentel/APMSVLS-195-add-azfunc-agentless-log-tags branch from 16324ea to fa54c8c Compare October 14, 2025 22:42
@lucaspimentel lucaspimentel enabled auto-merge (squash) October 14, 2025 22:42
@lucaspimentel lucaspimentel merged commit 7246a78 into master Oct 14, 2025
148 of 150 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants