[comment]: # ({2381545c-2381545c})
# 5 What's new in Zabbix 4.0.0

[comment]: # ({/2381545c-2381545c})

[comment]: # ({43bac010-43bac010})
### Improved dashboards

Dashboards have seen further improvements in the new version to make
them more appealing visually, more versatile and flexible to the user
needs.

![](../../../assets/en/manual/introduction/improved_dashboard1.png){width="600"}

To achieve the new look and functionality, the following developments
have been made:

-   A new more versatile SVG-based [graph widget](#new_graph_widget) has
    been added, while the classic design graph widget is also still
    available
-   Widgets no longer contain a footer displaying widget details (e.g.
    the *Updated: hh:mm:ss* message about the time they were updated),
    achieving a much cleaner look of the dashboards. Note that:
    -   In the *Problems* widget the message "N of M problems are shown"
        will still be displayed if there are more problems than can be
        displayed according to the *Show lines* setting
    -   Digital clock will no longer be displayed in the Clock widget
        footer
-   In the new *[Kiosk](#kiosk_mode_for_frontend_pages) mode*, widgets
    only can be displayed with no headers at all
-   A new *Global view* dashboard is now shipped with the default Zabbix
    dataset, replacing the main *Dashboard* of the previous version
-   Another default dashboard has been added that focuses on displaying
    Zabbix server performance: *Zabbix server health*:

![](../../../assets/en/manual/introduction/dashboard_server_health.png){width="600"}

This dashboard is shared with the *Zabbix administrators* group only, by
default.

[comment]: # ({/43bac010-43bac010})

[comment]: # ({db7538eb-db7538eb})
### Retrieve metrics immediately

Retrieving a new value for an item (metric) in Zabbix has always been
cyclic and based on configured update intervals. While for many items
the update intervals are quite short, there are others (including
low-level discovery rules) for which the update intervals are quite
long, so in real life situations there may be a need to retrieve a new
value quicker - to pick up changes in discoverable resources, for
example.

This is now made possible in the new Zabbix version by means of a *Check
now* button that is available in two locations:

|   |   |
|---|---|
|![](../../../assets/en/manual/introduction/check_now_1.png)|Configuration form<br>of an existing [item](/manual/config/items/item) or [discovery rule](/manual/discovery/low_level_discovery#discovery_rule).|
|![](../../../assets/en/manual/introduction/check_now_2.png)|List of [items](/manual/web_interface/frontend_sections/configuration/hosts/items) or [discovery rules](/manual/web_interface/frontend_sections/configuration/hosts/discovery):<br>select the required entities and click on *Check now*.|

::: noteimportant
When checking for a new value, the configuration
cache is **not** updated, thus the values will not reflect very recent
changes to item/discovery rule configuration. Therefore, it is also not
possible to check for a new value for an item/rule that has been created
just now.
:::

For more details, see: [Check now](/manual/config/items/check_now)

[comment]: # ({/db7538eb-db7538eb})

[comment]: # ({b469f540-b469f540})
### New HTTP item type

A new HTTP item type has been introduced allowing data polling using the
HTTP/HTTPS protocol. Trapping is also possible using Zabbix sender or
Zabbix sender protocol.

![](../../../assets/en/manual/introduction/http_item_new.png)

For more details see [HTTP agent](/manual/config/items/itemtypes/http)
item type.

[comment]: # ({/b469f540-b469f540})

[comment]: # ({dbdbf69a-dbdbf69a})
### New templates

New templates are available for monitoring some IBM, Dell, HP, Cisco UCS
and Supermicro Aten hardware:

-   Template Server IBM IMM SNMPv1/2
-   Template Server Dell iDRAC SNMPv2
-   Template Server HP iLO SNMPv2
-   Template Server Supermicro Aten SNMPv2
-   Template Server Cisco UCS SNMPv2

These templates are part of the default Zabbix dataset for new
installations. If you are upgrading from previous versions, you can
download the latest templates from the [Zabbix Git
repository](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates).
Then, while in *Configuration* → *Templates* you can import them
manually into Zabbix. If templates with the same names already exist,
the *Delete missing* options should be checked when importing to achieve
a clean import. This way the old items that are no longer in the updated
template will be removed (note that it will mean losing history of these
old items).

[comment]: # ({/dbdbf69a-dbdbf69a})

[comment]: # ({1b8fef34-1b8fef34})
### Item prototypes can depend on regular items

Zabbix 3.4 introduced dependent items (and dependent item prototypes)
that can extract data from the bulk metrics gathered by a master item.
Previously, however, item prototypes could only depend on another item
prototype from the same low-level discovery rule. This limitation has
now been lifted. An item prototype can depend on either another
prototype or a regular item from the same host.

![](../../../assets/en/manual/introduction/dependent_prototype_new.png){width="600"}

When selecting the master item for the prototype there are now two
buttons in the frontend - one for selecting a regular master item and
another for selecting a prototype master item.

[comment]: # ({/1b8fef34-1b8fef34})

[comment]: # ({6a7a01a5-6a7a01a5})
### Low-level discovery macros in item preprocessing

Low-level discovery macros now can be used in item preprocessing steps
for item prototypes.

User macros and user macros with context can be used in item
preprocessing steps for regular items and item prototypes.

[comment]: # ({/6a7a01a5-6a7a01a5})

[comment]: # ({cff26a7d-cff26a7d})
### Substring extraction of low-level discovery macro value

Macro functions are now supported with low-level discovery macros,
allowing to extract a certain part of the macro value using a regular
expression.

For example, you may want to extract the customer name and interface
number from the following LLD macro for the purposes of event tagging:

    {#IFALIAS}=customername_1

To do so, the `regsub` macro function can be used with the macro in the
event tag value field of a trigger prototype:

![](../../../assets/en/manual/config/macros/lld_macro_function.png)

For more information on macro function syntax, see: [Macro
functions](/manual/config/macros/macro_functions).

Macro functions are supported in all locations where low-level discovery
macros can be used, except for low-level discovery rule filter.

[comment]: # ({/cff26a7d-cff26a7d})

[comment]: # ({02160313-02160313})
### Host maintenance on trigger level

Host maintenance now can be limited to the triggers/services with the
corresponding tags:

![](../../../assets/en/manual/introduction/maintenance_tags.png)

Required tags can be specified when configuring maintenance periods. If
specified, host maintenance will be activated and notifications will be
suppressed only for triggers/problems with the corresponding tags, while
for all other triggers of the specified hosts problem reporting in the
frontend and problem notifications will remain active.

[comment]: # ({/02160313-02160313})

[comment]: # ({2e8531a5-2e8531a5})
##### Related changes

With host maintenance flexibility extended to trigger/service level,
some maintenance-related options have been renamed or added:

|New naming|Old naming|Affected location|Function|
|----------|----------|-----------------|--------|
|*Show suppressed problems*|*Show hosts in maintenance*|Filter option in *Monitoring* → *[Problems](/manual/web_interface/frontend_sections/monitoring/problems)*|Display problems which would otherwise be suppressed (not shown) because of host maintenance.|
|^|^|Filter option in *Monitoring* → *[Overview](/manual/web_interface/frontend_sections/monitoring/overview)* ('Triggers' as *Type*)|^|
|^|^|Configuration option in dashboard widgets:<br>*[Problem hosts](/manual/web_interface/frontend_sections/monitoring/dashboard/widgets#problem_hosts)*<br>*[Problems](/manual/web_interface/frontend_sections/monitoring/dashboard/widgets#problems)*<br>*[Problems by severity](/manual/web_interface/frontend_sections/monitoring/dashboard/widgets#problems_by_severity)*<br>|^|
|*Show suppressed problems*|\-|New filter option in *Monitoring* → *[Overview](/manual/web_interface/frontend_sections/monitoring/overview)* ('Data' as *Type*)|^|
|^|^|New option in map [configuration](/manual/config/visualization/maps/map#creating_a_map)|^|
|^|^|New option in global [notifications](/manual/web_interface/user_profile/global_notifications)|^|
|^|^|New configuration option in dashboard widgets:<br>*[Data overview](/manual/web_interface/frontend_sections/monitoring/dashboard/widgets#data_overview)*<br>*[Trigger overview](/manual/web_interface/frontend_sections/monitoring/dashboard/widgets#trigger_overview)*<br>|^|
|*Pause operations for suppressed problems*|*Pause operations while in maintenance*|Configuration option in action [operations](/manual/config/notifications/action/operation)|Delay execution of operations until host maintenance ends.|
|*Problem is suppressed*|*Maintenance status*|Action [condition](/manual/config/notifications/action/conditions)|Yes - execute action if problem is suppressed<br>No - do not execute action if problem is suppressed|

[comment]: # ({/2e8531a5-2e8531a5})

[comment]: # ({6a1db2f4-6a1db2f4})
### Single sign-on using webserver

Single sign-on to the frontend using solutions like Kerberos, NTLM and
others has been made possible by adding new HTTP authentication options.

HTTP authentication has now gained a dedicated tab in the Authentication
form in which you may define whether to send non-authenticated users to
the Zabbix login page or to the HTTP login page, specify
case-sensitive/case-insensitive login and remove the domain name from
the sent user credentials.

![](../../../assets/en/manual/introduction/auth2.png)

Case-sensitive/case-insensitive login option has also been added to LDAP
authentication details.

See also:
[Authentication](/manual/web_interface/frontend_sections/administration/authentication)

In a related development, an LDAP frontend access option has been added
for user group
[configuration](/manual/config/users_and_usergroups/usergroup#configuration).

[comment]: # ({/6a1db2f4-6a1db2f4})

[comment]: # ({246c86cd-246c86cd})
### More flexible active agent auto-registration

Previously auto-registration was run only once, which did not offer much
flexibility for cases when something on the host is changed. In the new
version, auto-registration is rerun if host metadata (HostMetadata,
HostMetadataItem parameters in agent
[configuration](/manual/appendix/config/zabbix_agentd)) is changed.

This allows to adapt monitoring based on the nature of changes on the
host. To make such a more flexible approach work, auto-registration
actions now support additional
[operations](/manual/config/notifications/action/operation):

-   remove host
-   enable host
-   remove from host group
-   unlink from template

[comment]: # ({/246c86cd-246c86cd})

[comment]: # ({340d4b03-340d4b03})
### MySQL 8.0 supported

Support for MySQL 8.0 has been added.

[comment]: # ({/340d4b03-340d4b03})

[comment]: # ({c79ff86a-c79ff86a})
### Date-based indices setup for Elasticsearch

In order to properly scale history data in Elasticsearch, multiple
indices per data type are required. It is now possible to set up such
date-based indices. For more details, see [Elasticsearch
setup](/manual/appendix/install/elastic_search_setup#storing_history_data_in_multiple_date-based_indices).

[comment]: # ({/c79ff86a-c79ff86a})

[comment]: # ({1b17be60-1b17be60})
### More secure connections for proxies

It is now possible to configure connections for both active and passive
proxies in a more secure way:

-   The allowed address range for an active proxy can be limited. When
    [configuring](/manual/distributed_monitoring/proxies#configuration)
    an active proxy in the frontend, there is a new field called *Proxy
    address*. If specified then active proxy requests will only be
    accepted from this list of IP addresses/DNS names of the active
    proxy.

![](../../../assets/en/manual/introduction/new_proxy_address.png)

-   The Server parameter in passive proxy
    [configuration](/manual/appendix/config/zabbix_proxy), which
    previously was ignored, is now mandatory. The passive proxy will
    reject an address that is not listed in the Server parameter.

[comment]: # ({/1b17be60-1b17be60})

[comment]: # ({5a8f3cd8-5a8f3cd8})
### Problem severity can be changed

Problem severity previously always depended on the severity of the
underlying trigger and could not be changed. Now problem severity in the
event table is a separate field and can be updated. Even though the
original value is based on the trigger severity, it can be updated using
the problem update screen.

[comment]: # ({/5a8f3cd8-5a8f3cd8})

[comment]: # ({abbc4abe-abbc4abe})
### Working with problems

[comment]: # ({/abbc4abe-abbc4abe})

[comment]: # ({034e98f2-034e98f2})
#### Problem update screen

The [problem update](/manual/acknowledges#updating_problems) screen is a
reworked version of the acknowledgment screen of the previous Zabbix
versions.

![](../../../assets/en/manual/introduction/update_problem.png){width="600"}

Beside renaming, the following changes have been made:

-   Problem severity can now be changed on the event level
-   Each problem update action can be done separately:
    -   You may leave a comment on the problem without acknowledging
    -   You may acknowledge a problem without commenting
    -   You may manually close a problem without acknowledging,
        commenting, etc.
-   You may define the scope for each of the actions that follow:
    *Change severity*, *Acknowledge*, *Close problem*.
-   The history list contains more symbolic information on the
    activities so far

[comment]: # ({/034e98f2-034e98f2})

[comment]: # ({e9ecc78b-e9ecc78b})
#### Other changes

-   The problem severity displayed is now event-level severity and will
    change if updated in the following locations:
    -   *Monitoring* →
        *[Problems](/manual/web_interface/frontend_sections/monitoring/problems)*
        (and the corresponding dashboard widgets and screen elements)
    -   *Monitoring* →
        *[Overview](/manual/web_interface/frontend_sections/monitoring/overview)*
        (and the corresponding dashboard widgets and screen elements)
    -   *Host group issues* and *Host issues* screen elements
-   The content of what is displayed in the Actions column of
    *Monitoring* →
    *[Problems](/manual/web_interface/frontend_sections/monitoring/problems)*
    has been expanded. Previously it only had textual information about
    the course of actions. Now all information is symbolic (icons) and,
    besides actions, also displays information on such activities as
    commenting and changing problem severity. When you roll the mouse
    over the icons, popups are displayed with more details about each
    activity.
-   Previously in [event
    details](/manual/web_interface/frontend_sections/monitoring/problems#viewing_details)
    there were separate blocks for acknowledgments, message and remote
    command actions. Now all activities on the problem are displayed in
    one block and symbolic icons are used for each stage of the problem
    life cycle, including entries for problem generation and resolution
    times.
-   Acknowledgment operations in actions have been renamed to [Update
    operations](/manual/config/notifications/action/acknowledgment_operations)
-   Event acknowledgment is now always enabled (the on/off checkbox in
    *Administration* → *General (GUI option in dropdown)* has been
    removed)
-   [Macros](/manual/appendix/macros/supported_by_location) have been
    updated:
    -   {ACK.DATE} renamed to {EVENT.UPDATE.DATE}
    -   {ACK.TIME} renamed to {EVENT.UPDATE.TIME}
    -   {ACK.MESSAGE} renamed to {EVENT.UPDATE.MESSAGE}
    -   {EVENT.ACK.HISTORY} renamed to {EVENT.UPDATE.HISTORY}
    -   {EVENT.UPDATE.ACTION} added
    -   {EVENT.SEVERITY} added
    -   {EVENT.NSEVERITY} added
-   Default messages for operations, recovery operations and update
    operations have been changed to reflect the updated macros

[comment]: # ({/e9ecc78b-e9ecc78b})

[comment]: # ({2f5d41a7-2f5d41a7})
### New graph widget

A new graph widget for the dashboards has been introduced providing a
more modern and versatile way of visualizing data collected by Zabbix.
The new widget uses vector technique to draw the image and serves as a
platform for multiple new visualization features that were not available
using the existing image drawing approach.

![](../../../assets/en/manual/introduction/new_graph.png){width="600"}

For more information see [dashboard
widgets](/manual/web_interface/frontend_sections/monitoring/dashboard/widgets#graph).

The graph widget supported before can still be used and is now renamed
to [Graph
(classic)](/manual/web_interface/frontend_sections/monitoring/dashboard/widgets#graph_classic).

[comment]: # ({/2f5d41a7-2f5d41a7})

[comment]: # ({a54d9bf5-a54d9bf5})
### Time selector redesign

The time period selector has been redesigned with the aim of providing
users a one-click opportunity to select often required periods.

![](../../../assets/en/manual/introduction/time_selector.png){width="600"}

It is also possible to zoom out the selected period (increase it two
times or by 50% in both directions), to move the period back and forth,
and select a more specific date from the date picker.

The following locations benefit from the redesign:

-   *Monitoring* → *Dashboard* (graph widget)
-   *Monitoring* → *Problems* (with *History* selected in the filter)
-   *Monitoring* → *Web* (in scenario details)
-   *Monitoring* → *Latest data* (item graph, item history, ad-hoc
    graph, templated screens)
-   *Monitoring* → *Graphs*
-   *Monitoring* → *Screens*
-   *Monitoring* → *Screens* (slideshows)
-   *Reports* → *Availability report*
-   *Reports* → *Triggers top 100*
-   *Reports* → *Audit*
-   *Reports* → *Action log*

See also: [Time period
selector](/manual/config/visualization/graphs/simple#time_period_selector)

[comment]: # ({/a54d9bf5-a54d9bf5})

[comment]: # ({848fd08e-848fd08e})
### Kiosk mode for frontend pages

In the new *Kiosk mode* for frontend pages only the page content is
displayed. Thus, for example, in dashboards only the widgets are
displayed.

|<|
|<|
|-|
|<|

Kiosk mode is accessible by clicking on the
![](../../../assets/en/manual/introduction/kiosk_button_new.png) button
when already in fullscreen mode. Kiosk mode is supported for all pages
where fullscreen mode is supported.

[comment]: # ({/848fd08e-848fd08e})

[comment]: # ({5c4a9143-5c4a9143})
### Compact view of problems

A *Compact view* mode has been added in *Monitoring* → *Problems*
allowing to maximize the amount of problems that can be seen at the same
time:

![](../../../assets/en/manual/introduction/compact_view.png){width="600"}

To activate the compact view mode, select the respective option in the
filter.

Two more new options are available in the [problem
filter](/manual/web_interface/frontend_sections/monitoring/problems#using_filter):

-   *Highlight whole row* allows to highlight the full row of unresolved
    problems using the problem severity color. This option is available
    in the standard blue and dark themes; it is not available in the
    high-contrast themes.
-   *Show timeline* allows to display/hide the visual timeline. This
    checkbox has also been added to the *Problems* dashboard widget
    configuration. Note that this option is not available when *Compact
    view* is selected.

[comment]: # ({/5c4a9143-5c4a9143})

[comment]: # ({e3c0c544-e3c0c544})
### Monitoring → Triggers removed

With *Monitoring* →
*[Problems](/manual/web_interface/frontend_sections/monitoring/problems)*
becoming the go-to section when needing to see the current problems, it
has been decided to remove the *Triggers* section from the Monitoring
menu.

Note that trigger status as such can now be viewed in *Configuration* →
*Hosts* →
*[Triggers](/manual/web_interface/frontend_sections/configuration/hosts/triggers)*
(in the new *Value* column), while trigger descriptions can be accessed
from the *Trigger* context menu and are opened in a popup window.

![triger\_dependencies.png](../../../assets/en/manual/introduction/triger_dependencies.png)

[comment]: # ({/e3c0c544-e3c0c544})

[comment]: # ({31e1f6cc-31e1f6cc})
### Inventory macro support in event tags

{INVENTORY.\*} [macros](/manual/appendix/macros/supported_by_location)
are now supported in event tags used for trigger-based [event
correlation](/manual/config/event_correlation).

Expansion of inventory macros in event tags allows to correlate events
(i.e. problems and their resolution), for example, by datacenter
location, responsible system administrator, rack number and any other
inventory item provided, thus giving administrators even more automation
possibilities.

[comment]: # ({/31e1f6cc-31e1f6cc})

[comment]: # ({864de883-864de883})
### Preventing unit conversion flexibly

Specifying a unit for an item in Zabbix results in a multiplier prefix
being added - for example, an incoming value '2048' with unit 'B' would
be displayed as '2KB'. The unit blacklist for which such conversion was
prevented in previous Zabbix versions was hardcoded and consisted of
`ms`, `rpm`, `RPM`, `%`.

In the new version, any unit can be prevented from being converted by
using a `!` prefix, for example `!B`. To better illustrate how this
conversion works with and without the blacklisting, see the following
examples of values and units:

    1024 !B → 1024 B
    1024 B → 1 KB
    61 !s → 61 s
    61 s → 1m 1s
    0 !uptime → 0 uptime
    0 uptime → 00:00:00
    0 !! → 0 !
    0 ! → 0

Even though the previous unit blacklist also still works, it is now
deprecated, so the correct way to prevent conversion for these units is
now `!ms`, `!rpm`, `!RPM`, `!%`

[comment]: # ({/864de883-864de883})

[comment]: # ({4e7e7e33-4e7e7e33})
### Multiple emails in one user media

Multiple e-mail addresses can now be specified in one [user
media](/manual/config/notifications/media/email#user_media) entry.

![](../../../assets/en/manual/introduction/new_sendto_multiple.png)

If multiple e-mail addresses are specified this way, one e-mail will be
sent to all the specified recipients.

[comment]: # ({/4e7e7e33-4e7e7e33})

[comment]: # ({dfe5bf74-dfe5bf74})
### Real-time export of events, values, trends

Real-time export of trigger events, item values and trends in a
newline-delimited JSON format is possible by specifying the new
`ExportDir` parameter in server
[configuration](/manual/appendix/config/zabbix_server). Another new
parameter - `ExportFileSize` may be used to determine the maximum size
of an individual export file.

See also: [Real-time export of events, values,
trends](/manual/appendix/install/real_time_export)

[comment]: # ({/dfe5bf74-dfe5bf74})

[comment]: # ({ecb18173-ecb18173})
### Tag-based permissions

*User groups* form has been completed with a new *Tag filter* tab that
allows to set tag-based permissions for user groups to see problems
filtered by tag name and its value:

![](../../../assets/en/manual/introduction/user_group_new.png){width="600"}

This change applies to the "*User groups*" form in *Administration* →
*User groups*.

[comment]: # ({/ecb18173-ecb18173})

[comment]: # ({40c39cc3-40c39cc3})
### Compression for server-proxy communication

All communications between Zabbix server and all proxies, and vice versa
are now unconditionally compressed. Compression lowers the bandwidth
requirements and improves data transfer speed.

The *Administration* → *Proxies* form is extended with an additional
column named "*Compression*".

![](../../../assets/en/manual/introduction/proxies_compression_new.png)

[Zlib](https://zlib.net/) library is required for compression support.

[comment]: # ({/40c39cc3-40c39cc3})

[comment]: # ({3fd87a87-3fd87a87})
### Improved database down messages

Database down messages have been improved to provide more details about
the occurred problem. Database down message from now on consists of the
following content:

    [MySQL|PostgreSQL|Oracle|IBM DB2] database <DB Name> [on <DB Host>:<DB Port>] is not available: <error message depending on the type of DBMS (database)> 

<DB Host> is not added to the message if it is defined as an empty
value and <DB Port> is not added if it is the default value ("0").

[comment]: # ({/3fd87a87-3fd87a87})

[comment]: # ({1bc64aa1-1bc64aa1})
### Use of "not" keyword

Use of "**not**" keyword in *Custom expression* field and in a
*Discovery rule* filter drop down is now supported.

![](../../../assets/en/manual/introduction/lld_rule_filter_new.png){width="600"}

This change applies to the *Event correlation rules* form in
*Configuration* → *Event correlation*, *Actions* form in *Configuration
→ Actions* and *Discovery rule* filter.

[comment]: # ({/1bc64aa1-1bc64aa1})

[comment]: # ({e992e5fd-e992e5fd})
### Items

[comment]: # ({/e992e5fd-e992e5fd})

[comment]: # ({5feb1853-5feb1853})
#### New items

-   **vfs.dir.count** agent
    [item](/manual/config/items/itemtypes/zabbix_agent) has been added
    to recursively count all entries in the given directory.

[comment]: # ({/5feb1853-5feb1853})

[comment]: # ({da847457-da847457})
#### Updated items

-   **vm.memory.size** agent
    [item](/manual/config/items/itemtypes/zabbix_agent) now supports a
    *slab* parameter.
-   The following agent
    [items](/manual/config/items/itemtypes/zabbix_agent) now support new
    **mode** values:
    -   **net.if.total** - *overruns (fifo)* and *compressed*
    -   **net.if.in** - *overruns (fifo)*, *frame*, *compressed* and
        *multicast*
    -   **net.if.out** -// overruns (fifo)//, *collisions (colls)*,
        *carrier* and *compressed*
-   For **logrt** and **logrt.count** items, a *copytruncate* log file
    rotation option has been added.
-   The following values are now supported in *Boolean to decimal*
    transformation for [Item value
    preprocessing](/manual/config/items/item#item_value_preprocessing) :
    ok, master, err, slave.
-   **zabbix\[rcache,<​cache>,<​mode>​\]** and
    **zabbix\[wcache,<​cache>,<​mode>​\]** internal
    [items](/manual/config/items/itemtypes/internal) now support a
    *pused* mode, returning the use percentage of the respective buffer.

[comment]: # ({/da847457-da847457})

[comment]: # ({09556a6d-09556a6d})
#### JMX monitoring

Zabbix Java gateway now supports working with custom MBeans returning
non-primitive data types, which override the **toString()** method.

[comment]: # ({/09556a6d-09556a6d})

[comment]: # ({493c4384-493c4384})
#### External script argument wrapping

When running an [external
script](/manual/config/items/itemtypes/external), the script arguments
are now wrapped in single quotes **`'`** instead of double quotes
**`"`**. This change allows Zabbix to pass more characters in external
check parameters, for example, the `$` sign.

[comment]: # ({/493c4384-493c4384})

[comment]: # ({c8b7a381-c8b7a381})
#### Searching IPMI sensor by full name

In the *IPMI sensor* field for [IPMI
items](/manual/config/items/itemtypes/ipmi#item_configuration) it is now
also possible to specify a search for the full name, by using a `name:`
prefix before the value.

[comment]: # ({/c8b7a381-c8b7a381})

[comment]: # ({81a4ae94-81a4ae94})
### Triggers

[comment]: # ({/81a4ae94-81a4ae94})

[comment]: # ({b8f3e9fc-b8f3e9fc})
#### Time triggers processed by history syncers

The processing of time-based trigger
[functions](/manual/appendix/triggers/functions) such as `nodata`(),
`date()`, `dayofmonth()`, `dayofweek()`, `time()` and `now()` has been
moved from timer processes to history syncers.

While previously all time-based triggers were recalculated at the same
time, creating peak loads every 30 seconds, now the time-based trigger
processing is evenly spread within those 30 seconds.

The output of history syncer and timer processes has been updated
accordingly.

Now:

    zabbix_server: history syncer #3 [processed 0 values, 0 triggers in 0.000005 sec, idle 1 sec]
    zabbix_server: timer #1 [updated 0 hosts, suppressed 0 events in 0.000472 sec, idle 59 sec]

Before:

    zabbix_server: history syncer #4 [synced 35 items in 0.166198 sec, idle 5 sec]
    zabbix_server: timer #1 [processed 3 triggers, 0 events in 0.007867 sec, 0 maint.periods in 0.005677 sec, idle 30 sec]

[comment]: # ({/b8f3e9fc-b8f3e9fc})

[comment]: # ({e6f67e61-e6f67e61})
#### Miscellaneous

-   Regular expressions and global regular expressions are now supported
    in the parameter values of the **logsource** trigger
    [function](/manual/appendix/triggers/functions).

[comment]: # ({/e6f67e61-e6f67e61})

[comment]: # ({e5ada053-e5ada053})
### Frontend

[comment]: # ({/e5ada053-e5ada053})

[comment]: # ({9f0db34f-9f0db34f})
#### Mandatory fields marked

Mandatory fields in all Zabbix frontend forms are now marked with a red
asterisk.

![](../../../assets/en/manual/introduction/mandatory_fields.png)

[comment]: # ({/9f0db34f-9f0db34f})

[comment]: # ({a1de6977-a1de6977})
#### Keyboard navigation

-   All interactive elements (except maps) can now be accessed by
    pressing the Tab key;
-   Popups can now be opened, worked with and closed by keyboard;
-   Context menu options can now be navigated by keyboard arrows.
    Pressing Esc will close the whole context menu, while pressing Enter
    will activate the selected option.
-   Year, month and date can be selected by keyboard in the redesigned
    date picker.

[comment]: # ({/a1de6977-a1de6977})

[comment]: # ({4ebc1948-4ebc1948})
#### Date picker redesign

The date picker has been redesigned to allow selecting year, month and
date by keyboard.

![](../../../assets/en/manual/introduction/date_picker.png)

It is possible to navigate between the blocks of year/month/date using
Tab and Shift+Tab. Keyboard arrows or arrow buttons allow to select the
desired value. Pressing Enter (or clicking on the desired value)
activates the choice.

Selecting time has been removed from the date picker as that is part of
the redesigned [time selector](#time_selector_redesign). The *Done*
button is also removed, because the selected date is now activated
immediately. The *Now* button has also been removed.

[comment]: # ({/4ebc1948-4ebc1948})

[comment]: # ({b77fea82-b77fea82})
#### Color picker redesign

The color picker has been redesigned and offers a larger palette of
colors to pick from:

|   |   |
|---|---|
|![](../../../assets/en/manual/introduction/colours_new.png)|In Zabbix 4.0|
|![](../../../assets/en/manual/introduction/colours_old.png)|Before Zabbix 4.0|

[comment]: # ({/b77fea82-b77fea82})

[comment]: # ({125e2cfa-125e2cfa})
#### Popup windows replaced by overlay dialogs

All popups that were opened in new windows are now opened as overlay
dialogs across the frontend.

![](../../../assets/en/manual/introduction/template_dialog.png){width="600"}

Additionally, a *Cancel* button has been added to these windows.

[comment]: # ({/125e2cfa-125e2cfa})

[comment]: # ({05b359bb-05b359bb})
#### Filtering

[comment]: # ({/05b359bb-05b359bb})

[comment]: # ({723955fd-723955fd})
##### More flexible problem filtering by tags

More flexibility has been added to problem filtering by event tag name
and value:

![](../../../assets/en/manual/introduction/problems_filter_b.png){width="600"}

-   Calculation types for tag filter conditions have been added -
    *And/Or* and *Or*
-   In tag filtering exact (case-sensitive) and similar
    (case-insensitive) string match is possible
-   The number of displayed tags can be selected - from completely
    hiding the *Tags* column to the maximum of three tags (in the new
    *Show tags* field)
-   The mode of displaying tags can be selected - by full name,
    shortened name or value name only (in the new *Tag name* field)
-   The order in which tags are displayed with the problem can be
    defined, as a comma-separated list (in the new *Tag display
    priority* field)

These changes apply to the filter in *Monitoring* →
*[Problems](/manual/web_interface/frontend_sections/monitoring/problems)*
and to the *Problems* dashboard
[widget](/manual/web_interface/frontend_sections/monitoring/dashboard/widgets#problems).

Similar changes are made to the filter in *Configuration* → *Hosts* →
*[Triggers](/manual/web_interface/frontend_sections/configuration/hosts/triggers)*
excluding *Show tags*, *Tag name* and *Tag display priority* fields.

[comment]: # ({/723955fd-723955fd})

[comment]: # ({e4bc44ba-e4bc44ba})
##### Host list

![](../../../assets/en/manual/introduction/host_filter_new.png){width="600"}

You can now filter hosts depending on whether they are monitored by
Zabbix server or Zabbix proxy. If filtering by proxy, it is also
possible to specify the proxy or proxies.

By default *Any* is selected and the auto-complete field *Proxy* is not
visible. When selecting *Proxy*, a new auto-complete field with *Proxy*
label becomes visible in the filter.

[comment]: # ({/e4bc44ba-e4bc44ba})

[comment]: # ({1013de7a-1013de7a})
##### Item list

You can now filter items depending on whether they are:

-   Regular items - created manually or from a template
-   Discovered items - created by low-level discovery

![](../../../assets/en/manual/introduction/item_filter_new.png){width="600"}

[comment]: # ({/1013de7a-1013de7a})

[comment]: # ({4e31a14c-4e31a14c})
#### Trigger value shown in trigger configuration list

Trigger value (OK/Problem) is now displayed in the trigger configuration
list, in the new *Value* column:

![](../../../assets/en/manual/introduction/triggers_new.png)

[comment]: # ({/4e31a14c-4e31a14c})

[comment]: # ({4a81e5cf-4a81e5cf})
#### Renamed operators

Condition operators have been renamed and unified everywhere in the
frontend:

|New|Old|
|---|---|
|Equals|=, Equal, Exactly|
|Does not equal|<>|
|Is greater than or equals|>=|
|Is less than or equals|<=|
|Contains|Like|
|Does not contain|Not like|

[comment]: # ({/4a81e5cf-4a81e5cf})

[comment]: # ({7ef99ea9-7ef99ea9})
#### Renamed widgets, screen elements and reports

The following elements have been renamed:

|New|Old|
|---|---|
|Problems by severity|System status|
|Problem hosts|Host status|
|System information|Status of Zabbix|

[comment]: # ({/7ef99ea9-7ef99ea9})

[comment]: # ({ce089deb-ce089deb})
#### Multiple item support in plain text widget

It is now possible to add multiple items during *Plain text* widget
configuration:

![](../../../assets/en/manual/introduction/plain_text_add.png)

*Items location* option has also been added to choose the way how
information in the widget may be displayed:

|<|
|<|
|-|
|<|

[comment]: # ({/ce089deb-ce089deb})

[comment]: # ({82a3b90c-82a3b90c})
#### Event status color adjustment

![](../../../assets/en/manual/introduction/general_trigger_display2.png)

A new *Use custom event status colors* option has been added in
*Administration* → *General* → *Trigger displaying options*. This option
allows to turn on the customization of colors for
acknowledged/unacknowledged problems.

[comment]: # ({/82a3b90c-82a3b90c})

[comment]: # ({296c377e-296c377e})
#### Changes in "Host mass update" form

![](../../../assets/en/manual/introduction/host_mass_update.png)

New checkbox *Remove host groups* and auto-complete field added. From
now users are able to remove specific host groups from hosts. In case
hosts are already in selected groups, then hosts will be removed from
these groups. In case hosts are not in selected groups, nothing will
added or removed. In case same host groups are replaced and removed at
the same time, hosts are actually left without groups.

[comment]: # ({/296c377e-296c377e})

[comment]: # ({60066c2a-60066c2a})
#### Changes in "User media" form

![](../../../assets/en/manual/introduction/use_if_severity.png){width="100"}

Trigger severity active blocks are now styled in severity colors while
inactive blocks have the same color as table background color.

This change applies to the "*Media*" tab in *Administration* → *Users* →
*User properties* form and [User profile
configuration](/manual/web_interface/user_profile) form.

[comment]: # ({/60066c2a-60066c2a})

[comment]: # ({ea3d4fd3-ea3d4fd3})
#### Twin boxes replaced with auto-select

|<|
|<|
|-|

From now some of the forms are much more user-friendly and compact. Twin
box controls are now removed and replaced with auto-select.

This change applies to the following configuration forms:

-   *Configuration* → *Hosts* → *Create/Edit host and Configuration*;
-   *Configuration* → *Host groups* → *Create/Edit host group*;
-   *Configuration* → *Maintenance* → *Create/Edit maintenance period* →
    *Hosts & Groups* tab;
-   *Configuration* → *Templates* → *Create/Edit template*;
-   *Administration* → *User groups* → //Create/Edit user group //;
-   *Administration* → *Proxies* → *Create/Edit proxy*.

[comment]: # ({/ea3d4fd3-ea3d4fd3})

[comment]: # ({78ba50fc-78ba50fc})
#### Improved widget configuration

When adding a new widget to a dashboard or editing an existing one,
change of widget type opens a form with default values set for all
fields depending on the type of newly selected widget.

[comment]: # ({/78ba50fc-78ba50fc})

[comment]: # ({16da7e83-16da7e83})
#### Graph visual improvements in a widget

Graph display in widgets has been enhanced. A generated graph is now
occupying the maximum possible space allowing more information to be
displayed.

[comment]: # ({/16da7e83-16da7e83})

[comment]: # ({349e0a18-349e0a18})
#### Frontend top bar menu improvements

A new *Support* button redirecting to Zabbix official support page is
now added to Zabbix frontend top bar menu:

![](../../../assets/en/manual/introduction/support_button_new1.png)

[comment]: # ({/349e0a18-349e0a18})

[comment]: # ({266e020b-266e020b})
#### Accessibility

Several improvements have been made to Zabbix frontend in order to make
it usable with [assistive
technologies](https://en.wikipedia.org/wiki/Assistive_technology) and
generally more friendly for visually-impaired people.

[comment]: # ({/266e020b-266e020b})

[comment]: # ({8bc6c371-8bc6c371})
##### High-contrast themes

Two new high-contrast themes have been added for Zabbix frontend:

-   High-contrast light
-   High-contrast dark

|<|
|<|
|-|
|<|

Within this development, default colors for graphs in the dark themes
have also been updated:

-   When creating a new graph in the dark theme, there will be a higher
    contrast of colors for items added to the graph (already created
    graphs are not affected).
-   When viewing simple graphs in the dark theme, colors for items will
    be in higher contrast.

[comment]: # ({/8bc6c371-8bc6c371})

[comment]: # ({2320c198-2320c198})
##### Screen reader-friendly features

-   Top-level navigation and user-level content is now readable by
    screenreader.
-   The dashboard and all widgets in view mode (except for the map
    navigation tree) are now readable by screenreader.
-   It is now possible to view graph values as text in a table so that
    it can be read with a screen reader. This functionality is
    implemented for [custom
    graphs](/manual/config/visualization/graphs/custom) and [ad-hoc
    graphs](/manual/config/visualization/graphs/adhoc).

![](../../../assets/en/manual/introduction/graph_values_new.png){width="600"}

-   Multi-select fields can be managed by a screen reader.

[comment]: # ({/2320c198-2320c198})

[comment]: # ({8f8863dc-8f8863dc})
##### Readable summary in maps

A hidden "aria-label" property has been added to maps allowing map
information to be read with a screen reader. Both general map
description and individual element description is available, in the
following format:

-   for map description:
    `<Map name>, <* of * items in problem state>, <* problems in total>.`
-   for describing one element with one problem:
    `<Element type>, Status <Element status>, <Element name>, <Problem description>.`
-   for describing one element with multiple problems:
    `<Element type>, Status <Element status>, <Element name>, <* problems>.`
-   for describing one element without problems:
    `<Element type>, Status <Element status>, <Element name>.`

For example, this description is available:

    'Local network, 1 of 6 elements in problem state, 1 problem in total. Host, Status problem, My host, Free disk space is less than 20% on volume \/. Host group, Status ok, Virtual servers. Host, Status ok, Server 1. Host, Status ok, Server 2. Host, Status ok, Server 3. Host, Status ok, Server 4. '

for the following map:

![](../../../assets/en/manual/introduction/map_aria_label.png){width="600"}

[comment]: # ({/8f8863dc-8f8863dc})

[comment]: # ({bd56f655-bd56f655})
##### Icons for notification type

Corresponding icons and colouring have been added at the beginning of
frontend notifications to indicate whether the message is about success,
failure or warning.

|<|
|<|
|<|
|-|
|<|
|<|

These changes allow the actual message to be on a white background,
improving overall readability.

[comment]: # ({/bd56f655-bd56f655})

[comment]: # ({60066e7a-60066e7a})
##### Green background removed

Green background has been removed:

-   for resolved problems in the severity column in *Monitoring* →
    *Problems/Triggers* and the corresponding dashboard widget

|<|
|<|
|-|
|<|

-   for devices that are up in *Monitoring* → *Discovery*

[comment]: # ({/60066e7a-60066e7a})

[comment]: # ({0daefaa3-0daefaa3})
##### Discovery status details

Discovery status details in *Monitoring* → *Discovery* are now displayed
as text inside the cell, instead of a pop-up that's visible upon mouse
over.

|   |   |
|---|---|
|In Zabbix 4.0.0|Before Zabbix 4.0.0|
|![](../../../assets/en/manual/introduction/disc_status_new.png)|![](../../../assets/en/manual/introduction/disc_status_old.png)|

In addition, green colouring is removed from cells with uptime, while
red remains in the cells with downtime.

[comment]: # ({/0daefaa3-0daefaa3})

[comment]: # ({919e9083-919e9083})
#### Configurable session cookie name

The session cookie name that Zabbix frontend uses for internal
authentication is now configurable in ZBX\_SESSION\_NAME of the frontend
[definitions](/manual/web_interface/definitions).

[comment]: # ({/919e9083-919e9083})

[comment]: # ({6ebb5572-6ebb5572})
#### Host column always displayed

The host column is now always displayed even if only one host is
selected in:

-   *Monitoring* → *Latest data*
-   *Monitoring* → *Web*
-   *Reports* → *Availability*

![](../../../assets/en/manual/introduction/host_column_on.png)

The benefits of this change are:

-   The [host
    menu](/manual/web_interface/frontend_sections/monitoring/dashboard#host_menu)
    in the latest data page is now always available with links to useful
    options
-   It is clear which host is displayed when using a screenreader

[comment]: # ({/6ebb5572-6ebb5572})

[comment]: # ({a734e9b5-a734e9b5})
#### Miscellaneous

-   The allowed character limit has been raised from 63 to 255 ASCII
    characters for fields containing DNS names. The affected forms are
    host configuration and passive proxy configuration.
-   When importing maps (*Monitoring* → *Maps* → *Import* button) the
    *Create new* option for importing images is now checked by default:

![](../../../assets/en/manual/introduction/map_import_images.png)

[comment]: # ({/a734e9b5-a734e9b5})

[comment]: # ({6d802ec1-6d802ec1})
### Macros

-   {ITEM.VALUE}, {ITEM.LASTVALUE} are now supported in the URL field of
    trigger [configuration](/manual/config/triggers/trigger).

[comment]: # ({/6d802ec1-6d802ec1})

[comment]: # ({58e5954d-58e5954d})
### Daemons

[comment]: # ({/58e5954d-58e5954d})

[comment]: # ({3f120030-3f120030})
#### Validation to avoid proxy/agent data duplication

Session tokens have been added to incoming proxy/agent data along with
virtual IDs that are assigned to incoming values. The value ID is a
simple ascending counter, unique within one data session (identified by
the session token). This ID is used to discard duplicate values that
might be sent in poor connectivity environments. For more details on the
protocols, see:

-   [Server-proxy data exchange
    protocol](/manual/appendix/protocols/server_proxy)
-   [Active agent
    checks](/manual/appendix/items/activepassive#sending_in_collected_data)

Data without session token will be accepted without validation for
duplicate values, ensuring backwards compatibility.

[comment]: # ({/3f120030-3f120030})

[comment]: # ({9883edbd-9883edbd})
#### Miscellaneous

-   Command line arguments that exceed 2KB are now supported in proc.num
    and proc.mem checks on AIX platform.

[comment]: # ({/9883edbd-9883edbd})

[comment]: # ({f3c73c12-f3c73c12})
### Performance

[comment]: # ({/f3c73c12-f3c73c12})

[comment]: # ({4e0f1c8a-4e0f1c8a})
#### Server performance

Zabbix server performance has been improved by replacing semaphores with
pthread mutexes and read-write locks.

[comment]: # ({/4e0f1c8a-4e0f1c8a})

[comment]: # ({df45d959-df45d959})
#### Problem name generation

Problem and event names previously were generated on the fly in the
frontend and on server side based on the respective trigger name with
all the macros expanded. That lead to severe performance issues and also
made it impossible to see historical information about problems if the
trigger name had changed.

Now problem and event names are stored directly in the 'events' and
'problem' tables at the moment when an event is generated for a problem
or recovery. Zabbix frontend can search and query the respective tables
directly. This change leads to a better separation of triggers and
problems, improves performance,​ especially that of the frontend and
maintains historical problem names. However, the size of problem/​events
tables is now larger.

Note that for internal events the name contains an error message why an
object changed its state; upon recovery no name is used. For discovery
and auto-registration events no name is used.

A new {EVENT.NAME} macro is supported, returning the event/​problem name
with macros resolved.

See also the upgrade notes for:

-   [Related macro
    changes](/manual/installation/upgrade_notes_400#problem_name_generation)
-   [Related API method
    changes](/manual/installation/upgrade_notes_400#problem_name_generation)

[comment]: # ({/df45d959-df45d959})

[comment]: # ({caee1c58-caee1c58})
### Logging

-   Zabbix Java gateway logs are now easier to read, as exception stack
    trace is no longer available in error and warning level messages.

[comment]: # ({/caee1c58-caee1c58})

[comment]: # ({a9d2a47d-a9d2a47d})
### API improvements

From now on
[user.checkAuthentication](/manual/api/reference/user/user.checkauthentication)
method contains additional parameter "extend".

[comment]: # ({/a9d2a47d-a9d2a47d})

[comment]: # ({39f32d47-39f32d47})
### See also

-   [Template changes](/manual/installation/template_changes)

[comment]: # ({/39f32d47-39f32d47})
