-
Notifications
You must be signed in to change notification settings - Fork 761
opentelemetry-sdk: make it possible to customize processors configuation #4806
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
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -38,7 +38,11 @@ | |
| ) | ||
| from opentelemetry.metrics import set_meter_provider | ||
| from opentelemetry.sdk._events import EventLoggerProvider | ||
| from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler | ||
| from opentelemetry.sdk._logs import ( | ||
| LoggerProvider, | ||
| LoggingHandler, | ||
| LogRecordProcessor, | ||
| ) | ||
| from opentelemetry.sdk._logs.export import BatchLogRecordProcessor, LogExporter | ||
| from opentelemetry.sdk.environment_variables import ( | ||
| _OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED, | ||
|
|
@@ -56,7 +60,7 @@ | |
| PeriodicExportingMetricReader, | ||
| ) | ||
| from opentelemetry.sdk.resources import Attributes, Resource | ||
| from opentelemetry.sdk.trace import TracerProvider | ||
| from opentelemetry.sdk.trace import SpanProcessor, TracerProvider | ||
| from opentelemetry.sdk.trace.export import BatchSpanProcessor, SpanExporter | ||
| from opentelemetry.sdk.trace.id_generator import IdGenerator | ||
| from opentelemetry.sdk.trace.sampling import Sampler | ||
|
|
@@ -208,6 +212,7 @@ def _init_tracing( | |
| sampler: Sampler | None = None, | ||
| resource: Resource | None = None, | ||
| exporter_args_map: ExporterArgsMap | None = None, | ||
| processor: Type[SpanProcessor] | None = None, | ||
| ): | ||
| provider = TracerProvider( | ||
| id_generator=id_generator, | ||
|
|
@@ -217,10 +222,11 @@ def _init_tracing( | |
| set_tracer_provider(provider) | ||
|
|
||
| exporter_args_map = exporter_args_map or {} | ||
| span_processor = processor or BatchSpanProcessor | ||
| for _, exporter_class in exporters.items(): | ||
| exporter_args = exporter_args_map.get(exporter_class, {}) | ||
| provider.add_span_processor( | ||
| BatchSpanProcessor(exporter_class(**exporter_args)) | ||
| span_processor(exporter_class(**exporter_args)) | ||
| ) | ||
|
|
||
|
|
||
|
|
@@ -254,15 +260,17 @@ def _init_logging( | |
| resource: Resource | None = None, | ||
| setup_logging_handler: bool = True, | ||
| exporter_args_map: ExporterArgsMap | None = None, | ||
| processor: Type[LogRecordProcessor] | None = None, | ||
| ): | ||
| provider = LoggerProvider(resource=resource) | ||
| set_logger_provider(provider) | ||
|
|
||
| exporter_args_map = exporter_args_map or {} | ||
| log_record_processor = processor or BatchLogRecordProcessor | ||
| for _, exporter_class in exporters.items(): | ||
| exporter_args = exporter_args_map.get(exporter_class, {}) | ||
| provider.add_log_record_processor( | ||
| BatchLogRecordProcessor(exporter_class(**exporter_args)) | ||
| log_record_processor(exporter_class(**exporter_args)) | ||
| ) | ||
|
|
||
| event_logger_provider = EventLoggerProvider(logger_provider=provider) | ||
|
|
@@ -416,7 +424,10 @@ def _initialize_components( | |
| id_generator: IdGenerator | None = None, | ||
| setup_logging_handler: bool | None = None, | ||
| exporter_args_map: ExporterArgsMap | None = None, | ||
| span_processor: Type[SpanProcessor] | None = None, | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is the same for every exporter, is it enough or we want to make it per exporter? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This might make the API too ugly, but we could do
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. With the current code we call just one processor wrapping the exporter class, what I was asking if people with multiple exporters may want to use a different processor depending on the exporter, similar on how we handle the exporters args as |
||
| log_record_processor: Type[LogRecordProcessor] | None = None, | ||
| ): | ||
| # pylint: disable=too-many-locals | ||
| if trace_exporter_names is None: | ||
| trace_exporter_names = [] | ||
| if metric_exporter_names is None: | ||
|
|
@@ -451,6 +462,7 @@ def _initialize_components( | |
| sampler=sampler, | ||
| resource=resource, | ||
| exporter_args_map=exporter_args_map, | ||
| processor=span_processor, | ||
| ) | ||
| _init_metrics( | ||
| metric_exporters, resource, exporter_args_map=exporter_args_map | ||
|
|
@@ -469,6 +481,7 @@ def _initialize_components( | |
| resource, | ||
| setup_logging_handler, | ||
| exporter_args_map=exporter_args_map, | ||
| processor=log_record_processor, | ||
| ) | ||
|
|
||
|
|
||
|
|
||
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.
This is failing pyright check because
Type[SpanProcessor]does not impose a constructor that takes an exporter as first parameter. Need to type that I guess.