We’re happy to inform you about the release of Zabbix 4.2, a free open source monitoring system.
Let’s find out whether Zabbix 4.2 is the answer to the crucial question of life, universe, and monitoring in general!
Zabbix is a versatile system for monitoring the performance and availability of servers, IoT and network equipment, apps, databases, cloud resources, containers, IT services, and web services.
Zabbix performs data collection and processing, problem and anomaly detection, visualization, and much more. On top of that, the system provides flexible features for extending data collection and alerting methods, as well as automation via API. A single web interface performs a centralized management of monitoring configurations and distributes access rights among different groups of users.
Zabbix 4.2 is a new non-LTS version with a shortened maintenance period. If you’re planning to use your software for a long time, we recommend LTS versions (3.0 and 4.0).
Let’s take a look at what features have been added to Zabbix 4.2.
More supported platforms
In addition to the existing official packages, Zabbix now supports a series of new platforms:
- RaspberryPi, Mac OS/X, SUSE Enterprise Linux Server 12
- MSI for Windows agent
- Docker images
Built-in Prometheus support for app monitoring
Zabbix can use different methods (push/pull) to collect data from a number of data sources like JMX, SNMP, WMI, HTTP/HTTPS, RestAPI, XML Soap, SSH, Telnet, agents and scripts, etc. The new Zabbix now features the Prometheus support!
In fact, data retrieval from Prometheus exporters was already available thanks to HTTP/HTTPS checks using regular expressions.
However, through in-built PromQL language support, Zabbix 4.2 allows to maximize the benefits of Prometheus integration. Plus, using dependent metrics allows us to collect and process data in a more efficient way: you only need to request the data once and then distribute those among corresponding depending metrics.
It’s worth noting that low-level discovery can use collected data to automatically create metrics. Zabbix converts received data into the easy-to-use JSON format.
Currently, there are more than 300 integrations for monitoring services and apps with Zabbix. Prometheus support will allow to add a set of apps with official or community-supported Prometheus exporters. Here we are talking about the monitoring of popular services, containers, and cloud resources.
Efficient high-frequency monitoring
Do we want to detect problems as fast as possible? Of course, we do! For the most part, to achieve that we have to perform frequent checks, which results in overloading the monitoring system. How can we avoid that?
We implemented a throttling mechanism for preprocessing. In short, throttling allows us to skip recurrent values.
Suppose, we are monitoring the state of a critical app. Every second, we’re checking whether the app is running or not. Zabbix receives a continuous data flow consisting of ones (running) and zeroes (not running). Here is an example: 1111111111110001111111111111…
When the app is functioning well, Zabbix receives a series only consisting of ones. Do we need to process all that data? In fact, no, we don’t because we are only interested in how the app state is changing. We don’t want to collect and store too much data. Throttling allows us to skip a value if it’s the same as the previous one. As a result, we only get data when the app state is changing, e.g., 01010101… It’s more than enough for a timely problem detection!
Zabbix simply ignores skipped values. They are not stored and have no effect on triggers. Zabbix thinks that skipped values have never existed.
Wow, great! Now we can detect problems in time without having to store excessive information.
But what about graphs? With scarce data, they’ll be empty! And how can a user understand whether or not Zabbix is collecting data when most data are skipped anyway?
We’ve thought about that! Zabbix offers another type of throttling which is called “throttling with heartbeat.”
In this case, despite a recurrent data flow, Zabbix will save as least one value within a specified time interval. If data are collected every second and time interval (heartbeat period) is set at 1 minute, Zabbix will only keep every 60th value.
Now we know that the data are being collected, trigger function nodata() is operational, and the graphs are fine!
Data validation and error handling
No one wants to collect erroneous or inaccurate data. For instance, we know that a temperature sensor reads data in the 0°-100°C range, and any different value is considered erroneous and/or ignored.
Now this is possible thanks to in-built preprocessing rules that validate data by fitting or not fitting regular expression using JSONPath or XMLPath.
Now we define the reaction to any preprocessing-related problem. If the temperature is outside the range, we can simply ignore this value, set a default value (e.g, 0°C ), or define our own error message, e.g. “Sensor is damaged” or “Change battery.”
Now we also can extract error messages from collected data. This is a very useful functionality when receiving data from external APIs.
Data transformation, aggregation, filtering, arithmetical and logical operations – all this and more is available now!
Now we don’t need a tool to verify complex preprocessing scenarios. Now we can test preprocessing rules straight from the Web UI.
Processing millions of metrics per second!
Before Zabbix 4.2, preprocessing was the exclusive responsibility of the Zabbix server, which limited the possibilities of using a proxy for load distribution.
Starting from Zabbix 4.2, we can benefit from greater scalability because all preprocessing functions are performed by proxies.
Easy low-level discovery
Low-level discovery (LLD) is a highly powerful mechanism for automatically detecting any kind of monitoring resources (file systems, processes, apps, services, etc.) and using those to create data elements, triggers, network nodes, and other objects. LLD saves lots of time, simplifies configuration, and allows to use a single template for hosts with different monitoring resources.
Earlier, LLD required a special JSON to work correctly. But not anymore.
Zabbix 4.2 allows LLD to use arbitrary input in JSON format. Why is it important? It gives you the opportunity to communicate with, say, external APIs and use the received information to automatically create hosts, data elements, and triggers.
As you can see, the possibilities are endless!
What is TimescaleDB? It’s a standard PostgreSQL, plus an extension module from the TimescaleDB team. TimescaleDB offers a better performance through using smarter algorithms and data structures.
Another beautiful thing about TimescaleDB is automatic table partitioning which enhances performance. TimescaleDB stands for speed and simplicity. However, I must say that our team has not yet compared TimescaleDB’s performance with that of PostgreSQL.
TimescaleDB is currently a rather young and fast-growing product. So be sure to use it carefully!
Easy tag management
While earlier you could only set tags for individual triggers, now tag management has become way more flexible. Zabbix now supports tags for templates and hosts!
All detected problems get the tags from the trigger and the host, as well as from the corresponding templates.
More flexible auto-registration
Zabbix 4.2 allows you to filter host names by using regular expressions. This enables you to create different auto-registration scenarios for detecting different sets of hosts. This feature comes in especially handy when complex rules for device naming are used.
Control host names for auto-discovery
Another improvement has to do with the naming of hosts. Now you can assign metric data to a host name and visible name.
This is a very useful functionality, especially if we are using SNMP and Zabbix agent.
Test media type from Web UI
Now you can send a test message to yourself from the web interface to see whether the alerting method is working. This feature is especially useful for checking the scripts used for integration with different alerting systems, task systems, and other external programs and APIs.
Remote monitoring of Zabbix infrastructure components
The new Zabbix offers the functionality of remote monitoring of internal metrics of the Zabbix server and proxy (performance and availability metrics).
Why do we need that? This feature allows you to discover internal metrics of servers and proxies and timely detect the problems even if the components are overloaded or the proxy has a large volume of data stored.
HTML support for emails
Thanks to HTML support, you now can create eye-pleasing and effective email messages. Seems like it’s time to learn HTML + CSS!
Accessing external systems from network maps
Now Zabbix supports an entire set of new macros in user-defined URLs pointing to external systems. This allows to open, say, a ticket in a tasks system in just a few clicks.
LLD rule as a dependent metric
“Why do I need this?”, you might be thinking. This functionality allows to use received values of a master metric for both discovery and collection of data. For example, when collecting data from the Prometheus exporter, Zabbix will make one HTTP request and use the received information for all dependent metrics (metric values and LLD rules).
New animations for maps
Another addition is the support of animated GIF images on maps to make problems more noticeable.
Extracting data from HTTP headers in web monitoring
You can now extract data from HTTP headers in web monitoring.
This allows to create multi-step scenarios of web monitoring or external APIs by using the authentication token obtained in one of the steps.
Zabbix Sender uses all IP addresses
Zabbix Sender now sends data to all IP addresses defined in the ServerActive parameter of the Agent’s configuration file.
New filter for trigger configuration
Trigger configuration page now features an extended filter for a fast and convenient trigger selection by specified criteria.
Showing exact time
Now, when you point a cursor at the chart, Zabbix shows you the exact time.
- Non-destructive resizing and reordering of dashboard widgets
- Mass update for item prototypes
- IPv6 support for DNS checks (“dns” and “new.dns.record”)
- New “skip” parameter for “eventlog” checks
- Extended preprocessing error messages include intermediate step results