Web developmentE-commerce and business

Four alerts that never existed: monitoring that lived only in the docs

On 5 September 2026 we opened Grafana to check four alert rules our documentation had promised since 17 January. There were zero rules there, the metrics beneath them were empty, and the delivery channel was a placeholder. Here is what we put in their place, and how to check your own monitoring in half an hour.

September 17, 2026
9 min read

On 5 September 2026 we decided to check not the site itself but the thing that was supposed to tell us the site had gone down. Our internal documentation had carried a line since 17 January 2026: four alert rules, checked every 30 seconds. Error rate above 5% for five minutes, response time (p95) longer than 2 seconds for 10 minutes, an exhausted database connection pool, a day without a single brief. It sounded like protection against everything that can happen to an agency site.

We opened Grafana, where those rules were supposed to live. There were zero rules there.

This article is about how alerts can exist on paper only, why a line like that survives for months, and how to find out in roughly half an hour whether your site has even one alert that actually reaches a human.

What we found on 5 September

There turned out to be three defects, and each one on its own made those four rules useless.

The rules were not in the system. The file describing them did sit on the server, but no program read it: the configuration of the metrics collection system had no reference to it, and a separate service to send notifications out did not exist at all. The file just sat there.

The rules had nothing to look at. All four were written against site metrics: the number of HTTP requests, their duration, errors, the state of the database. These metrics are declared in the code, which means they have a name and a description. But the pages of the site never call the function that was supposed to record them. We checked this once more on 17 September: the metrics store held not a single data series for requests, for errors, or for the database. Even if someone had hooked up the file with the rules, they would have been comparing emptiness against a threshold.

There was no delivery either. The only notification channel in Grafana was the standard email receiver with a placeholder address. It exists in every fresh installation and sends nowhere.

So from mid-January to 5 September at the very least, we could only have noticed the site going down by opening it ourselves — or from a person who failed to use it.

Why nobody noticed

Because a missing alert looks exactly like a quiet day. When everything works, the real rules and the imaginary ones are equally silent. The difference shows up at the moment of the failure, and that is precisely when nobody is reading the documentation.

The second reason is how the line itself was written. It was specific: rule names, thresholds, the check interval. Text like that raises no doubts, because it resembles a description of work already done. In reality it was a plan written in the form of a report.

And third: the dashboards were there. Panels with the familiar headings about request rate and response time stood in Grafana, and the mere fact of their existence created a feeling that monitoring existed. The charts on those panels were empty, but an empty chart is easy to read as “nothing is happening right now.”

What we put in their place

That same day we started with the server rather than the site, because it was the server that had already gone down on us. On 2 August 2026 the shared server ran out of memory: processes started being killed off, and the machine had to be rebooted. We learned about that not from a system but after the fact.

So on 5 September we got collectors for the metrics of the server itself and of the containers, a separate dashboard, and four rules that this time do exist in Grafana and send messages to the owner's Telegram:

  • load average above 8 (on eight cores) for 10 minutes;
  • less than 1 GB of available memory out of 15 for 5 minutes;
  • the root disk more than 90% full for 15 minutes;
  • any metrics source, the site included, not responding for 5 minutes.

Each rule carries a hint in the text of the message: where to look first and what has already happened. The rule about memory states outright that this is exactly how the failure of 2 August began.

We rewrote the documentation to match what actually exists, and kept the old line about the four rules together with an explanation that they never existed. Otherwise someone would find it in the history and believe it again.

What the first 12 days showed

On 17 September all four rules were “inactive” and “healthy”: the system evaluates them, there are no evaluation errors, the condition is not met.

To work out whether the rules are silent because everything is fine or because they do not fire, we looked at the metrics themselves over the 12 days from the rules going live on 5 September to 17 September.

  • Load reached 19.04 at individual moments, but the highest value that held for a full 10 minutes in a row was 6.79. It never reached the threshold of 8.
  • Available memory dropped to a low of 4.58 GB. That is a long way from the 1 GB threshold.
  • The disk climbed to 93.05%, which is above the threshold. But never for long: across all 12 days there were 16 one-minute samples above 90%, and the highest value that held for all 15 minutes in a row was 88.13%.
  • The site as a metrics source failed to respond once, and that was a single one-minute sample. The collectors for the server and the containers did not miss one.

The conclusion cuts both ways. The rules were justified in staying silent: no condition held for its whole window of time. But there has been no real firing yet either, so the path from a breached condition to a message on a phone is still not confirmed by a live case.

And the case of the disk shows the limit of any threshold with a hold time: short spikes to 93% are something this rule does not see by design. We configured it that way deliberately, so that temporary files do not wake anyone up. But if the disk ever fills up completely within those same few minutes, the alert will arrive after the problem.

