I let a local LLM loose on my server logs, and it caught problems I would've missed for weeks

I let a local LLM loose on my server logs, and it caught problems I would've missed for weeks

Published Aug 26, 2026, 11:00 AM EDT Anurag is an experienced journalist and author who’s been covering tech for the past 5 years, with a focus on Windows, Android, and Apple. He’s written for sites like Android Police, Neowin, Dexerto, and MakeTechEasier. Anurag’s always pumped about tech and loves getting his hands on the latest gadgets. When he's not procrastinating, you’ll probably find him catching the newest movies in theaters or scrolling through Twitter from his bed. I have already automated the easy part of monitoring my home server. My uptime monitor can check whether services are responding and alert when something goes down. I still have to fix it, and the alert can't pinpoint the cause of the failure. I wanted to bridge this gap, so I started using a local LLM running on the server to handle that part. I gave it access to the system logs I would normally inspect as root and allowed it to pull recent entries whenever I needed to investigate an alert. I could then ask what went wrong and get an elaborate explanation based on the service status, errors, and other activity around the same time. The uptime monitor only sees the outside A local LLM has a 360 view Most uptime monitors do a basic check to see whether the service is running. Usually, they ping an address, connect to a port, or look for an expected response. I use these checks for services such as Jellyfin, Home Assistant, and n8n. While these checks quickly tell whether a service is up or not, they are also completely deterministic. For example, if an endpoint doesn’t return the expected result within the configured time, the check fails, and I receive an alert. As mentioned earlier, the information you get in these alerts is also quite limited. Your server could have a frozen app, but the Docker container could still be running fine. So every time you get an uptime alert, you are searching through the whole ocean to fix an issue that affects only a small part of it. You can always write scripts for known failures, and I still prefer scripts when the condition and response are predictable. A script can restart a service after a failed health check or notify me when storage crosses a fixed limit. However, it can’t interpret a collection of unfamiliar errors and decide which ones are connected without you defining those relationships beforehand. I wanted to keep those dependable checks in place while adding something that could investigate the evidence they produced. That became the local LLM’s job. I gave the model access to logs And it did more work than I could When I say I gave the LLM root access to system logs, I don’t mean that I ran the entire model as root. I created a dedicated service account for the agent and gave it permission to read the systemd journal. The model also doesn’t get a general terminal either. I use n8n to expose a small set of tools that retrieve recent logs, check a service's state, inspect memory and storage, and verify whether an expected port is listening. Each tool accepts a limited set of inputs. The log tool, for instance, only accepts approved service names and returns a fixed number of entries from a recent time window. You need to be even more careful when adding the agent to Docker because that gives the agent control over the host. A better approach is to route container logs through the system journal, which lets the model inspect them through the same restricted log tool. I also keep troubleshooting and actual changes separate. You can let the LLM inspect logs and figure out what went wrong, but it shouldn't be able to restart anything it wants. Restarts should go through a workflow that only works with specific services and checks that they came back online afterward. Uptime alerts now tell me everything I need to know This helps me troubleshoot faster When an uptime check fails, n8n sends the service name and failure time to my local LLM. The model checks whether the service is still running and pulls a small section of the logs from around that time. If Jellyfin has exited, the service status and last few log entries usually point it in the right direction. If Jellyfin is still running, it checks whether the expected port is listening and whether the reverse proxy can reach it. I keep the final response short. It tells me what failed, shows the log entries that support its answer, and suggests what to check or do next. This change has made uptime notifications more useful on my server. Earlier, “Jellyfin is down” started the investigation. Now, the alert can tell me that Jellyfin stopped responding after losing access to its media drive, or that the service crashed and left a specific error in the journal. If the solution is an approved restart, the workflow can handle it and rerun the health check. Other failures arrive with enough context for me to take over without starting from scratch.

Original Source

Read the full article at Xda-developers →

KhanList aggregates and links to publicly available news content. We do not host full articles from third-party sources. Always verify important information with original sources.