-
-
Save msoltysik/b6195fc9ebe5ebc585d3a01fc6307921 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import gc | |
import logging | |
import weakref | |
from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter | |
from opentelemetry.instrumentation.logging import LoggingInstrumentor | |
from opentelemetry.sdk.metrics import MeterProvider | |
from opentelemetry.sdk.metrics._internal.export import PeriodicExportingMetricReader | |
LoggingInstrumentor().instrument(set_logging_format=True, log_level=logging.DEBUG) | |
def main(): | |
# setup_otlp_exporter | |
otlp_exporter = OTLPMetricExporter(endpoint="http://localhost:4318/v1/metrics") | |
otlp_exporter_weakref = weakref.ref(otlp_exporter) | |
reader = PeriodicExportingMetricReader(otlp_exporter, export_interval_millis=5000) | |
reader_weakref = weakref.ref(reader) | |
provider = MeterProvider(metric_readers=[reader]) | |
provider_weakref = weakref.ref(provider) | |
# cleanup_metrics | |
if hasattr(reader, "_collector"): | |
reader._collector.collect() # Force collection | |
if hasattr(reader, "shutdown"): | |
reader.shutdown() | |
provider.shutdown() | |
del otlp_exporter | |
del reader | |
del provider | |
gc.collect() | |
if otlp_exporter_weakref() is not None: | |
logging.warning("OTLP EXPORTER was not properly garbage collected") | |
referrers = gc.get_referrers(reader_weakref()) | |
logging.debug(f"Direct referrers to OTLP EXPORTER: {len(referrers)}") | |
for ref in referrers: | |
logging.debug(f"OTLP EXPORTER referrer {str(ref)} type: {type(ref)}") | |
else: | |
logging.info("OTLP EXPORTER was properly garbage collected") | |
if reader_weakref() is not None: | |
logging.warning("READER was not properly garbage collected") | |
referrers = gc.get_referrers(reader_weakref()) | |
logging.debug(f"Direct referrers to READER: {len(referrers)}") | |
for ref in referrers: | |
logging.debug(f"READER referrer {str(ref)} type: {type(ref)}") | |
else: | |
logging.info("READER was properly garbage collected") | |
if provider_weakref() is not None: | |
logging.warning("PROVIDER was not properly garbage collected") | |
referrers = gc.get_referrers(reader_weakref()) | |
logging.debug(f"Direct referrers to PROVIDER: {len(referrers)}") | |
for ref in referrers: | |
logging.debug(f"PROVIDER referrer {str(ref)} type: {type(ref)}") | |
else: | |
logging.info("PROVIDER was properly garbage collected") | |
if __name__ == "__main__": | |
main() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2024-10-10 07:37:18,761 WARNING [opentelemetry.sdk.metrics._internal.export] [__init__.py:556] [trace_id=0 span_id=0 resource.service.name= trace_sampled=False] - Can't shutdown multiple times | |
2024-10-10 07:37:18,766 WARNING [root] [reproduce.py:38] [trace_id=0 span_id=0 resource.service.name= trace_sampled=False] - OTLP EXPORTER was not properly garbage collected | |
2024-10-10 07:37:18,766 DEBUG [root] [reproduce.py:40] [trace_id=0 span_id=0 resource.service.name= trace_sampled=False] - Direct referrers to OTLP EXPORTER: 4 | |
2024-10-10 07:37:18,766 DEBUG [root] [reproduce.py:42] [trace_id=0 span_id=0 resource.service.name= trace_sampled=False] - OTLP EXPORTER referrer {<opentelemetry.sdk.metrics._internal.export.PeriodicExportingMetricReader object at 0x1063d4d10>} type: <class 'set'> | |
2024-10-10 07:37:18,766 DEBUG [root] [reproduce.py:42] [trace_id=0 span_id=0 resource.service.name= trace_sampled=False] - OTLP EXPORTER referrer <bound method PeriodicExportingMetricReader._at_fork_reinit of <opentelemetry.sdk.metrics._internal.export.PeriodicExportingMetricReader object at 0x1063d4d10>> type: <class 'method'> | |
2024-10-10 07:37:18,766 DEBUG [root] [reproduce.py:42] [trace_id=0 span_id=0 resource.service.name= trace_sampled=False] - OTLP EXPORTER referrer {<opentelemetry.sdk.metrics._internal.export.PeriodicExportingMetricReader object at 0x1063d4d10>: <opentelemetry.sdk.metrics._internal.metric_reader_storage.MetricReaderStorage object at 0x1063d5520>} type: <class 'dict'> | |
2024-10-10 07:37:18,766 DEBUG [root] [reproduce.py:42] [trace_id=0 span_id=0 resource.service.name= trace_sampled=False] - OTLP EXPORTER referrer [<opentelemetry.sdk.metrics._internal.export.PeriodicExportingMetricReader object at 0x1063d4d10>] type: <class 'list'> | |
2024-10-10 07:37:18,766 WARNING [root] [reproduce.py:47] [trace_id=0 span_id=0 resource.service.name= trace_sampled=False] - READER was not properly garbage collected | |
2024-10-10 07:37:18,767 DEBUG [root] [reproduce.py:49] [trace_id=0 span_id=0 resource.service.name= trace_sampled=False] - Direct referrers to READER: 4 | |
2024-10-10 07:37:18,767 DEBUG [root] [reproduce.py:51] [trace_id=0 span_id=0 resource.service.name= trace_sampled=False] - READER referrer {<opentelemetry.sdk.metrics._internal.export.PeriodicExportingMetricReader object at 0x1063d4d10>} type: <class 'set'> | |
2024-10-10 07:37:18,767 DEBUG [root] [reproduce.py:51] [trace_id=0 span_id=0 resource.service.name= trace_sampled=False] - READER referrer <bound method PeriodicExportingMetricReader._at_fork_reinit of <opentelemetry.sdk.metrics._internal.export.PeriodicExportingMetricReader object at 0x1063d4d10>> type: <class 'method'> | |
2024-10-10 07:37:18,767 DEBUG [root] [reproduce.py:51] [trace_id=0 span_id=0 resource.service.name= trace_sampled=False] - READER referrer {<opentelemetry.sdk.metrics._internal.export.PeriodicExportingMetricReader object at 0x1063d4d10>: <opentelemetry.sdk.metrics._internal.metric_reader_storage.MetricReaderStorage object at 0x1063d5520>} type: <class 'dict'> | |
2024-10-10 07:37:18,767 DEBUG [root] [reproduce.py:51] [trace_id=0 span_id=0 resource.service.name= trace_sampled=False] - READER referrer [<opentelemetry.sdk.metrics._internal.export.PeriodicExportingMetricReader object at 0x1063d4d10>] type: <class 'list'> | |
2024-10-10 07:37:18,767 INFO [root] [reproduce.py:62] [trace_id=0 span_id=0 resource.service.name= trace_sampled=False] - PROVIDER was properly garbage collected |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment