<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: DHEVIKA M</title>
    <description>The latest articles on DEV Community by DHEVIKA M (@dhevika_m).</description>
    <link>https://dev.to/dhevika_m</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4034946%2F72eff03c-05f0-4414-b010-6d0d66225408.jpg</url>
      <title>DEV Community: DHEVIKA M</title>
      <link>https://dev.to/dhevika_m</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dhevika_m"/>
    <language>en</language>
    <item>
      <title>I Built an AI Observability Platform to Understand What Happens Inside LLM Applications</title>
      <dc:creator>DHEVIKA M</dc:creator>
      <pubDate>Sat, 18 Jul 2026 10:56:23 +0000</pubDate>
      <link>https://dev.to/dhevika_m/i-built-an-ai-observability-platform-to-understand-what-happens-inside-llm-applications-1d66</link>
      <guid>https://dev.to/dhevika_m/i-built-an-ai-observability-platform-to-understand-what-happens-inside-llm-applications-1d66</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your AI application is working.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The response is generated.&lt;/li&gt;
&lt;li&gt;The API returns 200.&lt;/li&gt;
&lt;li&gt;The user is happy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;But inside the system, you have no idea what actually happened.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Was the LLM slow?&lt;/li&gt;
&lt;li&gt;Did the agent waste tokens?&lt;/li&gt;
&lt;li&gt;Where did latency come from?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This was the exact problem I faced while building an AI application during the Agents of SigNoz hackathon.&lt;/p&gt;

&lt;p&gt;The AI response was generated successfully, but I had no visibility into the internal execution flow.&lt;/p&gt;

&lt;p&gt;A user only sees:&lt;/p&gt;

&lt;p&gt;"The AI generated a response."&lt;/p&gt;

&lt;p&gt;But as an AI engineer, I need deeper answers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why was the response slow?&lt;/li&gt;
&lt;li&gt;Was the delay caused by my backend or the LLM?&lt;/li&gt;
&lt;li&gt;How many tokens were consumed?&lt;/li&gt;
&lt;li&gt;Which step failed?&lt;/li&gt;
&lt;li&gt;What was the estimated cost of the execution?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This experience made me realize something important:&lt;/p&gt;

&lt;p&gt;Building an AI application is only half the challenge. Understanding its behavior in production is equally important.&lt;/p&gt;

&lt;p&gt;This motivated me to build &lt;strong&gt;ObservEx Lite&lt;/strong&gt;, an AI Agent Observability Platform using &lt;strong&gt;OpenTelemetry and SigNoz&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal was simple:&lt;/p&gt;

&lt;p&gt;Transform AI debugging from guesswork into measurable engineering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem: AI Applications Are Black Boxes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Traditional applications usually have a predictable flow:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    User
                     |
                    API
                     |
                  Database
                     |
                  Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Monitoring these systems is relatively straightforward.&lt;/p&gt;

&lt;p&gt;However, modern AI applications are different.&lt;/p&gt;

&lt;p&gt;An AI workflow can look like:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                  User Request

                     |
                     |

                   AI Agent

                     |
                     |

                 Reasoning Process

                     |
                     |

                  LLM Call

                     |
                     |

                Generated Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Inside this workflow, many things can go wrong:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;LLM latency can increase&lt;/li&gt;
&lt;li&gt;Token usage can become expensive&lt;/li&gt;
&lt;li&gt;A particular AI step can fail&lt;/li&gt;
&lt;li&gt;The model response can become unpredictable&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Traditional monitoring can tell us:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"The API request took 5 seconds."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;But AI developers need answers like:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; "The LLM call consumed most of the latency and used 205 tokens."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This gap is where AI observability becomes necessary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introducing ObservEx Lite&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ObservEx Lite is an observability layer designed specifically for AI workflows.&lt;/p&gt;

&lt;p&gt;It captures the complete lifecycle of an AI request:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI request tracking&lt;/li&gt;
&lt;li&gt;Agent execution flow&lt;/li&gt;
&lt;li&gt;LLM execution traces&lt;/li&gt;
&lt;li&gt;Token consumption&lt;/li&gt;
&lt;li&gt;Cost estimation&lt;/li&gt;
&lt;li&gt;Error tracking&lt;/li&gt;
&lt;li&gt;Performance analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of treating AI as a single API call, ObservEx Lite makes every important execution step visible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;System Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ObservEx Lite is built around an OpenTelemetry-based observability pipeline that connects an AI application with a monitoring platform.&lt;/p&gt;

&lt;p&gt;The architecture has four major layers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. AI Application Layer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A FastAPI-based AI agent receives user requests and executes the AI workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Telemetry Collection Layer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;OpenTelemetry SDK captures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Distributed traces&lt;/li&gt;
&lt;li&gt;Application logs&lt;/li&gt;
&lt;li&gt;AI-specific metadata&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;such as model name, token usage, and execution cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Telemetry Transport Layer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The collected telemetry is exported using the OpenTelemetry Protocol (OTLP).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Observability Layer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SigNoz receives and visualizes the telemetry data through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logs Explorer&lt;/li&gt;
&lt;li&gt;Trace Explorer&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dashboards&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;         User Request
               |
               |
               v

      FastAPI AI Agent

               |
  ----------------------------
  |                          |
  v                          v
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OpenTelemetry Tracing        OpenTelemetry Logging&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;      |                          |
      ----------------------------
                   |
                   v

                OTLP Exporter

                   |
                   v

                SigNoz

    -----------------------------------
    |                |                |
    v                v                v

  Logs            Traces         Dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The key design decision was separating the AI application from the observability backend.&lt;/p&gt;

&lt;p&gt;OpenTelemetry acts as the standard telemetry layer, allowing ObservEx Lite to generate portable telemetry data without being tightly coupled to a single monitoring platform.&lt;/p&gt;

&lt;p&gt;This makes the system easier to extend for future AI applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technology Stack&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;FastAPI&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Observability&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;OpenTelemetry SDK&lt;/li&gt;
&lt;li&gt;OTLP Exporter&lt;/li&gt;
&lt;li&gt;SigNoz&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;AI Monitoring&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;LLM execution tracing&lt;/li&gt;
&lt;li&gt;Token usage tracking&lt;/li&gt;
&lt;li&gt;Latency monitoring&lt;/li&gt;
&lt;li&gt;Cost estimation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Implementation:&lt;/strong&gt;&lt;br&gt;
 &lt;strong&gt;Step 1:FastAPI Instrumentation&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;

&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;opentelemetry&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;trace&lt;/span&gt;
&lt;span class="n"&gt;tracer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;trace&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_tracer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;observex-agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@app.get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ai_agent&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;tracer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start_as_current_span&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ai-agent-request&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;request_span&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;request_span&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_attribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;request.type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AI inference&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;tracer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start_as_current_span&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;llm-call&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;llm_span&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;llm_span&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_attribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;llm.model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-1.5-pro&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;llm_span&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_attribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;llm.provider&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Google&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AI agent response generated&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Adding AI-Specific Metadata&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the biggest learnings from this project was:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI applications require more than traditional application metrics.&lt;/strong&gt;&lt;br&gt;
Traditional monitoring focuses on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;CPU usage&lt;/li&gt;
&lt;li&gt;Memory&lt;/li&gt;
&lt;li&gt;Request count&lt;/li&gt;
&lt;li&gt;Response time&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;AI systems require additional information:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Model name&lt;/li&gt;
&lt;li&gt;Provider&lt;/li&gt;
&lt;li&gt;Input tokens&lt;/li&gt;
&lt;li&gt;Output tokens&lt;/li&gt;
&lt;li&gt;Cost estimation&lt;/li&gt;
&lt;li&gt;Task type&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I added custom OpenTelemetry span attributes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
python

llm_span.set_attribute(
    "llm.model",
    "gemini-1.5-pro"
)
llm_span.set_attribute(
    "llm.provider",
    "Google"
)
llm_span.set_attribute(
    "llm.input_tokens",
    120
)
llm_span.set_attribute(
    "llm.output_tokens",
    85
)

