MS Exchange

Microsoft Exchange Server is a mail server and calendaring server developed by Microsoft. It runs exclusively on Windows Server operating systems.

Available solutions




This template is for Zabbix version: 5.4
Also available for: 5.0

Source: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/app/exchange?at=release/5.4

Microsoft Exchange Server 2016 by Zabbix agent

Overview

For Zabbix version: 5.4 and higher
Official Template for Microsoft Exchange Server 2016.

This template was tested on:

  • Microsoft Exchange Server, version 2016 CU18
  • Zabbix, version 5.4

Setup

See Zabbix template operation for basic instructions.

Metrics are collected by Zabbix agent.

1. Import the template into Zabbix.

2. Link the imported template to a host with MS Exchange.

Note that template doesn't provide information about Windows services state. Recommended to use it with "OS Windows by Zabbix agent" template.

Zabbix configuration

No specific Zabbix configuration is required.

Macros used

Name Description Default
{$MS.EXCHANGE.DB.ACTIVE.READ.TIME}

The time during which the active database read operations latency may exceed the threshold.

5m
{$MS.EXCHANGE.DB.ACTIVE.READ.WARN}

Threshold for active database read operations latency trigger.

0.02
{$MS.EXCHANGE.DB.ACTIVE.WRITE.TIME}

The time during which the active database write operations latency may exceed the threshold.

10m
{$MS.EXCHANGE.DB.ACTIVE.WRITE.WARN}

Threshold for active database write operations latency trigger.

0.05
{$MS.EXCHANGE.DB.FAULTS.TIME}

The time during which the database page faults may exceed the threshold.

5m
{$MS.EXCHANGE.DB.FAULTS.WARN}

Threshold for database page faults trigger.

0
{$MS.EXCHANGE.DB.PASSIVE.READ.TIME}

The time during which the passive database read operations latency may exceed the threshold.

5m
{$MS.EXCHANGE.DB.PASSIVE.READ.WARN}

Threshold for passive database read operations latency trigger.

0.2
{$MS.EXCHANGE.DB.PASSIVE.WRITE.TIME}

The time during which the passive database write operations latency may exceed the threshold.

10m
{$MS.EXCHANGE.LDAP.TIME}

The time during which the LDAP metrics may exceed the threshold.

5m
{$MS.EXCHANGE.LDAP.WARN}

Threshold for LDAP triggers.

0.05
{$MS.EXCHANGE.LOG.STALLS.TIME}

The time during which the log records stalled may exceed the threshold.

10m
{$MS.EXCHANGE.LOG.STALLS.WARN}

Threshold for log records stalled trigger.

100
{$MS.EXCHANGE.PERF.INTERVAL}

Update interval for perf_counter_en items.

60
{$MS.EXCHANGE.RPC.COUNT.TIME}

The time during which the RPC total requests may exceed the threshold.

5m
{$MS.EXCHANGE.RPC.COUNT.WARN}

Threshold for LDAP triggers.

70
{$MS.EXCHANGE.RPC.TIME}

The time during which the RPC requests latency may exceed the threshold.

10m
{$MS.EXCHANGE.RPC.WARN}

Threshold for RPC requests latency trigger.

0.05

Template links

There are no template links in this template.

Discovery rules

Name Description Type Key and additional info
Databases discovery

Discovery of Exchange databases.

ZABBIX_PASSIVE perf_instance.discovery["MSExchange Active Manager"]

Preprocessing:

- JAVASCRIPT: Text is too long. Please see the template.

Web services discovery

Discovery of Exchange web services.

ZABBIX_PASSIVE perf_instance_en.discovery["Web Service"]
LDAP discovery

Discovery of domain controller.

ZABBIX_PASSIVE perf_instance_en.discovery["MSExchange ADAccess Domain Controllers"]

Items collected

Group Name Description Type Key and additional info
MS Exchange MS Exchange: Databases total mounted

Shows the number of active database copies on the server.

ZABBIX_PASSIVE perf_counter_en["\MSExchange Active Manager(_total)\Database Mounted"]

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 3h

MS Exchange MS Exchange [Client Access Server]: ActiveSync: ping command pending

Shows the number of ping commands currently pending in the queue.

ZABBIX_PASSIVE perf_counter_en["\MSExchange ActiveSync\Ping Commands Pending", {$MS.EXCHANGE.PERF.INTERVAL}]
MS Exchange MS Exchange [Client Access Server]: ActiveSync: requests per second

Shows the number of HTTP requests received from the client via ASP.NET per second. Determines the current Exchange ActiveSync request rate. Used only to determine current user load.

ZABBIX_PASSIVE perf_counter_en["\MSExchange ActiveSync\Requests/sec", {$MS.EXCHANGE.PERF.INTERVAL}]
MS Exchange MS Exchange [Client Access Server]: ActiveSync: sync commands per second

