This episode covers the brain of Zabbix alerting: triggers with the expression builder, severity levels, and dependencies. You'll also understand the event lifecycle from problem to recovery, event tags, and correlation to filter out false alarms.

Items collect data, preprocessing cleans it. But so far Zabbix only "sees" without "understanding". Episode 7 gives Zabbix the ability that makes it valuable: triggers — conditions that assess whether an item value has deviated from normal. Without triggers, Zabbix is just a numbers warehouse; with triggers, it becomes a problem detection system.
This is also an episode about events — objects that mark status changes. The event lifecycle, severity, and correlation are the topics that separate a good monitoring operator from someone who merely copies trigger expressions. Let's dissect it from the foundation.
A trigger evaluates one or more items using aggregation functions. The basic syntax of a Zabbix trigger expression:
{host:key.function(param)} > valueA real example: average user CPU usage over one minute above 90 percent.
{host-target-01:system.cpu.util[,user].avg(1m)} > 90The expression {host:key.avg(1m)} > 90 reads: the average key value over one minute exceeds 90. In the frontend, you write this via the expression builder, which provides functions and a real-time value preview — very helpful for avoiding syntax errors.
A few functions you must know:
last(): the item's latest value.avg(): the average over a time range.change(): the difference from the previous value.count(): the number of values meeting a condition in a range.{host-target-01:system.uptime.change()} < 0The trigger above fires if uptime drops — indicating a host reboot. Examples like this change() pattern are a classic way to detect unexpected restarts.
Zabbix defines five problem severities, from lowest:
Severity is not just a label. It's the foundation for filtering in actions — for example escalation only for High and above — and for display priority on the problem dashboard.
When one server dies, every item on it becomes unavailable and dozens of triggers can fire at once. A dependency lets one trigger "shadow" another: if the parent trigger fires, dependent child triggers are automatically marked as not dependent and produce no notifications.
Host down (parent)
└── Disk space full (not sent if parent fires)
└── Service X down (not sent)Setting up dependencies correctly is one of the most effective ways to reduce alarm noise. The hierarchy above lets an operator receive just one notification for a single root cause.
When a trigger expression evaluates to true, Zabbix creates a problem event. When the expression goes false again, a recovery event is created and the problem is closed. In between, a problem can receive updates — comments, assignment, or severity changes — all recorded as event history.
normal → problem → (update/acknowledge) → recoveryProblem events carry important metadata: the trigger value, severity, host, and tags. All of these are available to actions and dashboard views.
Event tags are key-value pairs attached to an event, for example service:web or dc:jakarta. Tags unlock correlation: merging several events into one coherent problem, or grouping events from the same host. Correlation is an advanced weapon for large environments prone to duplicate alarms.
Tip
Get into the habit of tagging triggers starting from this episode. Tags are not only useful for correlation, but also for filtering in dashboards and for webhook integrations like Slack and PagerDuty in episode 8.
A reliable trigger is one that doesn't easily fire falsely. Practical principles:
avg() instead of last() for fluctuating metrics — for example CPU usage.zabbix_get -s 192.168.1.20 -k system.cpu.util[,user] from the server.By default, a trigger recovers when the expression evaluates to false. For noisy environments, set a separate recovery expression. For example: fire above 90 percent, only recover below 70 percent. This prevents the trigger from flickering around the threshold.
Episode 7 gave Zabbix the ability to think: triggers with the expression builder and the last, avg, change, and count functions, five severity levels, dependencies to suppress cascading alarms, and the event lifecycle from problem to recovery with tags and correlation.
Key takeaways:
last(), avg(), change(), and count() are the four core functions.In the next episode 8 we'll discuss actions, media, and alerting — configuring actions that respond to events, connecting media types like email, webhook, and Telegram, and designing escalations that don't flood operators.