llm_span.set_attribute(
        "llm.total_tokens",
        205
    )
    llm_span.set_attribute(
        "llm.cost_estimate",
        0.002
    )
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now every AI execution contains meaningful intelligence:&lt;/p&gt;

&lt;p&gt;llm.model = gemini-1.5-pro&lt;br&gt;
llm.provider = Google&lt;br&gt;
llm.input_tokens = 120&lt;br&gt;
llm.output_tokens = 85&lt;br&gt;
llm.total_tokens = 205&lt;br&gt;
llm.cost_estimate = 0.002&lt;/p&gt;

&lt;p&gt;This converts an AI call from a black box into measurable data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Implementing Structured AI Logs&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
python

import logging
logger = logging.getLogger("observex")
logger.info(
    "Calling Gemini model",
    extra={
        "model": "gemini-1.5-pro",
        "task": "text-generation"
    }
)
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Along with traces, I added structured application logs.&lt;/p&gt;

&lt;p&gt;The system captures events like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AI request received&lt;/li&gt;
&lt;li&gt;Processing AI agent request&lt;/li&gt;
&lt;li&gt;Calling Gemini model&lt;/li&gt;
&lt;li&gt;LLM response generated&lt;/li&gt;
&lt;li&gt;Request completed successfully&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Logs provide the timeline of what happened during execution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenges I Faced: Making AI Telemetry Actually Useful&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building ObservEx Lite was not only about adding monitoring code. The real challenge was making AI execution understandable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Connecting FastAPI with SigNoz&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first challenge was creating a complete telemetry pipeline.&lt;br&gt;
My FastAPI application was running successfully, but initially the traces were not appearing in SigNoz.&lt;/p&gt;

&lt;p&gt;I had to debug multiple components:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;OpenTelemetry SDK configuration&lt;/li&gt;
&lt;li&gt;OTLP exporter endpoint&lt;/li&gt;
&lt;li&gt;SigNoz collector&lt;/li&gt;
&lt;li&gt;Docker services&lt;/li&gt;
&lt;li&gt;Telemetry ports&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After validating the complete pipeline, my first AI execution trace appeared inside SigNoz.&lt;/p&gt;

&lt;p&gt;That was an important milestone because the AI workflow was no longer invisible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Understanding AI-Specific Observability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Traditional application monitoring focuses on metrics like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Request count&lt;/li&gt;
&lt;li&gt;CPU usage&lt;/li&gt;
&lt;li&gt;Memory usage&lt;/li&gt;
&lt;li&gt;Response latency&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;However, AI applications require additional context.&lt;/p&gt;

&lt;p&gt;A slow AI response could happen because of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Large token generation&lt;/li&gt;
&lt;li&gt;Slow LLM response&lt;/li&gt;
&lt;li&gt;Inefficient agent workflow&lt;/li&gt;
&lt;li&gt;External API delays&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I learned that AI observability requires tracking:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Model information&lt;/li&gt;
&lt;li&gt;Token consumption&lt;/li&gt;
&lt;li&gt;Execution steps&lt;/li&gt;
&lt;li&gt;Latency contribution&lt;/li&gt;
&lt;li&gt;Estimated cost&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Without this information, debugging AI systems becomes guesswork.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Designing Meaningful Telemetry&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Another challenge was deciding what information was actually useful.&lt;/p&gt;

&lt;p&gt;Collecting every possible metric creates noise.&lt;/p&gt;

&lt;p&gt;The important question was:&lt;/p&gt;

&lt;p&gt;"What information would help an AI engineer fix a production issue?"&lt;/p&gt;

&lt;p&gt;This led me to focus on meaningful telemetry:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AI request lifecycle&lt;/li&gt;
&lt;li&gt;LLM execution span&lt;/li&gt;
&lt;li&gt;Token usage&lt;/li&gt;
&lt;li&gt;Cost estimation&lt;/li&gt;
&lt;li&gt;Error events&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This made the observability data more actionable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why I Chose SigNoz&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While building ObservEx Lite, I needed an observability platform that could understand the complete AI execution flow.&lt;/p&gt;

