diff --git a/api/enterprise/telemetry/enterprise_trace.py b/api/enterprise/telemetry/enterprise_trace.py index 4370ede15e..92d21b7b9a 100644 --- a/api/enterprise/telemetry/enterprise_trace.py +++ b/api/enterprise/telemetry/enterprise_trace.py @@ -491,15 +491,15 @@ class EnterpriseOtelTrace: labels = self._labels( tenant_id=tenant_id or "", app_id=app_id or "", - model_provider=metadata.get("ls_provider", ""), - model_name=metadata.get("ls_model_name", ""), + model_provider=metadata.get("ls_provider") or "", + model_name=metadata.get("ls_model_name") or "", ) token_labels = TokenMetricLabels( tenant_id=tenant_id or "", app_id=app_id or "", operation_type=OperationType.MESSAGE, - model_provider=metadata.get("ls_provider", ""), - model_name=metadata.get("ls_model_name", ""), + model_provider=metadata.get("ls_provider") or "", + model_name=metadata.get("ls_model_name") or "", node_type="", ).to_dict() self._exporter.increment_counter(EnterpriseTelemetryCounter.TOKENS, info.total_tokens, token_labels) diff --git a/api/extensions/ext_otel.py b/api/extensions/ext_otel.py index fce5736032..f27e467801 100644 --- a/api/extensions/ext_otel.py +++ b/api/extensions/ext_otel.py @@ -66,12 +66,20 @@ def init_app(app: DifyApp): exporter = GRPCSpanExporter( endpoint=endpoint, # Header field names must consist of lowercase letters, check RFC7540 - headers=((("authorization", f"Bearer {dify_config.OTLP_API_KEY}"),) if dify_config.OTLP_API_KEY else None), + headers=( + ( + ("authorization", f"Bearer {dify_config.OTLP_API_KEY}"), + ) if dify_config.OTLP_API_KEY else None + ), insecure=insecure, ) metric_exporter = GRPCMetricExporter( endpoint=endpoint, - headers=((("authorization", f"Bearer {dify_config.OTLP_API_KEY}"),) if dify_config.OTLP_API_KEY else None), + headers=( + ( + ("authorization", f"Bearer {dify_config.OTLP_API_KEY}"), + ) if dify_config.OTLP_API_KEY else None + ), insecure=insecure, ) else: diff --git a/api/tasks/ops_trace_task.py b/api/tasks/ops_trace_task.py index 5b61e9e7a1..3d3a9755a5 100644 --- a/api/tasks/ops_trace_task.py +++ b/api/tasks/ops_trace_task.py @@ -51,7 +51,7 @@ def process_trace_tasks(file_info): try: EnterpriseOtelTrace().trace(trace_info) except Exception: - logger.warning("Enterprise trace failed for app_id: %s", app_id, exc_info=True) + logger.exception("Enterprise trace failed for app_id: %s", app_id) if trace_instance: with current_app.app_context(): diff --git a/api/tests/unit_tests/enterprise/telemetry/test_exporter.py b/api/tests/unit_tests/enterprise/telemetry/test_exporter.py index 8f052516e1..f207ff672b 100644 --- a/api/tests/unit_tests/enterprise/telemetry/test_exporter.py +++ b/api/tests/unit_tests/enterprise/telemetry/test_exporter.py @@ -142,6 +142,7 @@ def test_https_endpoint_uses_secure_grpc(mock_metric_exporter: MagicMock, mock_s assert mock_metric_exporter.call_args is not None assert mock_metric_exporter.call_args.kwargs["insecure"] is False + @patch("enterprise.telemetry.exporter.GRPCSpanExporter") @patch("enterprise.telemetry.exporter.GRPCMetricExporter") def test_http_endpoint_uses_insecure_grpc(mock_metric_exporter: MagicMock, mock_span_exporter: MagicMock) -> None: @@ -165,6 +166,7 @@ def test_http_endpoint_uses_insecure_grpc(mock_metric_exporter: MagicMock, mock_ assert mock_metric_exporter.call_args is not None assert mock_metric_exporter.call_args.kwargs["insecure"] is True + @patch("enterprise.telemetry.exporter.HTTPSpanExporter") @patch("enterprise.telemetry.exporter.HTTPMetricExporter") def test_insecure_not_passed_to_http_exporters(mock_metric_exporter: MagicMock, mock_span_exporter: MagicMock) -> None: