<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Nilay Saraiya on Medium]]></title>
        <description><![CDATA[Stories by Nilay Saraiya on Medium]]></description>
        <link>https://medium.com/@nilay.saraiya?source=rss-d34b790fc68e------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*Pg63ccl_tq4i9XZHgcuBaQ.jpeg</url>
            <title>Stories by Nilay Saraiya on Medium</title>
            <link>https://medium.com/@nilay.saraiya?source=rss-d34b790fc68e------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 17 May 2026 10:12:42 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@nilay.saraiya/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[From Alerts to Action: Building an Agentic AI Monitor for JBoss EAP on OpenShift]]></title>
            <link>https://medium.com/@nilay.saraiya/from-alerts-to-action-building-an-agentic-ai-monitor-for-jboss-eap-on-openshift-179c41987ff0?source=rss-d34b790fc68e------2</link>
            <guid isPermaLink="false">https://medium.com/p/179c41987ff0</guid>
            <category><![CDATA[sre]]></category>
            <category><![CDATA[automation]]></category>
            <category><![CDATA[platform-engineering]]></category>
            <category><![CDATA[agentic-ai]]></category>
            <category><![CDATA[red-hat-openshift]]></category>
            <dc:creator><![CDATA[Nilay Saraiya]]></dc:creator>
            <pubDate>Sun, 12 Apr 2026 06:42:07 GMT</pubDate>
            <atom:updated>2026-04-12T06:47:53.484Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*A14QcbyofWoNkC4C5oxYzQ.png" /></figure><p>Most monitoring systems are good at telling us that something is wrong.</p><p>They are much less good at turning that signal into a clear, operator-ready explanation of what probably happened, what to check next, and how to fix it.</p><p>That gap is where on-call time disappears. A pod crashes, an alert fires, a health check fails, or an application log starts throwing errors. The monitoring stack does its job and raises its hand. Then a human still has to collect context from OpenShift, inspect logs, connect the symptoms to the platform and application runtime, decide whether this is a JBoss issue, a Kubernetes issue, a resource issue, or a deployment issue, and finally create a ticket someone else can act on.</p><p>I built a project to explore what happens when that triage loop becomes agentic.</p><p>The project is called <strong>JBoss AI Monitor</strong>. It is a Python-based monitoring agent that runs inside OpenShift, watches a JBoss EAP 8 workload, uses Claude to generate structured root-cause analysis, and automatically creates JIRA tickets with the diagnostic context and recommended resolution steps.</p><p>GitHub repository: <a href="https://github.com/nnsaraiya/jboss-ai-agent-monitor.git">https://github.com/nnsaraiya/jboss-ai-agent-monitor.git</a></p><h3><strong>The Problem I Wanted to Solve</strong></h3><p>In many enterprise environments, JBoss EAP and WildFly workloads are still business-critical. They often sit behind modern platform layers like OpenShift, Prometheus, AlertManager, JIRA, and incident-management tooling.</p><p>That tooling gives teams visibility, but the first few minutes of diagnosis are still repetitive:</p><p>- Which pod or container failed?</p><p>- Was it an OOM kill, a crash loop, an image pull issue, or a health-check failure?</p><p>- Are there useful log lines near the failure?</p><p>- Is this related to JVM heap sizing, OpenShift resource limits, readiness probes, deployment configuration, or an application exception?</p><p>- What should the ticket say so the next engineer does not have to rediscover the same context?</p><p>The goal was not to replace engineers. The goal was to remove the low-value translation step between “an alert fired” and “there is a useful ticket with enough context to begin remediation.”</p><h3><strong>How the Agent Works</strong></h3><p>JBoss AI Monitor runs as an in-cluster Python service. Every 60 seconds, it executes a monitoring cycle across four layers:</p><p>- <strong>Pod state monitoring</strong> for OOMKilled containers, CrashLoopBackOff, Error, ImagePullBackOff, CreateContainerError, and restart spikes.</p><p>- <strong>Log monitoring</strong> for JBoss and Java error patterns such as OutOfMemoryError, WFLYCTL errors, deployment exceptions, stack traces, deadlocks, and severe runtime failures.</p><p>- <strong>Alert monitoring</strong> for Prometheus or AlertManager alerts related to WildFly, JBoss, EAP, or adjacent workloads.</p><p>- <strong>Health monitoring</strong> for HTTP endpoints exposed by the JBoss service.</p><p>When an issue is detected, the agent normalizes it into a shared issue model with severity, type, namespace, pod/container information, relevant raw diagnostic data, and log excerpts where available.</p><p>It then performs deduplication using a stable fingerprint and a configurable time window. That matters operationally because a broken pod can generate the same symptom every minute. The agent should not flood JIRA with identical tickets.</p><p>Only new issues are sent to the resolution layer.</p><h3><strong>Where AI Fits</strong></h3><p>The AI component is deliberately narrow.</p><p>Instead of asking a model to “chat” about an incident, the project sends a structured issue context to Claude and forces a tool-call response. The model must return a predictable object containing:</p><p>- Root-cause analysis</p><p>- Resolution steps</p><p>- Prevention tips</p><p>- References</p><p>- Confidence level</p><p>This structure is important. In automation, free-form prose is hard to trust and hard to integrate. A structured response can be mapped cleanly into downstream systems, validated, rendered into a JIRA ticket, and improved over time.</p><p>The system prompt also narrows the operating domain: the model is asked to behave like an SRE and Red Hat JBoss/WildFly/EAP specialist working inside OpenShift. That keeps the analysis focused on platform and runtime realities instead of generic troubleshooting advice.</p><h3><strong>Turning Analysis Into a Ticket</strong></h3><p>Once the resolution is generated, the agent creates a JIRA Cloud issue using the REST API.</p><p>The ticket includes:</p><p>- Issue type and severity</p><p>- Namespace, pod, and container metadata</p><p>- Detection timestamp</p><p>- Human-readable description</p><p>- Relevant log excerpt</p><p>- AI-generated root-cause analysis</p><p>- Numbered resolution steps</p><p>- Prevention tips</p><p>- References</p><p>- Raw diagnostic data</p><p>The ticket is not meant to be treated as unquestionable truth. It is an operational starting point. The JIRA description explicitly marks the analysis as AI-generated and includes a confidence level so an engineer can calibrate how much verification is needed.</p><p>That distinction matters. In SRE workflows, the right role for AI is often not “autonomous fixer.” A more realistic and useful first step is “high-quality triage assistant that packages context quickly and consistently.”</p><h3><strong>The Architecture</strong></h3><p>At a high level, the flow looks like this:</p><p>1. JBoss EAP 8 runs on OpenShift through the Red Hat EAP/WildFly operator.</p><p>2. The monitoring agent runs in a separate namespace.</p><p>3. Kubernetes RBAC grants the agent read access to pods, logs, services, and endpoints in the JBoss namespace.</p><p>4. The agent runs periodic checks across pod state, logs, alerts, and health endpoints.</p><p>5. New issues are deduplicated and sent to Claude for structured analysis.</p><p>6. The resulting resolution is written into a JIRA ticket.</p><p>The GitHub repository includes Kubernetes manifests for deployment, service account and RBAC setup, ConfigMap-based configuration, a UBI9 Python Dockerfile, and a smoke-test script for validating the stack:</p><p><a href="https://github.com/nnsaraiya/jboss-ai-agent-monitor.git">https://github.com/nnsaraiya/jboss-ai-agent-monitor.git</a></p><p>Configuration is environment-driven, including:</p><p>- JBoss namespace and label selector</p><p>- Check interval</p><p>- Health-check URLs</p><p>- JIRA project and issue type</p><p>- Claude model and token limits</p><p>- Deduplication window</p><p>- Per-monitor enable/disable flags</p><p>That makes the agent portable across local CRC experiments and fuller OpenShift environments.</p><h3><strong>What I Learned</strong></h3><p>The most interesting part of this project was not wiring one API to another. It was deciding where to put boundaries.</p><p>AI is powerful, but production operations need guardrails:</p><p>- The model should receive curated context, not unlimited raw data.</p><p>- The model should produce structured output, not arbitrary prose.</p><p>- The automation should deduplicate aggressively.</p><p>- The system should fail safely if AI analysis is unavailable.</p><p>- Tickets should preserve diagnostic data so humans can verify the recommendation.</p><p>- The agent should be configurable enough to adapt to real platform differences.</p><p>This project reinforced a simple idea: agentic systems become more useful when their autonomy is bounded by clear contracts.</p><p>Here, the contract is:</p><p>Detect known operational signals. Package the context. Ask for structured expert analysis. Create a ticket. Let an engineer verify and act.</p><p>That is a smaller ambition than “AI runs production for us.” It is also much more useful.</p><h3><strong>Why This Matters</strong></h3><p>Infrastructure teams already live with too many disconnected signals. Logs are in one place, alerts in another, cluster state somewhere else, tickets somewhere else again.</p><p>An agentic monitoring workflow can connect those layers.</p><p>For JBoss and OpenShift teams, that means a crash loop or health failure can move quickly from raw symptom to actionable ticket. For platform engineers, it means repetitive triage can become a paved path. For SRE teams, it means less time spent assembling context and more time spent making good decisions.</p><p>I do not think this pattern is limited to JBoss. The same architecture could apply to databases, message brokers, batch workloads, integration platforms, or any system where failures have recognizable signals and remediation depends on combining platform context with domain knowledge.</p><h3><strong>Final Thought</strong></h3><p>Agentic AI in operations does not have to start with self-healing production systems.</p><p>It can start with something simpler and safer:</p><p>When something breaks, create a better first ticket.</p><p>That alone can save real time.</p><p>And for many teams, it is the difference between another noisy alert and an engineer beginning with useful context already in hand.</p><p>— -</p><p>Suggested hashtags:</p><p>#AI #AgenticAI #OpenShift #JBoss #DevOps #SRE #Kubernetes #PlatformEngineering #Automation #AIOps</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=179c41987ff0" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>