&lt;p&gt;I chose SigNoz because it provides:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. OpenTelemetry Native Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;OpenTelemetry allows applications to generate standard telemetry data without being locked into a specific monitoring platform.&lt;/p&gt;

&lt;p&gt;This allowed ObservEx Lite to use a clean architecture:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                  FastAPI Application
                          |
                    OpenTelemetry
                          |
                         OTLP
                          |
                        SigNoz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;2. Complete Visibility in One Platform&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI debugging requires connecting multiple signals together.&lt;/p&gt;

&lt;p&gt;SigNoz provides:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Traces to understand execution flow&lt;/li&gt;
&lt;li&gt;Logs to understand events&lt;/li&gt;
&lt;li&gt;Dashboards to analyze performance&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of checking different tools, developers can investigate the complete AI lifecycle in one place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Developer-Friendly Debugging&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most valuable feature during this project was trace visualization.&lt;/p&gt;

&lt;p&gt;Instead of seeing:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   Request failed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;I could see:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                  AI Request
                      |
                      |
                   LLM Call
                      |
                      |
                 Response Generated
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This made identifying latency and failures much easier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Debugging Journey&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first challenge was not writing telemetry code.&lt;/p&gt;

&lt;p&gt;The challenge was making telemetry actually flow.&lt;/p&gt;

&lt;p&gt;My application was generating spans, but SigNoz showed no data.&lt;/p&gt;

&lt;p&gt;I verified:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OTLP endpoint configuration&lt;/li&gt;
&lt;li&gt;Port 4317 availability&lt;/li&gt;
&lt;li&gt;SigNoz collector status&lt;/li&gt;
&lt;li&gt;Docker services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After fixing the exporter configuration, my first trace appeared in SigNoz.&lt;/p&gt;

&lt;p&gt;That moment confirmed that my AI workflow was finally observable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Initially:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The FastAPI application was running&lt;/li&gt;
&lt;li&gt;Requests were working&lt;/li&gt;
&lt;li&gt;But traces were not visible inside SigNoz&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;I investigated:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;OpenTelemetry exporter configuration&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;OTLP endpoint&lt;/li&gt;
&lt;li&gt;SigNoz services&lt;/li&gt;
&lt;li&gt;Docker containers&lt;/li&gt;
&lt;li&gt;Telemetry ports&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After debugging the telemetry pipeline, traces started appearing in SigNoz.&lt;/p&gt;

&lt;p&gt;Seeing my first AI execution trace inside SigNoz was the moment the project became real.&lt;/p&gt;

&lt;p&gt;It showed that my AI workflow was no longer invisible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building the SigNoz AI Monitoring Dashboard&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After connecting OpenTelemetry with SigNoz, I created an AI monitoring dashboard.&lt;/p&gt;

&lt;p&gt;The dashboard shows AI request volume, latency, and execution performance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9cxdr4ai9gvunwjetfwm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9cxdr4ai9gvunwjetfwm.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding AI Execution Through Traces&lt;/strong&gt;&lt;br&gt;
The SigNoz Trace Explorer shows the complete AI execution path.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;           ai-agent-request

                  |

                  |

                  └── llm-call

                  |

                  |

           Response Generated
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;p&gt;"Why is my application slow?"&lt;/p&gt;

&lt;p&gt;I can now answer:&lt;/p&gt;

&lt;p&gt;"The LLM execution consumed most of the request time."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Finmtofypckcxvjidkmh7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Finmtofypckcxvjidkmh7.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inspecting LLM Intelligence&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The span details contain AI-specific information:&lt;/p&gt;

&lt;p&gt;Model:&lt;br&gt;
gemini-1.5-pro&lt;/p&gt;

&lt;p&gt;Provider:&lt;br&gt;
Google&lt;/p&gt;

&lt;p&gt;Input Tokens:&lt;br&gt;
120&lt;/p&gt;

&lt;p&gt;Output Tokens:&lt;br&gt;
85&lt;/p&gt;

&lt;p&gt;Total Tokens:&lt;br&gt;
205&lt;/p&gt;