How to check your own site

You do not need to understand code for this. What you need is access to the monitoring system and half an hour.

  1. Count the rules that exist in the system, not in a document. In Grafana that is the Alerting → Alert rules section, in Uptime Kuma the list of monitors, in a hosting panel the notifications section. Write down each one: what it checks, what the threshold is, how long the breach has to hold. If the list is empty or shorter than you were told, start here.
  2. Open each rule and look at what it watches. If a rule counts errors on the site, open that same query on its own and make sure it has any data at all for the past week. A rule over an empty metric is not silent in the same way every time: in Grafana each rule has its own setting for the case of missing data, and that setting decides whether you see the familiar “OK” or a separate “No data” state that is easy to overlook in the list. In three of our server rules it is set to “No data,” while in the rule about an unreachable target it goes straight to alerting. An empty metric will catch a breakdown in neither variant, so look at the data under the query, not at the color of the status.
  3. Check where the notifications go. Look at the list of delivery channels: email, Telegram, SMS. An address along the lines of example@email.com, or a channel created by a person who no longer works with you, means there is no delivery.
  4. Send a test notification and wait for it on your phone. In Grafana the Test button is in the settings of every channel. Only a message you have seen counts, not a green “sent” label.
  5. Ask yourself three questions: if the site starts returning a 500 error, who finds out about it and when; if the disk runs out of space; if the emails with leads stop going out. Each of them should have a rule name and a person the rule reaches. The answer “we will see it in the statistics” means “nobody.”

What we have not solved

Our new rules watch the server and whether the site responds. They do not watch whether the site works correctly.

We still cannot see 500 errors on an individual page, because the request metrics this whole story started with have stayed empty. A failed email delivery does not produce a notification either. On 8 September 2026 two emails did not go out, the log recorded it, and we found those entries by hand when we opened the log ourselves. We went through the email story in detail separately: the form says “thank you” and the email never leaves.

So on 5 September we closed the crudest part: a server failure will no longer slip past us. A quiet breakdown inside the site still will. Our next step is exactly that: to record request errors and failed emails and to put rules over them with the same delivery channel.

If you need someone to set up this kind of watch for your site and to verify that the messages really do arrive, that is uptime monitoring work. Responding to the failures themselves and to the state of the server is part of server administration.

The rule we took away for ourselves: an alert exists once it has reached a human at least once. Everything else, a line in the documentation included, is only an intention.

Tags

AnalyticsPerformance

🤔Did you like the article?

Your opinion helps us create better content

Share with friends

Found something useful? 🚀

Help others learn about it - share the article on social networks

https://lionex.com.ua/blog/chotyry-tryvohy-yakyh-ne-bulo

💚 Thank you for helping us grow

Vladyslav Chystiakov

Writes about what he builds himself: online stores on OpenCart, applications on Next.js, integrations and site speed. The articles carry measurements and checks a reader can repeat on their own project, not general advice. Commercial development since 2015.

Frequently asked questions

Answers to common questions on the topic

Count the rules in the monitoring system itself, not in a document or in what a contractor tells you. Open each one and see whether its query has data for the past week: over an empty metric a rule either shows the familiar “OK” or a separate “No data” state, depending on the setting, and in neither case does it catch a breakdown. Then send a test notification and wait for it on your phone. In our case, on 5 September 2026 the documentation promised four rules and the system had zero.

Because a missing alert looks exactly like a quiet day: when everything works, the real rules and the imaginary ones are equally silent. The difference shows up at the moment of the failure, when nobody is reading the documentation. In our case the line about four rules, dated 17 January 2026, was specific — names, thresholds, a check every 30 seconds — and that is precisely why it raised no doubts.

No. An empty chart looks the same whether it means “nothing is happening right now” or “this metric was never recorded.” Our panels about request rate and response time stood in Grafana, but the metrics beneath them were declared in the code and never received a single value: the pages of the site simply do not call the recording function. What you have to check is the query itself, not the picture.

The ones that catch infrastructure failures: server load, lack of memory, the disk filling up, and no response from the site itself. Those are exactly the four we set up on 5 September 2026, with hold times from 5 to 15 minutes so that a short spike does not wake anyone up. That is a minimum, not a complete set.

Because they look at the machine, not at how the application works. A 500 error on an individual page or a failed email delivery changes neither the load nor the free memory. On 8 September 2026 two of our emails did not go out, the log recorded it, and no notification arrived: for failures like that to reach a human you need separate application metrics and separate rules over them.

Get the best articles by email

Subscribe to our newsletter and receive useful tips, insights and news about web development, marketing and business.

We respect your privacy. You can unsubscribe at any time.