<?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: subanu-dev</title>
    <description>The latest articles on DEV Community by subanu-dev (@subanudev).</description>
    <link>https://dev.to/subanudev</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%2F4048235%2F49e9ed04-2658-422e-8562-627137bb1bd0.png</url>
      <title>DEV Community: subanu-dev</title>
      <link>https://dev.to/subanudev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/subanudev"/>
    <language>en</language>
    <item>
      <title># Building an SRE Sidekick: an AI agent that reads, acts on, and observes SigNoz</title>
      <dc:creator>subanu-dev</dc:creator>
      <pubDate>Sun, 26 Jul 2026 18:03:34 +0000</pubDate>
      <link>https://dev.to/subanudev/-building-an-sre-sidekick-an-ai-agent-that-reads-acts-on-and-observes-signoz-42hc</link>
      <guid>https://dev.to/subanudev/-building-an-sre-sidekick-an-ai-agent-that-reads-acts-on-and-observes-signoz-42hc</guid>
      <description>&lt;p&gt;&lt;em&gt;My submission for the Agents of SigNoz hackathon (Track 1 — AI &amp;amp; Agent Observability).&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: we bolt AI agents onto everything, then fly blind
&lt;/h2&gt;

&lt;p&gt;AI agents now chain LLM calls and call tools autonomously. When one gets slow, expensive, or&lt;br&gt;
wrong in production, you're stuck — you can't debug what you can't see.&lt;br&gt;
Meanwhile the on-call engineer &lt;em&gt;already&lt;/em&gt; drowns in dashboards. Adding an opaque AI agent on&lt;br&gt;
top usually makes observability worse, not better.&lt;/p&gt;

&lt;p&gt;So for the &lt;strong&gt;Agents of SigNoz&lt;/strong&gt; hackathon I asked: what if the AI agent were the &lt;em&gt;opposite&lt;/em&gt;&lt;br&gt;
of a black box? What if it &lt;strong&gt;read your observability data to help you&lt;/strong&gt;, &lt;strong&gt;took actions to&lt;br&gt;
fix your monitoring&lt;/strong&gt;, and was &lt;strong&gt;itself fully observable in the same platform&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;That's &lt;strong&gt;SRE Sidekick&lt;/strong&gt; — an AI agent that turns "hunt through ten dashboards" into "ask one&lt;br&gt;
question," and that you can watch working, trace by trace, inside SigNoz.&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%2Fpszbwusyng5sxydxxh2w.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%2Fpszbwusyng5sxydxxh2w.png" alt=" " width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Investigate&lt;/strong&gt; — ask &lt;em&gt;"which service is slow right now?"&lt;/em&gt; in plain English; it queries real
traces/metrics/logs through the &lt;strong&gt;SigNoz MCP server&lt;/strong&gt; and answers with specifics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Act (with approval)&lt;/strong&gt; — it can import an APM dashboard or create a threshold alert, gated by
a human-in-the-loop &lt;strong&gt;Approve / Reject&lt;/strong&gt; step (the agent pauses and waits for your click)
before any change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observe itself&lt;/strong&gt; — every agent run, LLM call, and tool call is an OpenTelemetry span; token
usage and estimated cost follow the GenAI semantic conventions. The agent shows up in SigNoz
as a service called &lt;code&gt;sre-sidekick&lt;/code&gt;, right next to the app it's debugging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Close the loop&lt;/strong&gt; — when a SigNoz alert fires, a webhook triggers the agent to
auto-investigate and post a root-cause hypothesis.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  How I used SigNoz
&lt;/h2&gt;

&lt;p&gt;SRE Sidekick leans on SigNoz across the board — traces, metrics, logs, dashboards, alerts, and the MCP server. Here's how each piece fits.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Reproducible install with Foundry
&lt;/h3&gt;

&lt;p&gt;SigNoz + its MCP server come up from a single &lt;code&gt;casting.yaml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1alpha1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Installation&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;signoz&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;deployment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;docker&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;flavor&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;compose&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;mcp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://signoz.io/foundry.sh | bash
foundryctl cast &lt;span class="nt"&gt;-f&lt;/span&gt; casting.yaml   &lt;span class="c"&gt;# SigNoz UI + MCP server, one command&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. The agent's brain and hands
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;brain&lt;/strong&gt; is a Groq-hosted LLM (the &lt;code&gt;gpt-oss&lt;/code&gt; family; the provider is swappable via one env&lt;br&gt;
var — Ollama or any hosted model). The &lt;strong&gt;hands&lt;/strong&gt; are the 41 tools the SigNoz MCP server&lt;br&gt;
exposes. My code is the nervous&lt;br&gt;
system connecting them in a loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;think (LLM picks a tool) → act (call it via MCP) → observe (feed result back) → repeat → answer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nobody hard-codes the sequence — the LLM decides each step. That autonomy is what makes it an&lt;br&gt;
&lt;em&gt;agent&lt;/em&gt; rather than a chatbot.&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%2Ff5r5vbdvwa2dus606iil.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%2Ff5r5vbdvwa2dus606iil.png" alt=" " width="800" height="251"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  3. The self-observability loop (my favourite part)
&lt;/h3&gt;