&lt;p&gt;Task:&lt;br&gt;
text-generation&lt;/p&gt;

&lt;p&gt;This information helps with:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cost optimization&lt;/li&gt;
&lt;li&gt;Performance tuning&lt;/li&gt;
&lt;li&gt;Debugging failures&lt;/li&gt;
&lt;li&gt;Understanding AI behavior&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj5tezt6ppg4pig9jkcji.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj5tezt6ppg4pig9jkcji.png" alt=" " width="800" height="359"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7x8ejcdj4d3534slb5gp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7x8ejcdj4d3534slb5gp.png" alt=" " width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monitoring AI Logs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Logs Explorer provides complete visibility into application events.&lt;/p&gt;

&lt;p&gt;Example events:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AI request received&lt;/li&gt;
&lt;li&gt;Calling Gemini model&lt;/li&gt;
&lt;li&gt;LLM response generated&lt;/li&gt;
&lt;li&gt;Request completed successfully&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc1j14wqkrf7171sc1cit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc1j14wqkrf7171sc1cit.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance Analysis Using Flamegraphs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Flamegraphs help identify where execution time is spent.&lt;/p&gt;

&lt;p&gt;For AI applications, this answers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Is the agent workflow slow?&lt;/li&gt;
&lt;li&gt;Is the LLM response delayed?&lt;/li&gt;
&lt;li&gt;Which component requires optimization?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7msg9gaylknckdvp2wbx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7msg9gaylknckdvp2wbx.png" alt=" " width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;** Why ObservEx Lite Is Different**&lt;/p&gt;

&lt;p&gt;Traditional monitoring tells developers:&lt;/p&gt;

&lt;p&gt;"Your API took 3 seconds."&lt;/p&gt;

&lt;p&gt;ObservEx Lite provides AI-specific answers:&lt;/p&gt;

&lt;p&gt;"The LLM call took 2 seconds, consumed 205 tokens, and contributed most of the latency."&lt;/p&gt;

&lt;p&gt;The difference is visibility.&lt;/p&gt;

&lt;p&gt;AI systems are not just APIs anymore.&lt;/p&gt;

&lt;p&gt;They are intelligent workflows that require intelligent monitoring.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Learned&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project changed my perspective on AI engineering.&lt;/p&gt;

&lt;p&gt;Before building ObservEx Lite, I focused mainly on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Model integration&lt;/li&gt;
&lt;li&gt;Prompt engineering&lt;/li&gt;
&lt;li&gt;Application functionality&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After this project, I learned that production AI systems also require:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Observability&lt;/li&gt;
&lt;li&gt;Reliability&lt;/li&gt;
&lt;li&gt;Performance analysis&lt;/li&gt;
&lt;li&gt;Cost awareness&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;An AI system is not production-ready until developers understand what happens inside it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Future Improvements&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Real LLM Provider Integration&lt;/li&gt;
&lt;li&gt;Multi-Agent Workflow Visualization&lt;/li&gt;
&lt;li&gt;AI Cost Analytics Dashboard&lt;/li&gt;
&lt;li&gt;Automated Anomaly Detection&lt;/li&gt;
&lt;li&gt;Cloud-Native Deployment&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ObservEx Lite demonstrates how OpenTelemetry and SigNoz can bring production-grade observability to AI applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instead of asking:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"Why is my AI application slow?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developers can answer:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"The LLM call took 2 seconds, used 205 tokens, and caused most of the latency."&lt;/p&gt;

&lt;p&gt;By combining logs, traces, and AI metadata, ObservEx Lite transforms AI debugging from guesswork into measurable engineering.&lt;/p&gt;

&lt;p&gt;The future of AI engineering is not only building smarter models.&lt;/p&gt;

&lt;p&gt;It is building AI systems that we can understand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Repository&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/DHEVIKA/Hackathon" rel="noopener noreferrer"&gt;https://github.com/DHEVIKA/Hackathon&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opentelemetry</category>
      <category>python</category>
      <category>observability</category>
    </item>
  </channel>
</rss>
