-
Notifications
You must be signed in to change notification settings - Fork 411
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
chore(telemetry): decouple telemetry writer from global config #10863
base: main
Are you sure you want to change the base?
chore(telemetry): decouple telemetry writer from global config #10863
Conversation
|
That's great! Did we consider a callback/core event hub alternative approach to break the circular dependency? |
BenchmarksBenchmark execution time: 2024-10-02 15:44:34 Comparing candidate commit bbf8fda in PR branch Found 134 performance improvements and 0 performance regressions! Performance is the same for 237 metrics, 53 unstable metrics. scenario:coreapiscenario-context_with_data_listeners
scenario:coreapiscenario-context_with_data_no_listeners
scenario:coreapiscenario-context_with_data_only_all_listeners
scenario:coreapiscenario-get_item_exists
scenario:coreapiscenario-get_item_missing
scenario:coreapiscenario-set_item
scenario:flasksqli-baseline
scenario:httppropagationextract-all_styles_all_headers
scenario:httppropagationextract-b3_headers
scenario:httppropagationextract-b3_single_headers
scenario:httppropagationextract-datadog_tracecontext_tracestate_not_propagated_on_trace_id_no_match
scenario:httppropagationextract-datadog_tracecontext_tracestate_propagated_on_trace_id_match
scenario:httppropagationextract-empty_headers
scenario:httppropagationextract-full_t_id_datadog_headers
scenario:httppropagationextract-invalid_priority_header
scenario:httppropagationextract-invalid_span_id_header
scenario:httppropagationextract-invalid_tags_header
scenario:httppropagationextract-invalid_trace_id_header
scenario:httppropagationextract-large_header_no_matches
scenario:httppropagationextract-large_valid_headers_all
scenario:httppropagationextract-medium_header_no_matches
scenario:httppropagationextract-medium_valid_headers_all
scenario:httppropagationextract-none_propagation_style
scenario:httppropagationextract-tracecontext_headers
scenario:httppropagationextract-valid_headers_all
scenario:httppropagationextract-valid_headers_basic
scenario:httppropagationextract-wsgi_empty_headers
scenario:httppropagationextract-wsgi_invalid_priority_header
scenario:httppropagationextract-wsgi_invalid_span_id_header
scenario:httppropagationextract-wsgi_invalid_tags_header
scenario:httppropagationextract-wsgi_invalid_trace_id_header
scenario:httppropagationextract-wsgi_large_header_no_matches
scenario:httppropagationextract-wsgi_large_valid_headers_all
scenario:httppropagationextract-wsgi_medium_header_no_matches
scenario:httppropagationextract-wsgi_medium_valid_headers_all
scenario:httppropagationextract-wsgi_valid_headers_all
scenario:httppropagationextract-wsgi_valid_headers_basic
scenario:httppropagationinject-ids_only
scenario:httppropagationinject-with_all
scenario:httppropagationinject-with_dd_origin
scenario:httppropagationinject-with_priority_and_origin
scenario:httppropagationinject-with_sampling_priority
scenario:httppropagationinject-with_tags
scenario:httppropagationinject-with_tags_invalid
scenario:httppropagationinject-with_tags_max_size
scenario:iast_aspects-aspect_iast_do_os_path_basename
scenario:iast_aspects-aspect_iast_do_os_path_join
scenario:iast_aspects-aspect_iast_do_os_path_splitdrive
scenario:iast_aspects-aspect_no_iast_do_add_and_uppercase
scenario:iast_aspects-aspect_no_iast_do_add_re_compile
scenario:iast_aspects-aspect_no_iast_do_capitalize
scenario:iast_aspects-aspect_no_iast_do_casefold
scenario:iast_aspects-aspect_no_iast_do_center
scenario:iast_aspects-aspect_no_iast_do_customspec_ascii
scenario:iast_aspects-aspect_no_iast_do_encode
scenario:iast_aspects-aspect_no_iast_do_expandtabs
scenario:iast_aspects-aspect_no_iast_do_exporttype_member_format
scenario:iast_aspects-aspect_no_iast_do_fmt_value
scenario:iast_aspects-aspect_no_iast_do_format_map
scenario:iast_aspects-aspect_no_iast_do_index
scenario:iast_aspects-aspect_no_iast_do_index_on_dict
scenario:iast_aspects-aspect_no_iast_do_io_bytesio_read
scenario:iast_aspects-aspect_no_iast_do_io_stringio_read
scenario:iast_aspects-aspect_no_iast_do_join
scenario:iast_aspects-aspect_no_iast_do_ljust
scenario:iast_aspects-aspect_no_iast_do_lower
scenario:iast_aspects-aspect_no_iast_do_lstrip
scenario:iast_aspects-aspect_no_iast_do_modulo
scenario:iast_aspects-aspect_no_iast_do_multiple_string_assigment
scenario:iast_aspects-aspect_no_iast_do_operator_add_inplace_3_params
scenario:iast_aspects-aspect_no_iast_do_operator_add_inplace_3_times
scenario:iast_aspects-aspect_no_iast_do_operator_add_inplace_params
scenario:iast_aspects-aspect_no_iast_do_operator_add_params
scenario:iast_aspects-aspect_no_iast_do_os_path_basename
scenario:iast_aspects-aspect_no_iast_do_os_path_dirname
scenario:iast_aspects-aspect_no_iast_do_os_path_join
scenario:iast_aspects-aspect_no_iast_do_os_path_normcase
scenario:iast_aspects-aspect_no_iast_do_os_path_split
scenario:iast_aspects-aspect_no_iast_do_os_path_splitdrive
scenario:iast_aspects-aspect_no_iast_do_os_path_splitext
scenario:iast_aspects-aspect_no_iast_do_partition
scenario:iast_aspects-aspect_no_iast_do_re_sub
scenario:iast_aspects-aspect_no_iast_do_replace
scenario:iast_aspects-aspect_no_iast_do_repr
scenario:iast_aspects-aspect_no_iast_do_repr_fstring
scenario:iast_aspects-aspect_no_iast_do_sensitive_variables
scenario:iast_aspects-aspect_no_iast_do_slice
scenario:iast_aspects-aspect_no_iast_do_split_separator_and_maxsplit
scenario:iast_aspects-aspect_no_iast_do_splitlines_keepends
scenario:iast_aspects-aspect_no_iast_do_str
scenario:iast_aspects-aspect_no_iast_do_string_assignment
scenario:iast_aspects-aspect_no_iast_do_stringio_init_and_read
scenario:iast_aspects-aspect_no_iast_do_swapcase
scenario:iast_aspects-aspect_no_iast_do_title
scenario:iast_aspects-aspect_no_iast_do_translate
scenario:iast_aspects-aspect_no_iast_do_tuple_string_assignment
scenario:iast_aspects-aspect_no_iast_do_upper
scenario:iast_aspects-aspect_no_iast_do_zfill
scenario:otelspan-start-finish
scenario:otelspan-start-finish-telemetry
scenario:ratelimiter-defaults
scenario:ratelimiter-high_rate_limit
scenario:ratelimiter-long_window
scenario:ratelimiter-low_rate_limit
scenario:ratelimiter-no_rate_limit
scenario:ratelimiter-short_window
scenario:samplingrules-average_match
scenario:samplingrules-high_match
scenario:sethttpmeta-all-disabled
scenario:sethttpmeta-all-enabled
scenario:sethttpmeta-collectipvariant_exists
scenario:sethttpmeta-no-collectipvariant
scenario:sethttpmeta-no-useragentvariant
scenario:sethttpmeta-obfuscation-disabled
scenario:sethttpmeta-obfuscation-no-query
scenario:sethttpmeta-obfuscation-regular-case-explicit-query
scenario:sethttpmeta-obfuscation-regular-case-implicit-query
scenario:sethttpmeta-obfuscation-send-querystring-disabled
scenario:sethttpmeta-obfuscation-worst-case-explicit-query
scenario:sethttpmeta-obfuscation-worst-case-implicit-query
scenario:sethttpmeta-useragentvariant_exists_1
scenario:sethttpmeta-useragentvariant_exists_2
scenario:sethttpmeta-useragentvariant_exists_3
scenario:sethttpmeta-useragentvariant_not_exists_1
scenario:sethttpmeta-useragentvariant_not_exists_2
scenario:span-add-tags
scenario:span-start
scenario:span-start-finish
scenario:span-start-finish-telemetry
scenario:span-start-finish-traceid128
scenario:span-start-traceid128
scenario:tracer-large
scenario:tracer-medium
scenario:tracer-small
|
…try-writer-from-global-config
3f45532
to
8b9f92f
Compare
Good point. I though this approach could introduce a lot of complexity. We will need to ensure telemetry is started soon after we start queueing events to prevent memory leaks or data loss associated with unbounded metric and logs events. I think the simplest approach is to decouple the |
535fd96
to
211bf0b
Compare
d5cde12
to
0bffcd5
Compare
Datadog ReportBranch report: ✅ 0 Failed, 1286 Passed, 0 Skipped, 29m 41.54s Total duration (7m 23.45s time saved) |
tests/telemetry/test_telemetry.py
Outdated
@@ -22,6 +22,7 @@ def test_enable(test_agent_session, run_python_code_in_subprocess): | |||
|
|||
|
|||
@pytest.mark.snapshot | |||
@pytest.mark.skip("This test will be removed in a another PR") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@pytest.mark.skip("This test will be removed in a another PR") |
2bf7b98
to
79611f0
Compare
Description
Currently, the telemetry writer relies on ddtrace.config to enable and send telemetry payloads, while also queuing telemetry configuration events. This creates a circular dependency that can be painful to manage (currently supported via inlined import statements). This change resolves this circular dependency by refactoring
ddtrace.internal.telemetry.telemetry_writer
to access environment variables directly (instead of accessing ddtrace.config).This change will allow ddtrace contributors to queue telemetry configurations, metrics, and logs before the global config object is initialized.
Changes
ddtrace.config
and all envier configuration objects fromddtrace.internal.telemetry
packageChecklist
Reviewer Checklist