Shows the number of sync commands processed per second. Clients use this command to synchronize items within a folder.

ZABBIX_PASSIVE perf_counter_en["\MSExchange ActiveSync\Sync Commands/sec", {$MS.EXCHANGE.PERF.INTERVAL}]
MS Exchange MS Exchange [Client Access Server]: Autodiscover: requests per second

Shows the number of Autodiscover service requests processed each second. Determines current user load.

ZABBIX_PASSIVE perf_counter_en["\MSExchangeAutodiscover\Requests/sec", {$MS.EXCHANGE.PERF.INTERVAL}]
MS Exchange MS Exchange [Client Access Server]: Availability Service: availability requests per second

Shows the number of requests serviced per second. The request can be only for free/ busy information or include suggestions. One request may contain multiple mailboxes. Determines the rate at which Availability service requests are occurring.

ZABBIX_PASSIVE perf_counter_en["\MSExchange Availability Service\Availability Requests (sec)", {$MS.EXCHANGE.PERF.INTERVAL}]
MS Exchange MS Exchange [Client Access Server]: Outlook Web App: current unique users

Shows the number of unique users currently logged on to Outlook Web App. This value monitors the number of unique active user sessions, so that users are only removed from this counter after they log off or their session times out. Determines current user load.

ZABBIX_PASSIVE perf_counter_en["\MSExchange OWA\Current Unique Users", {$MS.EXCHANGE.PERF.INTERVAL}]
MS Exchange MS Exchange [Client Access Server]: Outlook Web App: requests per second

Shows the number of requests handled by Outlook Web App per second. Determines current user load.

ZABBIX_PASSIVE perf_counter_en["\MSExchange OWA\Requests/sec", {$MS.EXCHANGE.PERF.INTERVAL}]
MS Exchange MS Exchange [Client Access Server]: MSExchangeWS: requests per second

Shows the number of requests processed each second. Determines current user load.

