-
Notifications
You must be signed in to change notification settings - Fork 841
opentelemetry-sdk: sketch of an OpAMP integration #4646
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 |
|---|---|---|
|
|
@@ -491,6 +491,18 @@ def _import_id_generator(id_generator_name: str) -> IdGenerator: | |
| raise RuntimeError(f"{id_generator_name} is not an IdGenerator") | ||
|
|
||
|
|
||
| def _import_opamp() -> callable[[...], None]: | ||
| # this in development, at the moment we are looking for a callable that takes | ||
| # the resource and instantiate an OpAMP agent. | ||
| # Since configuration is not specified every implementors may have its own. | ||
| # Refer to opentelemetry-opamp-client package on how to setup the OpAMP agent. | ||
| _, opamp_init_func = _import_config_components( | ||
|
Member
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. Would it be better to read and handle the entry point directly here rather than use |
||
| ["init_function"], "_opentelemetry_opamp" | ||
| )[0] | ||
|
|
||
| return opamp_init_func | ||
|
|
||
|
|
||
| def _initialize_components( | ||
| auto_instrumentation_version: str | None = None, | ||
| trace_exporter_names: list[str] | None = None, | ||
|
|
@@ -543,6 +555,17 @@ def _initialize_components( | |
| # from the env variable else defaults to "unknown_service" | ||
| resource = Resource.create(resource_attributes) | ||
|
|
||
| # OpAMP is a system created to configure OpenTelemetry SDKs with a remote config. | ||
| # This is different than other init helpers because setting up OpAMP requires distro | ||
| # provided code as it's not strictly specified. We call OpAMP init before other code | ||
|
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. In my distro I initialize the OpAMP client after the sdk has been setup but can't exclude other scenarios
Member
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. Should we add this a SIG topic to get the execution order? |
||
| # because people may want to have it blocking to get an updated config before setting | ||
| # up the rest of the SDK. | ||
| try: | ||
| _init_opamp = _import_opamp() | ||
| _init_opamp(resource=resource) | ||
|
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. Is it possible for |
||
| except RuntimeError: | ||
| _logger.debug("No OpAMP init function found") | ||
|
|
||
| _init_tracing( | ||
| exporters=span_exporters, | ||
| id_generator=id_generator, | ||
|
|
||
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.
callableis a builtin function, not a valid type, right?I think this should be
Callable[..., None]usingcollections.abc. You'll need to add it to the imports.