<?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: chaarvilakshmisai-oss</title>
    <description>The latest articles on DEV Community by chaarvilakshmisai-oss (@chaarvilakshmisaioss).</description>
    <link>https://dev.to/chaarvilakshmisaioss</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%2F4047765%2F8921f9b4-794a-4877-9766-af6cc231e10f.png</url>
      <title>DEV Community: chaarvilakshmisai-oss</title>
      <link>https://dev.to/chaarvilakshmisaioss</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chaarvilakshmisaioss"/>
    <language>en</language>
    <item>
      <title>Teaching a Free, Fast LLM to Watch My Cluster With SigNoz — So It Could Tell Me What's Wrong Before I Asked</title>
      <dc:creator>chaarvilakshmisai-oss</dc:creator>
      <pubDate>Sun, 26 Jul 2026 10:12:50 +0000</pubDate>
      <link>https://dev.to/chaarvilakshmisaioss/teaching-a-free-fast-llm-to-watch-my-cluster-with-signoz-so-it-could-tell-me-whats-wrong-before-575m</link>
      <guid>https://dev.to/chaarvilakshmisaioss/teaching-a-free-fast-llm-to-watch-my-cluster-with-signoz-so-it-could-tell-me-whats-wrong-before-575m</guid>
      <description>&lt;p&gt;Monitoring That Doesn't Wait to Be Asked&lt;/p&gt;

&lt;p&gt;Most "AI observability" demos wait for you to ask a question. Mine doesn't.&lt;br&gt;
Every five minutes, my agent checks a live SigNoz instance on its own, and&lt;br&gt;
only speaks up when something's actually broken — with a proposed fix&lt;br&gt;
already attached. If you've ever wanted your monitoring to tell you about a&lt;br&gt;
problem before you opened the dashboard, this is the build log: what I made,&lt;br&gt;
what actually broke while building it, and the three categories of pain that&lt;br&gt;
ate almost all my time.&lt;/p&gt;

&lt;p&gt;Why SigNoz's MCP Server Was the Right Foundation&lt;/p&gt;

&lt;p&gt;I called the agent &lt;strong&gt;Sidekick&lt;/strong&gt;. The goal was narrow on purpose: an agent&lt;br&gt;
that &lt;br&gt;
(1) answers real questions about a real running system — "why is&lt;br&gt;
checkout slow?" — by actually querying live data instead of guessing, and&lt;br&gt;
(2) checks in on its own, unprompted, and only interrupts me when it's&lt;br&gt;
found something worth knowing.&lt;/p&gt;

&lt;p&gt;SigNoz was the right backend for one concrete reason: it ships an&lt;br&gt;
&lt;strong&gt;official MCP server&lt;/strong&gt; that exposes traces, metrics, logs, and alerts as&lt;br&gt;
tools an LLM can call directly. That's the difference between "a&lt;br&gt;
dashboard" and something an agent can actually use — the LLM isn't reading&lt;br&gt;
a screenshot, it's calling a tool and getting real numbers back.&lt;/p&gt;

&lt;p&gt;Building Sidekick: Data, Bridge, Agent&lt;/p&gt;

&lt;p&gt;I deployed SigNoz to a local Kubernetes cluster (&lt;code&gt;kind&lt;/code&gt;)&lt;br&gt;
via Helm, then installed SigNoz's &lt;code&gt;k8s-infra&lt;/code&gt; chart, which drops an&lt;br&gt;
OpenTelemetry Collector onto every node as a DaemonSet, plus a&lt;br&gt;
cluster-level collector. This piece runs forever, independent of anything&lt;br&gt;
AI-related — it's just continuously feeding SigNoz real metrics, logs, and&lt;br&gt;
traces.&lt;/p&gt;

&lt;p&gt;SigNoz's MCP server sits between the data and the agent. I&lt;br&gt;
ran it as a Docker container:&lt;/p&gt;

&lt;p&gt;bash command used-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -d --name signoz-mcp -p 8000:8000 \
  -e SIGNOZ_URL="http://host.docker.internal:8080" \
  -e SIGNOZ_API_KEY="&amp;lt;service account key&amp;gt;" \
  -e TRANSPORT_MODE="http" \
  -e MCP_SERVER_PORT="8000" \
  signoz/signoz-mcp-server:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fqsdab3rdnqgxc67ryfoe.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%2Fqsdab3rdnqgxc67ryfoe.png" alt=" " width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sidekick runs two loops at once. In chat mode, you ask a&lt;br&gt;
question, Groq decides which SigNoz tool to call — search traces, check&lt;br&gt;
alerts, pull metrics — reads the real result, and answers in plain&lt;br&gt;
English. In &lt;strong&gt;watch mode&lt;/strong&gt;, every &lt;code&gt;WATCH_INTERVAL_SECONDS&lt;/code&gt; (I used 300),&lt;br&gt;
Groq runs that same investigation on itself, and I force it to end with a&lt;br&gt;
strict JSON verdict:&lt;/p&gt;

&lt;p&gt;json&lt;br&gt;
{"status": "ok" | "issue", "service": "...", "summary": "...",&lt;br&gt;
 "evidence": "...", "proposed_fix": "..."}&lt;/p&gt;