&lt;p&gt;The agent instruments &lt;em&gt;itself&lt;/em&gt; with OpenTelemetry and exports to the same SigNoz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&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;agent.run&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="bp"&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;span&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;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;gen_ai.usage.input_tokens&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;in_tok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;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;gen_ai.usage.output_tokens&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;out_tok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;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;gen_ai.usage.cost_usd&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open SigNoz → Services and &lt;code&gt;sre-sidekick&lt;/code&gt; is right there. Open a trace and you see&lt;br&gt;
&lt;code&gt;agent.run → llm.call → tool.signoz_*&lt;/code&gt;, each carrying token counts and cost. &lt;strong&gt;The agent that&lt;br&gt;
reads observability is itself observable.&lt;/strong&gt;&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%2Fzm8t5sm77s8c7tavibcy.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%2Fzm8t5sm77s8c7tavibcy.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&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%2Fkd9t0ws59h1wm7vl5cq8.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%2Fkd9t0ws59h1wm7vl5cq8.png" alt=" " width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also wired &lt;strong&gt;logs&lt;/strong&gt; through OpenTelemetry so each step logs a line correlated to its trace,&lt;br&gt;
and built a small &lt;strong&gt;"Agent Health" dashboard&lt;/strong&gt; of token usage and cost over time — completing&lt;br&gt;
traces + metrics + logs + dashboards for the agent itself.&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%2Fa34j1gasalyxtzb60ohi.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%2Fa34j1gasalyxtzb60ohi.png" alt=" " width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Acting on SigNoz, safely
&lt;/h3&gt;

&lt;p&gt;Read tools run autonomously; &lt;strong&gt;write&lt;/strong&gt; tools (import dashboard, create alert) pause and wait for&lt;br&gt;
an explicit &lt;strong&gt;Approve / Reject&lt;/strong&gt; from the user before executing. This models responsible agent&lt;br&gt;
autonomy — the agent never silently mutates your monitoring.&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%2Fuvs6r5780h1no3ioabg7.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%2Fuvs6r5780h1no3ioabg7.png" alt=" " width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Alert → auto-diagnose
&lt;/h3&gt;

&lt;p&gt;The alert I create routes to a webhook on the agent's own server. When it fires, the agent&lt;br&gt;
spins up a fresh investigation and posts a root-cause hypothesis — a closed detect→diagnose loop.&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%2Futpd8ea72l2zxoxtx60h.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%2Futpd8ea72l2zxoxtx60h.png" alt=" " width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What worked, and what fought back
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What worked:&lt;/strong&gt; grounding every answer in real MCP tool calls made the agent reliable even on mid-size model — the intelligence comes from the data, not just the LLM.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What fought back (and what I learned):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Too many tools overflow the context.&lt;/strong&gt; Exposing all 41 MCP tools at once blew the model's request budget (~43k tokens in one call). Curating to ~10 sharp tools and stripping verbose schema descriptions (down to ~1.4k tokens) made it cheaper and better at picking the right tool.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The agent answered from memory.&lt;/strong&gt; With a running conversation it sometimes answered from earlier context instead of querying live data — so it looked like it wasn't using SigNoz at all. Giving each question a fresh context forced a real tool call every time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Wrong-looking numbers.&lt;/strong&gt; SigNoz returns span durations in nanoseconds and error rate as a&lt;br&gt;
percentage; my first version mislabelled units. I moved the conversion into code (not the LLM)&lt;br&gt;
so the numbers are always correct.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Complex write APIs.&lt;/strong&gt; The &lt;code&gt;create_dashboard&lt;/code&gt;/&lt;code&gt;create_alert&lt;/code&gt; payloads are deep, and the model&lt;br&gt;
mis-formatted them. I wrapped them in tiny, hard-to-misuse tools that assemble the correct&lt;br&gt;
payload in Python — a reliability pattern I'll reuse.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Shared context bug.&lt;/strong&gt; The auto-diagnosis first reused the chat agent's history and looped to&lt;br&gt;
the step limit; giving it a fresh agent fixed it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it / links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code:&lt;/strong&gt; &lt;a href="https://github.com/subanu-dev/sre-sidekick" rel="noopener noreferrer"&gt;https://github.com/subanu-dev/sre-sidekick&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demo:&lt;/strong&gt; &lt;a href="https://youtu.be/9qD_TGXIbYs" rel="noopener noreferrer"&gt;https://youtu.be/9qD_TGXIbYs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built with Python, OpenTelemetry, the SigNoz MCP server, and Foundry. &lt;em&gt;This project was built&lt;br&gt;
with the assistance of Claude Code (Anthropic) as an AI coding assistant for coding and&lt;br&gt;
documentation; all architecture, testing, and integration were directed and verified by me.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;SigNoz gives you the platform and the MCP tools; the fun is in building an agent that &lt;em&gt;wields&lt;/em&gt;&lt;br&gt;
them — and, in the spirit of the hackathon, &lt;strong&gt;making the agent observe itself.&lt;/strong&gt; If you can't&lt;br&gt;
observe your agents, you don't own them. SRE Sidekick makes them fully visible.&lt;/p&gt;

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