Semantic Kernel Observability - Monitor AI Orchestration Semantic Kernel now supports observability via OpenTelemetry, enabling monitoring of AI orchestration with logs, traces, and metrics exported to SigNoz. The integration provides real-time visibility into latency, error rates, and usage trends for AI workflows. Developers can set up automatic instrumentation with environment variables to capture sensitive or non-sensitive telemetry data. Overview This guide walks you through setting up observability and monitoring for Semantic Kernel using OpenTelemetry https://opentelemetry.io/ and exporting logs, traces, and metrics to SigNoz. With this integration, you can observe various models performance, capture request/response details, and track system-level metrics in SigNoz, giving you real-time visibility into latency, error rates, and usage trends for your Semantic Kernel applications. Instrumenting Semantic Kernel in your AI applications with telemetry ensures full observability across your AI workflows, making it easier to debug issues, optimize performance, and understand user interactions. By leveraging SigNoz, you can analyze correlated traces, logs, and metrics in unified dashboards, configure alerts, and gain actionable insights to continuously improve reliability, responsiveness, and user experience. Prerequisites - A SigNoz Cloud account https://signoz.io/teams/ with an active ingestion key - Internet access to send telemetry data to SigNoz Cloud - Python 3.10+ with Semantic Kernel installed - For Python: pip installed for managing Python packages and optional but recommended a Python virtual environment to isolate dependencies Monitoring Semantic Kernel For more detailed info on tracing your Semantic Kernel applications click here https://learn.microsoft.com/en-us/semantic-kernel/concepts/enterprise-readiness/observability/telemetry-with-console?tabs=Bash-CreatFile%2CBash-EnvironmentVariable&pivots=programming-language-python . For more detailed info on Semantic Kernel telemetry data click here https://learn.microsoft.com/en-us/semantic-kernel/concepts/enterprise-readiness/observability/?pivots=programming-language-python . No-code auto-instrumentation is recommended for quick setup with minimal code changes. It's ideal when you want to get observability up and running without modifying your application code and are leveraging standard instrumentor libraries. Step 1: Install the necessary packages in your Python environment. pip install \ opentelemetry-distro \ opentelemetry-exporter-otlp \ httpx \ opentelemetry-instrumentation-httpx \ opentelemetry-instrumentation-system-metrics \ semantic-kernel Step 2: Add Automatic Instrumentation opentelemetry-bootstrap --action=install Step 3: Instrument your Semantic Kernel application By default, the kernel doesn't emit spans for the AI connectors, because these spans carry gen ai attributes that are considered experimental. To enable the feature, you can set one of the following environment variables: SEMANTICKERNEL EXPERIMENTAL GENAI ENABLE OTEL DIAGNOSTICS=true - Emits non-sensitive data model name, operation name, token usage SEMANTICKERNEL EXPERIMENTAL GENAI ENABLE OTEL DIAGNOSTICS SENSITIVE=true - Emits all telemetry including sensitive data prompts and completions In this guide, we use the sensitive variant for comprehensive observability: export SEMANTICKERNEL EXPERIMENTAL GENAI ENABLE OTEL DIAGNOSTICS SENSITIVE=true Step 4: Run an example python from semantic kernel import Kernel from semantic kernel.connectors.ai.open ai import OpenAIChatCompletion from semantic kernel.prompt template import InputVariable, PromptTemplateConfig import asyncio import logging import os async def main : kernel = Kernel kernel.add service OpenAIChatCompletion ai model id="gpt-4.1", api key=os.getenv "OPENAI API KEY" prompt = """{{$input}} Answer the question above. """ prompt template config = PromptTemplateConfig template=prompt, name="summarize", template format="semantic-kernel", input variables= InputVariable name="input", description="The user input", is required=True , summarize = kernel.add function function name="summarizeFunc", plugin name="summarizePlugin", prompt template config=prompt template config, input text = "What is SigNoz?" summary = await kernel.invoke summarize, input=input text print summary if name == " main ": asyncio.run main πŸ“Œ Note: Before running this code, ensure that you have set the environment variable OPENAI API KEY with your generated API key. Step 5: Run your application with auto-instrumentation OTEL RESOURCE ATTRIBUTES="service.name=