From 6490c8224b9e9a74f415d27e814807c0a1d5d363 Mon Sep 17 00:00:00 2001 From: Sinto Sajeev Date: Tue, 4 Mar 2025 02:37:50 -0800 Subject: [PATCH 1/2] Added telemetry.py in forms-flow-api-utils --- .../src/formsflow_api_utils/utils/__init__.py | 1 + .../formsflow_api_utils/utils/telemetry.py | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 forms-flow-api-utils/src/formsflow_api_utils/utils/telemetry.py diff --git a/forms-flow-api-utils/src/formsflow_api_utils/utils/__init__.py b/forms-flow-api-utils/src/formsflow_api_utils/utils/__init__.py index c580c797c..9b993da41 100644 --- a/forms-flow-api-utils/src/formsflow_api_utils/utils/__init__.py +++ b/forms-flow-api-utils/src/formsflow_api_utils/utils/__init__.py @@ -60,3 +60,4 @@ from .sentry import init_sentry from .formio import generate_formio_patch_request from .test_utils import get_token +from .telemetry import setup_tracing diff --git a/forms-flow-api-utils/src/formsflow_api_utils/utils/telemetry.py b/forms-flow-api-utils/src/formsflow_api_utils/utils/telemetry.py new file mode 100644 index 000000000..0257d1311 --- /dev/null +++ b/forms-flow-api-utils/src/formsflow_api_utils/utils/telemetry.py @@ -0,0 +1,36 @@ +"""This exposes Opentelemetry service.""" + +import os + +from opentelemetry import trace +from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import ( + OTLPSpanExporter, +) +from opentelemetry.instrumentation.flask import FlaskInstrumentor +from opentelemetry.instrumentation.requests import RequestsInstrumentor +from opentelemetry.sdk.resources import Resource +from opentelemetry.sdk.trace import TracerProvider +from opentelemetry.sdk.trace.export import BatchSpanProcessor + + +def setup_tracing(app, service_name): + """Sets up OpenTelemetry tracing for the application.""" + # Check if OpenTelemetry tracing is enabled + if os.getenv("ENABLE_OPENTELEMETRY", "false").lower() != "true": + print("OpenTelemetry tracing is disabled.") + return + + resource = Resource.create({"service.name": service_name}) + trace_provider = TracerProvider(resource=resource) + trace.set_tracer_provider(trace_provider) + + # Configure the OTLP exporter to send data to the OpenTelemetry Collector + otlp_endpoint = os.getenv("OTLP_ENDPOINT") + otlp_exporter = OTLPSpanExporter(endpoint=otlp_endpoint, insecure=True) + + # Add the OTLP exporter to the tracer provider + otlp_span_processor = BatchSpanProcessor(otlp_exporter) + trace_provider.add_span_processor(otlp_span_processor) + + FlaskInstrumentor().instrument_app(app) + RequestsInstrumentor().instrument() From 657f3cd20739a5dc1175af8911fdf5104318e11e Mon Sep 17 00:00:00 2001 From: Sinto Sajeev <115780473+sinto-aot@users.noreply.github.com> Date: Wed, 5 Mar 2025 23:08:27 -0800 Subject: [PATCH 2/2] Update telemetry.py --- forms-flow-api-utils/src/formsflow_api_utils/utils/telemetry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forms-flow-api-utils/src/formsflow_api_utils/utils/telemetry.py b/forms-flow-api-utils/src/formsflow_api_utils/utils/telemetry.py index 0257d1311..6b2619ca5 100644 --- a/forms-flow-api-utils/src/formsflow_api_utils/utils/telemetry.py +++ b/forms-flow-api-utils/src/formsflow_api_utils/utils/telemetry.py @@ -17,7 +17,7 @@ def setup_tracing(app, service_name): """Sets up OpenTelemetry tracing for the application.""" # Check if OpenTelemetry tracing is enabled if os.getenv("ENABLE_OPENTELEMETRY", "false").lower() != "true": - print("OpenTelemetry tracing is disabled.") + app.logger.info("OpenTelemetry tracing is disabled.") return resource = Resource.create({"service.name": service_name})