<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Greg Wilson</title><link>https://imawilson.com/</link><description>Recent content on Greg Wilson</description><generator>Hugo</generator><language>en-US</language><copyright>&amp;copy; 2026 Greg Wilson</copyright><lastBuildDate>Fri, 24 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://imawilson.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Route a Grafana alert to a read-only Mastra triage agent</title><link>https://imawilson.com/posts/route-a-grafana-alert-to-a-mastra-triage-agent/</link><pubDate>Fri, 24 Jul 2026 00:00:00 +0000</pubDate><guid>https://imawilson.com/posts/route-a-grafana-alert-to-a-mastra-triage-agent/</guid><description>&lt;p&gt;When a &lt;a href="https://grafana.com/oss/grafana/" target="_blank" rel="nofollow noopener noreferrer"&gt;Grafana&lt;/a&gt;
 alert fires, a &lt;a href="https://mastra.ai" target="_blank" rel="nofollow noopener noreferrer"&gt;Mastra&lt;/a&gt;
 agent reads the metric, pulls the failing trace, follows the stack to the bug at &lt;code&gt;orders.js:23&lt;/code&gt;, and posts a cited file-or-close recommendation to Slack. Then it stops. It changes nothing, and a human makes the call. This is the first step of an SRE agent I&amp;rsquo;m building, read-only to start. The post walks through the whole loop and what I learned wiring it up. The code is public, so you can &lt;a href="https://github.com/charlesgwilson/mastra-alert-triage-agent" target="_blank" rel="nofollow noopener noreferrer"&gt;clone it and build it yourself&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>How to correlate Mastra metrics, logs, and traces in Grafana</title><link>https://imawilson.com/posts/correlate-mastra-metrics-logs-traces-grafana/</link><pubDate>Thu, 16 Jul 2026 00:00:00 +0000</pubDate><guid>https://imawilson.com/posts/correlate-mastra-metrics-logs-traces-grafana/</guid><description>&lt;p&gt;I had a Mastra agent whose Grafana error tile held at 0% while a tool inside it failed on every call. The metric wasn&amp;rsquo;t lying: the agent caught each thrown exception and answered anyway, so at the agent level nothing had failed. The tool had failed, and the logs showed it; the number everyone watches never did.&lt;/p&gt;</description></item><item><title>A Grafana dashboard for your Mastra agent metrics</title><link>https://imawilson.com/posts/mastra-agent-grafana-dashboard/</link><pubDate>Fri, 10 Jul 2026 00:00:00 +0000</pubDate><guid>https://imawilson.com/posts/mastra-agent-grafana-dashboard/</guid><description>&lt;p&gt;A single Grafana dashboard is enough to watch a Mastra agent during an incident: five golden-signal numbers, a p95 latency, and the throughput and spend underneath. Because the exporter emits Prometheus histogram buckets, the p95 is a true windowed percentile, and every spike is tagged with its &lt;code&gt;trace_id&lt;/code&gt; as an exemplar. This post builds that board, panel by panel, and ships the &lt;a href="https://imawilson.com/posts/mastra-agent-grafana-dashboard/overview-dashboard.json" download&gt;provisioned JSON&lt;/a&gt; so you can drop it into your own Grafana.&lt;/p&gt;</description></item><item><title>How to export Mastra agent metrics to Prometheus (no database required)</title><link>https://imawilson.com/posts/export-mastra-agent-metrics-to-prometheus/</link><pubDate>Fri, 03 Jul 2026 00:00:00 +0000</pubDate><guid>https://imawilson.com/posts/export-mastra-agent-metrics-to-prometheus/</guid><description>&lt;p&gt;Mastra derives per-agent metrics (latency, tokens, cost) from its traces, and shows them well in Studio. When you want those metrics in Prometheus so your production monitoring and alerting can use them, you need a scrape endpoint that Mastra doesn&amp;rsquo;t ship. You can add one without running an analytics database. Mastra puts every derived metric onto an observability event bus, so a small exporter can listen, feed &lt;code&gt;prom-client&lt;/code&gt;, and serve &lt;code&gt;/metrics&lt;/code&gt; from memory, with no analytics database (DuckDB or ClickHouse) to run. Here is how I wired it up, and the &lt;a href="https://github.com/charlesgwilson/mastra-prometheus-exporter" target="_blank" rel="nofollow noopener noreferrer"&gt;open-source exporter&lt;/a&gt;
 that does it.&lt;/p&gt;</description></item><item><title>About</title><link>https://imawilson.com/about/</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate><guid>https://imawilson.com/about/</guid><description>&lt;p&gt;I’m Greg Wilson, an experienced CTO and CIO who still likes being close to the code. I write about production AI and the engineering work around it: agents, infrastructure, DevOps, internal tools, and the operating details that make software reliable enough for real work. That bias toward useful software started early.&lt;/p&gt;</description></item></channel></rss>