ZABBIX_PASSIVE perf_counter_en["\MSExchangeWS\Requests/sec", {$MS.EXCHANGE.PERF.INTERVAL}]
MS Exchange Active Manager [{#INSTANCE}]: Database copy role

Database copy active or passive role.

ZABBIX_PASSIVE perf_counter_en["\MSExchange Active Manager({#INSTANCE})\Database Copy Role Active"]

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 3h

MS Exchange Information Store [{#INSTANCE}]: Database state

Database state. Possible values:

0: Database without any copy and dismounted.

1: Database is a primary database and mounted.

2: Database is a passive copy and the state is healthy.

ZABBIX_PASSIVE perf_counter_en["\MSExchangeIS Store({#INSTANCE})\Database State"]

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 3m

MS Exchange Information Store [{#INSTANCE}]: Active mailboxes count

Number of active mailboxes in this database.

ZABBIX_PASSIVE perf_counter_en["\MSExchangeIS Store({#INSTANCE})\Active mailboxes"]
MS Exchange Information Store [{#INSTANCE}]: Page faults per second

Indicates the rate of page faults that can't be serviced because there are no pages available for allocation from the database cache. If this counter is above 0, it's an indication that the MSExchange Database\I/O Database Writes (Attached) Average Latency is too high.

ZABBIX_PASSIVE perf_counter_en["\MSExchange Database({#INF.STORE})\Database Page Fault Stalls/sec", {$MS.EXCHANGE.PERF.INTERVAL}]
MS Exchange Information Store [{#INSTANCE}]: Log records stalled

Indicates the number of log records that can't be added to the log buffers per second because the log buffers are full. The average value should be below 10 per second. Spikes (maximum values) shouldn't be higher than 100 per second.

ZABBIX_PASSIVE perf_counter_en["\MSExchange Database({#INF.STORE})\Log Record Stalls/sec", {$MS.EXCHANGE.PERF.INTERVAL}]
MS Exchange Information Store [{#INSTANCE}]: Log threads waiting

Indicates the number of threads waiting to complete an update of the database by writing their data to the log.

ZABBIX_PASSIVE perf_counter_en["\MSExchange Database({#INF.STORE})\Log Threads Waiting", {$MS.EXCHANGE.PERF.INTERVAL}]
MS Exchange Information Store [{#INSTANCE}]: RPC requests per second

Shows the number of RPC operations per second for each database instance.

ZABBIX_PASSIVE perf_counter_en["\MSExchangeIS Store({#INSTANCE})\RPC Operations/sec", {$MS.EXCHANGE.PERF.INTERVAL}]
MS Exchange Information Store [{#INSTANCE}]: RPC requests latency

RPC Latency average is the average latency of RPC requests per database. Average is calculated over all RPCs since exrpc32 was loaded. Should be less than 50ms at all times, with spikes less than 100ms.

ZABBIX_PASSIVE perf_counter_en["\MSExchangeIS Store({#INSTANCE})\RPC Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]

Preprocessing:

- MULTIPLIER: 0.001

MS Exchange Information Store [{#INSTANCE}]: RPC requests total

Indicates the overall RPC requests currently executing within the information store process. Should be below 70 at all times.

ZABBIX_PASSIVE perf_counter_en["\MSExchangeIS Store({#INSTANCE})\RPC requests", {$MS.EXCHANGE.PERF.INTERVAL}]
MS Exchange Database Counters [{#INSTANCE}]: Active database read operations per second

Shows the number of database read operations.

ZABBIX_PASSIVE perf_counter_en["\MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Reads (Attached)/sec", {$MS.EXCHANGE.PERF.INTERVAL}]
MS Exchange Database Counters [{#INSTANCE}]: Active database read operations latency

Shows the average length of time per database read operation. Should be less than 20 ms on average.

ZABBIX_PASSIVE perf_counter_en["\MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Reads (Attached) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]

Preprocessing:

- MULTIPLIER: 0.001

MS Exchange Database Counters [{#INSTANCE}]: Passive database read operations latency

Shows the average length of time per passive database read operation. Should be less than 200ms on average.

ZABBIX_PASSIVE perf_counter_en["\MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Reads (Recovery) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]

Preprocessing:

- MULTIPLIER: 0.001

MS Exchange Database Counters [{#INSTANCE}]: Active database write operations per second

Shows the number of database write operations per second for each attached database instance.

ZABBIX_PASSIVE perf_counter_en["\MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Writes (Attached)/sec", {$MS.EXCHANGE.PERF.INTERVAL}]
MS Exchange Database Counters [{#INSTANCE}]: Active database write operations latency

Shows the average length of time per database write operation. Should be less than 50ms on average.

ZABBIX_PASSIVE perf_counter_en["\MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Writes (Attached) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]

Preprocessing:

- MULTIPLIER: 0.001

MS Exchange Database Counters [{#INSTANCE}]: Passive database write operations latency

Shows the average length of time, in ms, per passive database write operation. Should be less than the read latency for the same instance, as measured by the MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Reads (Recovery) Average Latency counter.

ZABBIX_PASSIVE perf_counter_en["\MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Writes (Recovery) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]

Preprocessing:

- MULTIPLIER: 0.001

MS Exchange Web Service [{#INSTANCE}]: Current connections

Shows the current number of connections established to the each Web Service.

ZABBIX_PASSIVE perf_counter_en["\Web Service({#INSTANCE})\Current Connections", {$MS.EXCHANGE.PERF.INTERVAL}]
MS Exchange Domain Controller [{#INSTANCE}]: Read time

Time that it takes to send an LDAP read request to the domain controller in question and get a response. Should ideally be below 50 ms; spikes below 100 ms are acceptable.

ZABBIX_PASSIVE perf_counter_en["\MSExchange ADAccess Domain Controllers({#INSTANCE})\LDAP Read Time", {$MS.EXCHANGE.PERF.INTERVAL}]

Preprocessing:

- MULTIPLIER: 0.001

MS Exchange Domain Controller [{#INSTANCE}]: Search time

Time that it takes to send an LDAP search request and get a response. Should ideally be below 50 ms; spikes below 100 ms are acceptable.

ZABBIX_PASSIVE perf_counter_en["\MSExchange ADAccess Domain Controllers({#INSTANCE})\LDAP Search Time", {$MS.EXCHANGE.PERF.INTERVAL}]

Preprocessing:

- MULTIPLIER: 0.001

Triggers

Name Description Expression Severity Dependencies and additional info
Information Store [{#INSTANCE}]: Page faults is too high (>{$MS.EXCHANGE.DB.FAULTS.WARN} for {$MS.EXCHANGE.DB.FAULTS.TIME})

Too much page faults stalls for database "{#INSTANCE}". This counter should be 0 on production servers.

{TEMPLATE_NAME:perf_counter_en["\MSExchange Database({#INF.STORE})\Database Page Fault Stalls/sec", {$MS.EXCHANGE.PERF.INTERVAL}].min({$MS.EXCHANGE.DB.FAULTS.TIME})}>{$MS.EXCHANGE.DB.FAULTS.WARN} AVERAGE
Information Store [{#INSTANCE}]: Log records stalls is too high (>{$MS.EXCHANGE.LOG.STALLS.WARN} for {$MS.EXCHANGE.LOG.STALLS.TIME})

Stalled log records too high. The average value should be less than 10 threads waiting.

{TEMPLATE_NAME:perf_counter_en["\MSExchange Database({#INF.STORE})\Log Record Stalls/sec", {$MS.EXCHANGE.PERF.INTERVAL}].avg({$MS.EXCHANGE.LOG.STALLS.TIME})}>{$MS.EXCHANGE.LOG.STALLS.WARN} AVERAGE
Information Store [{#INSTANCE}]: RPC Requests latency is too high (>{$MS.EXCHANGE.RPC.WARN}s for {$MS.EXCHANGE.RPC.TIME})

Should be less than 50ms at all times, with spikes less than 100ms.

{TEMPLATE_NAME:perf_counter_en["\MSExchangeIS Store({#INSTANCE})\RPC Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}].min({$MS.EXCHANGE.RPC.TIME})}>{$MS.EXCHANGE.RPC.WARN} WARNING
Information Store [{#INSTANCE}]: RPC Requests total count is too high (>{$MS.EXCHANGE.RPC.COUNT.WARN} for {$MS.EXCHANGE.RPC.COUNT.TIME})

Should be below 70 at all times.

{TEMPLATE_NAME:perf_counter_en["\MSExchangeIS Store({#INSTANCE})\RPC requests", {$MS.EXCHANGE.PERF.INTERVAL}].min({$MS.EXCHANGE.RPC.COUNT.TIME})}>{$MS.EXCHANGE.RPC.COUNT.WARN} WARNING
Database Counters [{#INSTANCE}]: Average read time latency is too high (>{$MS.EXCHANGE.DB.ACTIVE.READ.WARN}s for {$MS.EXCHANGE.DB.ACTIVE.READ.TIME})

Should be less than 20ms on average.

{TEMPLATE_NAME:perf_counter_en["\MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Reads (Attached) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}].min({$MS.EXCHANGE.DB.ACTIVE.READ.TIME})}>{$MS.EXCHANGE.DB.ACTIVE.READ.WARN} WARNING
Database Counters [{#INSTANCE}]: Average read time latency is too high (>{$MS.EXCHANGE.DB.PASSIVE.READ.WARN}s for {$MS.EXCHANGE.DB.PASSIVE.READ.TIME})

Should be less than 200ms on average.

{TEMPLATE_NAME:perf_counter_en["\MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Reads (Recovery) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}].min({$MS.EXCHANGE.DB.PASSIVE.READ.TIME})}>{$MS.EXCHANGE.DB.PASSIVE.READ.WARN} WARNING
Database Counters [{#INSTANCE}]: Average write time latency is too high for {$MS.EXCHANGE.DB.ACTIVE.WRITE.TIME}

Should be less than 50ms on average.

{TEMPLATE_NAME:perf_counter_en["\MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Writes (Attached) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}].min({$MS.EXCHANGE.DB.ACTIVE.WRITE.TIME})}>{$MS.EXCHANGE.DB.ACTIVE.WRITE.WARN} WARNING
Database Counters [{#INSTANCE}]: Average write time latency is higher than read time latency for {$MS.EXCHANGE.DB.PASSIVE.WRITE.TIME}

Should be less than the read latency for the same instance, as measured by the MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Reads (Recovery) Average Latency counter.

{TEMPLATE_NAME:perf_counter_en["\MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Writes (Recovery) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}].avg({$MS.EXCHANGE.DB.PASSIVE.WRITE.TIME})}>{Microsoft Exchange Server 2016 by Zabbix agent:perf_counter_en["\MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Reads (Recovery) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}].avg({$MS.EXCHANGE.DB.PASSIVE.WRITE.TIME})} WARNING
Domain Controller [{#INSTANCE}]: LDAP read time is too high (>{$MS.EXCHANGE.LDAP.WARN}s for {$MS.EXCHANGE.LDAP.TIME})

Should be less than 50ms at all times, with spikes less than 100ms.

{TEMPLATE_NAME:perf_counter_en["\MSExchange ADAccess Domain Controllers({#INSTANCE})\LDAP Read Time", {$MS.EXCHANGE.PERF.INTERVAL}].min({$MS.EXCHANGE.LDAP.TIME})}>{$MS.EXCHANGE.LDAP.WARN} AVERAGE
Domain Controller [{#INSTANCE}]: LDAP search time is too high (>{$MS.EXCHANGE.LDAP.WARN}s for {$MS.EXCHANGE.LDAP.TIME})

Should be less than 50ms at all times, with spikes less than 100ms.

{TEMPLATE_NAME:perf_counter_en["\MSExchange ADAccess Domain Controllers({#INSTANCE})\LDAP Search Time", {$MS.EXCHANGE.PERF.INTERVAL}].min({$MS.EXCHANGE.LDAP.TIME})}>{$MS.EXCHANGE.LDAP.WARN} AVERAGE

Feedback

Please report any issues with the template at https://support.zabbix.com

You can also provide a feedback, discuss the template or ask for help with it at ZABBIX forums.

Articles and documentation

+ Propose new article

Didn't find what you are looking for?