&lt;p&gt;That's the piece that makes "should I interrupt the human" a reliable,&lt;br&gt;
parseable decision instead of a fuzzy paragraph. I also fingerprint each&lt;br&gt;
issue by service + summary, so an ongoing incident doesn't re-alert me&lt;br&gt;
every single cycle — only a genuinely new problem does.&lt;/p&gt;

&lt;p&gt;I kept the LLM behind one small interface — &lt;code&gt;send(system, history, tools)&lt;br&gt;
-&amp;gt; AssistantTurn&lt;/code&gt; — rather than hard-coding Groq's SDK shape into the chat&lt;br&gt;
loop or the watcher directly. Groq's tool-calling responses come back with&lt;br&gt;
real &lt;code&gt;id&lt;/code&gt; fields on each call, so matching a tool result to the call that&lt;br&gt;
requested it is exact, not inferred.&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%2Fejsa6feju6bskkh2o64k.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%2Fejsa6feju6bskkh2o64k.png" alt=" " width="800" height="269"&gt;&lt;/a&gt;&lt;br&gt;
 Where It All Actually Broke&lt;/p&gt;

&lt;p&gt;Three categories of problems ate almost all&lt;br&gt;
my time — not the AI logic, which mostly worked once it had real data to&lt;br&gt;
look at.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Connection issues, over and over.&lt;/em&gt; The MCP server runs inside a Docker&lt;br&gt;
container, and &lt;code&gt;localhost&lt;/code&gt; from inside that container means the container&lt;br&gt;
itself, not my host machine — so pointing &lt;code&gt;SIGNOZ_URL&lt;/code&gt; at&lt;br&gt;
&lt;code&gt;localhost:8080&lt;/code&gt; silently failed. &lt;code&gt;host.docker.internal&lt;/code&gt; was the fix. My&lt;br&gt;
first &lt;code&gt;docker run&lt;/code&gt; (no &lt;code&gt;-d&lt;/code&gt;) also looked healthy in the logs but was&lt;br&gt;
running in the foreground — closing that terminal killed it, and the only&lt;br&gt;
proof was buried in the logs: &lt;code&gt;"msg":"Received shutdown signal"&lt;/code&gt;. And&lt;br&gt;
there's no Windows binary for SigNoz's MCP server at all — its build only&lt;br&gt;
targets Linux/macOS — so Docker wasn't a workaround, it was the only path.&lt;br&gt;
The lesson underneath all three: verify the connection independently&lt;br&gt;
(&lt;code&gt;docker ps&lt;/code&gt;, &lt;code&gt;docker logs&lt;/code&gt;, a plain &lt;code&gt;curl&lt;/code&gt;) before assuming the next layer&lt;br&gt;
up is broken.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;LLM token and API issues.&lt;/em&gt; Groq's free tier meant living inside real rate&lt;br&gt;
limits, not theoretical ones. A single health check making 3–4 tool calls&lt;br&gt;
in a row could burn through the free-tier requests-per-minute limit fast,&lt;br&gt;
especially with chat and the background watcher both hitting the API&lt;br&gt;
around the same time. Some calls also failed outright on bad keys before I&lt;br&gt;
had retries wired up — a 401 gives almost no detail to debug from. Adding&lt;br&gt;
exponential backoff specifically on 429s and 5xxs turned this from "the&lt;br&gt;
watcher silently stops working" into "it waits a few seconds and tries&lt;br&gt;
again."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;CPU overload running the whole stack locally.&lt;/em&gt; SigNoz isn't one process —&lt;br&gt;
it's SigNoz, ClickHouse, ClickHouse Keeper, and Postgres as containers,&lt;br&gt;
plus a Kubernetes control plane underneath, plus the MCP server, plus&lt;br&gt;
Sidekick itself. On one laptop, that's real concurrent CPU draw, and I&lt;br&gt;
watched it climb close to what Docker Desktop had available — enough that&lt;br&gt;
I had to actually check container CPU/memory usage rather than assume&lt;br&gt;
things were fine just because nothing had crashed yet.&lt;/p&gt;

&lt;p&gt;What I'd Tell Myself Before Starting Over&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check &lt;code&gt;docker ps&lt;/code&gt;, not just the logs, before trusting a container is
still alive.** Clean startup logs don't mean it's still running five
minutes later.&lt;/li&gt;
&lt;li&gt;The AI part is the easy part.** The LLM deciding which tool to call is
maybe 20% of the work. The other 80% is plumbing — data flowing, network
paths between a container, a cluster, and localhost.&lt;/li&gt;
&lt;li&gt;Forcing a strict JSON verdict was the single best design decision.**
Without it, "is this a problem?" is a fuzzy paragraph I'd have to re-   read every time.&lt;/li&gt;
&lt;li&gt;Keeping the LLM behind one small interface paid off**, even with a
single provider — separating "how I talk to the model" from "what I do
with its answer" made chat and the watcher trivial to share.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Real Payoff&lt;/p&gt;

&lt;p&gt;SigNoz's MCP server is what made this feel like a real agent instead of a&lt;br&gt;
wrapper around a dashboard — an LLM that queried actual error rates five&lt;br&gt;
seconds ago, not one describing what they might look like. If you're&lt;br&gt;
building something similar: get the data flowing and the MCP server&lt;br&gt;
reachable first, and prove it with &lt;code&gt;curl&lt;/code&gt; before any LLM goes near it —&lt;br&gt;
every bug above was in that plumbing, not in anything Groq did wrong.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
