VEEAM

Veeam Software is a privately held US-based information technology company that develops backup, disaster recovery and intelligent data management software for virtual, physical and multi-cloud infrastructures.

Available solutions




This template is for Zabbix version: 7.4

Source: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/app/veeam/backup_replication_http?at=release/7.4

Veeam Backup and Replication by HTTP

Overview

This template is designed to monitor Veeam Backup and Replication. It works without any external scripts and uses the script item.

NOTE: The native Veeam Backup & Replication REST API (port 9419) is available only in editions that include REST API functionality.

Supported editions include:

  1. Veeam Universal License (VUL) editions:
  • Foundation
  • Advanced
  • Premium
  1. Socket-based editions:
  • Enterprise
  • Enterprise Plus
  1. Community Edition
  • Supported with workload limitations defined by Veeam licensing.

See Veeam Data Platform Feature Comparison for more details.

Requirements

Zabbix version: 7.4 and higher.

Tested versions

This template has been tested on:

  • Veeam Backup and Replication, version 13.0

Configuration

Zabbix should be configured according to the instructions in the Templates out of the box section.

Setup

  1. Create a user to monitor the service or use an existing read-only account.

See Veeam Help Center for more details.

  1. Link the template to a host.
  2. Configure the following macros: {$VEEAM.API.URL}, {$VEEAM.API.VERSION}, {$VEEAM.USER}, and {$VEEAM.PASSWORD}.

Macros used

Name Description Default
{$VEEAM.API.URL}

The Veeam API endpoint is a URL in the format <scheme>://<host>:<port>.

https://localhost:9419
{$VEEAM.API.VERSION}

The REST API revision.

1.3-rev1
{$VEEAM.HTTP.PROXY}

Sets the HTTP proxy to http_proxy value. If this parameter is empty, then no proxy is used.

{$VEEAM.PASSWORD}

The password of the Veeam Backup and Replication account. It is used to obtain an access token.

{$VEEAM.USER}

The username of the Veeam Backup and Replication account. It is used to obtain an access token.

{$VEEAM.DATA.FREQUENCY}

The update interval for the get metrics item.

1m
{$VEEAM.SECURITY.DATA.FREQUENCY}

The update interval for the security analyzer best practices item.

4h
{$VEEAM.DATA.TIMEOUT}

A response timeout for the API.

30
{$CREATED.AFTER}

Returns sessions that are created after chosen days.

7
{$SESSION.NAME.MATCHES}

Filter of discoverable sessions by name.

.*
{$SESSION.NAME.NOT_MATCHES}

Filter to exclude discoverable sessions by name.

CHANGE_IF_NEEDED
{$SESSION.TYPE.MATCHES}

Filter of discoverable sessions by type.

.*
{$SESSION.TYPE.NOT_MATCHES}

Filter to exclude discoverable sessions by type.

CHANGE_IF_NEEDED
{$SESSION.RESULT.MATCHES}

Filter of discoverable sessions by result.

.*
{$SESSION.RESULT.NOT_MATCHES}

Filter to exclude discoverable sessions by result.

Success
{$PROXIES.NAME.MATCHES}

Filter of discoverable proxies by name.

.*
{$PROXIES.NAME.NOT_MATCHES}

Filter to exclude discoverable proxies by name.

CHANGE_IF_NEEDED
{$PROXIES.TYPE.MATCHES}

Filter of discoverable proxies by type.

.*
{$PROXIES.TYPE.NOT_MATCHES}

Filter to exclude discoverable proxies by type.

CHANGE_IF_NEEDED
{$REPOSITORIES.NAME.MATCHES}

Filter of discoverable repositories by name.

.*
{$REPOSITORIES.NAME.NOT_MATCHES}

Filter to exclude discoverable repositories by name.

CHANGE_IF_NEEDED
{$REPOSITORIES.TYPE.MATCHES}

Filter of discoverable repositories by type.

.*
{$REPOSITORIES.TYPE.NOT_MATCHES}

Filter to exclude discoverable repositories by type.

CHANGE_IF_NEEDED
{$JOB.NAME.MATCHES}

Filter of discoverable jobs by name.

.*
{$JOB.NAME.NOT_MATCHES}

Filter to exclude discoverable jobs by name.

CHANGE_IF_NEEDED
{$JOB.TYPE.MATCHES}

Filter of discoverable jobs by type.

.*
{$JOB.TYPE.NOT_MATCHES}

Filter to exclude discoverable jobs by type.

CHANGE_IF_NEEDED
{$JOB.STATUS.MATCHES}

Filter of discoverable jobs by status.

.*
{$JOB.STATUS.NOT_MATCHES}

Filter to exclude discoverable jobs by status.

CHANGE_IF_NEEDED
{$VEEAM.LICENSE.EXPIRY.WARN}

Number of days until the license expires.

7
{$MALWARE_EVENTS.TYPE.MATCHES}

Filter of discoverable malware events by type.

.*
{$MALWARE_EVENTS.TYPE.NOT_MATCHES}

Filter to exclude discoverable malware events by type.

CHANGE_IF_NEEDED
{$MALWARE_EVENTS.SEVERITY.MATCHES}

Filter of discoverable malware events by severity.

.*
{$MALWARE_EVENTS.SEVERITY.NOT_MATCHES}

Filter to exclude discoverable malware events by severity.

CHANGE_IF_NEEDED
{$MALWARE_EVENTS.STATE.MATCHES}

Filter of discoverable malware events by state.

.*
{$MALWARE_EVENTS.STATE.NOT_MATCHES}

Filter to exclude discoverable malware events by state.

CHANGE_IF_NEEDED
{$SECURITY_ANALYZER.STATUS.MATCHES}

Filter of discoverable security best practices by status.

.*
{$SECURITY_ANALYZER.STATUS.NOT_MATCHES}

Filter to exclude discoverable security best practices by status.

OK
{$SECURITY_ANALYZER.BEST_PRACTICE.MATCHES}

Filter of discoverable security best practices by name.

.*
{$SECURITY_ANALYZER.BEST_PRACTICE.NOT_MATCHES}

Filter to exclude discoverable security best practices by name.

CHANGE_IF_NEEDED
{$AUTH_EVENTS.NAME.MATCHES}

Filter of discoverable authorization events by name.

.*
{$AUTH_EVENTS.NAME.NOT_MATCHES}

Filter to exclude discoverable authorization events by name.

CHANGE_IF_NEEDED
{$AUTH_EVENTS.STATE.MATCHES}

Filter of discoverable authorization events by state.

.*
{$AUTH_EVENTS.STATE.NOT_MATCHES}

Filter to exclude discoverable authorization events by state.

CHANGE_IF_NEEDED
{$VEEAM.REPOSITORY.SPACE.WARN}

Repository space warning threshold, expressed in %.

80

Items

Name Description Type Key and additional info
Get metrics

The result of API requests is returned as JSON.

Script veeam.get.metrics
Get Security Analyzer results

Authenticates with the Veeam API and retrieves security analyzer best practices data.

HTTP agent veeam.security.analyzer.get

Preprocessing

  • JavaScript: The text is too long. Please see the template.

Get errors

The errors from API requests.

Dependent item veeam.get.errors

Preprocessing

  • JSON Path: $.error

    ⛔️Custom on fail: Set value to

  • Discard unchanged with heartbeat: 1h

License: Status

The status of the license.

Dependent item veeam.license.status

Preprocessing

  • JSON Path: $.license.status

  • JavaScript: The text is too long. Please see the template.

  • Discard unchanged with heartbeat: 6h

License: Expiration date

The expiration date of the license.

Dependent item veeam.license.expiration

Preprocessing

  • JSON Path: $.license.expirationDate

  • JavaScript: return Math.floor(Date.parse(value) / 1000);

  • Discard unchanged with heartbeat: 6h

License: Licensed instances

The number of licensed instances.

Dependent item veeam.license.licensed.instances

Preprocessing

  • JSON Path: $.license.instanceLicenseSummary.licensedInstancesNumber

  • Discard unchanged with heartbeat: 6h

License: Used instances

The number of used instances.

Dependent item veeam.license.used.instances

Preprocessing

  • JSON Path: $.license.instanceLicenseSummary.usedInstancesNumber

  • Discard unchanged with heartbeat: 6h

Triggers

Name Description Expression Severity Dependencies and additional info
Veeam Backup: There are errors in requests to API

Zabbix has received errors in response to API requests.

length(last(/Veeam Backup and Replication by HTTP/veeam.get.errors))>0 Average
Veeam Backup: License is expired

The Veeam license is expired.

last(/Veeam Backup and Replication by HTTP/veeam.license.status)=1 Average
Veeam Backup: License is invalid

The Veeam license is invalid.

last(/Veeam Backup and Replication by HTTP/veeam.license.status)=2 Warning
Veeam Backup: License expires soon

The Veeam license expires soon.

(last(/Veeam Backup and Replication by HTTP/veeam.license.expiration) - now()) / 86400 < {$VEEAM.LICENSE.EXPIRY.WARN} and last(/Veeam Backup and Replication by HTTP/veeam.license.expiration) > now() Warning Manual close: Yes
Veeam Backup: Used instances exceed the licensed count

The number of used instances is more than the number of licensed instances.

last(/Veeam Backup and Replication by HTTP/veeam.license.used.instances)>last(/Veeam Backup and Replication by HTTP/veeam.license.licensed.instances) Average

LLD rule Proxies discovery

Name Description Type Key and additional info
Proxies discovery

Discovery of proxies.

Dependent item veeam.proxies.discovery

Preprocessing

  • JSON Path: $.proxies.data

  • Discard unchanged with heartbeat: 6h

Item prototypes for Proxies discovery

Name Description Type Key and additional info
Server [{#NAME}]: Get data

Gets raw data collected by the proxy server.

Dependent item veeam.proxy.server.raw[{#NAME}]

Preprocessing

  • JSON Path: $.managedServers.data.[?(@.id=='{#HOST.ID}')].first()

Proxy [{#NAME}]: Get data

Gets raw data collected by the proxy with the name [{#NAME}], [{#TYPE}].

Dependent item veeam.proxy.raw[{#NAME}]

Preprocessing

  • JSON Path: $.proxies.data.[?(@.id=='{#ID}')].first()

Proxy [{#NAME}]: Max Task Count

The maximum number of concurrent tasks.

Dependent item veeam.proxy.max.task[{#NAME}]

Preprocessing

  • JSON Path: $.server.maxTaskCount

Proxy [{#NAME}]: Host name

The name of the proxy server.

Dependent item veeam.proxy.server.name[{#NAME}]

Preprocessing

  • JSON Path: $.name

Proxy [{#NAME}]: Host type

The type of the proxy server.

Dependent item veeam.proxy.server.type[{#NAME}]

Preprocessing

  • JSON Path: $.type

Proxy [{#NAME}]: Status

The status of the proxy server.

Dependent item veeam.proxy.server.status[{#NAME}]

Preprocessing

  • JSON Path: $.proxies_states.data.[?(@.id=='{#ID}')].isOnline.first()

  • Boolean to decimal

Trigger prototypes for Proxies discovery

Name Description Expression Severity Dependencies and additional info
Veeam Backup: Proxy [{#NAME}] is offline

Proxy [{#NAME}] is offline.

min(/Veeam Backup and Replication by HTTP/veeam.proxy.server.status[{#NAME}],5m)=0 High

LLD rule Repositories discovery

Name Description Type Key and additional info
Repositories discovery

Discovery of repositories.

Dependent item veeam.repositories.discovery

Preprocessing

  • JSON Path: $.repositories_states.data

  • Discard unchanged with heartbeat: 6h

Item prototypes for Repositories discovery

Name Description Type Key and additional info
Repository [{#NAME}]: Path [{#PATH}]: Get data

Gets raw data from repository with the name: [{#NAME}], [{#TYPE}].

Dependent item veeam.repositories.raw[{#ID}]

Preprocessing

  • JSON Path: $.repositories_states.data.[?(@.id=='{#ID}')].first()

Repository [{#NAME}]: Path [{#PATH}]: Capacity

The total capacity of the repository.

Dependent item veeam.repository.capacity.space[{#ID}]

Preprocessing

  • JSON Path: $.capacityGB

  • Custom multiplier: 1073741824

Repository [{#NAME}]: Path [{#PATH}]: Used space

The used space in the repository.

Dependent item veeam.repository.used.space[{#ID}]

Preprocessing

  • JSON Path: $.usedSpaceGB

  • Custom multiplier: 1073741824

Repository [{#NAME}]: Path [{#PATH}]: Free space

The free space in the repository.

Dependent item veeam.repository.free.space[{#ID}]

Preprocessing

  • JSON Path: $.freeGB

  • Custom multiplier: 1073741824

Repository [{#NAME}]: Path [{#PATH}]: Utilization space

The percentage of repository capacity in use.

Calculated veeam.repository.utilization[{#ID}]
Repository [{#NAME}]: Path [{#PATH}]: Is Out Of Date

Indicates whether the repository is out of date.

Dependent item veeam.repository.out_of_date[{#ID}]

Preprocessing

  • JSON Path: $.isOutOfDate

  • Boolean to decimal
Repository [{#NAME}]: Path [{#PATH}]: State

The online/offline state of the repository.

Dependent item veeam.repository.state[{#ID}]

Preprocessing

  • JSON Path: $.isOnline

  • Boolean to decimal

Trigger prototypes for Repositories discovery

Name Description Expression Severity Dependencies and additional info
Veeam Backup: Repository [{#NAME}] utilization is high

Utilization of the repository [{#NAME}] is high.

min(/Veeam Backup and Replication by HTTP/veeam.repository.utilization[{#ID}],5m)>{$VEEAM.REPOSITORY.SPACE.WARN} High
Veeam Backup: Repository [{#NAME}] is out of date

Repository [{#NAME}] is out of date.

last(/Veeam Backup and Replication by HTTP/veeam.repository.out_of_date[{#ID}])=1 Warning
Veeam Backup: Repository [{#NAME}] is offline

Repository [{#NAME}] is offline.

min(/Veeam Backup and Replication by HTTP/veeam.repository.state[{#ID}],5m)=0 High

LLD rule Sessions discovery

Name Description Type Key and additional info
Sessions discovery

Discovery of sessions.

Dependent item veeam.sessions.discovery

Preprocessing

  • JSON Path: $.sessions.data

  • JavaScript: The text is too long. Please see the template.

  • Discard unchanged with heartbeat: 6h

Item prototypes for Sessions discovery

Name Description Type Key and additional info
Session [{#NAME}] [{#TYPE}]: Get data

Gets raw data from session with the name: [{#NAME}], [{#TYPE}].

Dependent item veeam.sessions.raw[{#ID}]

Preprocessing

  • JSON Path: $.sessions.data.[?(@.id=='{#ID}')].first()

    ⛔️Custom on fail: Discard value

Session [{#NAME}] [{#TYPE}]: State

The state of the session. The enums used: Stopped, Starting, Stopping, Working, Pausing, Resuming, WaitingTape, Idle, Postprocessing, WaitingRepository, WaitingSlot.

Dependent item veeam.sessions.state[{#ID}]

Preprocessing

  • JSON Path: $.state

  • JavaScript: The text is too long. Please see the template.

Session [{#NAME}] [{#TYPE}]: Result

The result of the session. The enums used: None, Success, Warning, Failed.

Dependent item veeam.sessions.result[{#ID}]

Preprocessing

  • JSON Path: $.result.result

  • JavaScript: The text is too long. Please see the template.

Session [{#NAME}] [{#TYPE}]: Message

A message that explains the session result.

Dependent item veeam.sessions.message[{#ID}]

Preprocessing

  • JSON Path: $.result.message

Session [{#NAME}] [{#TYPE}]: Progress percent

The progress of the session expressed as percentage.

Dependent item veeam.sessions.progress.percent[{#ID}]

Preprocessing

  • JSON Path: $.progressPercent

Trigger prototypes for Sessions discovery

Name Description Expression Severity Dependencies and additional info
Veeam Backup: Last result session failed

The last result of the session [{#NAME}] is failed.

last(/Veeam Backup and Replication by HTTP/veeam.sessions.result[{#ID}])=4 Average Manual close: Yes

LLD rule Jobs states discovery

Name Description Type Key and additional info
Jobs states discovery

Discovery of the jobs states.

Dependent item veeam.job.state.discovery

Preprocessing

  • JSON Path: $.jobs_states.data

  • Discard unchanged with heartbeat: 6h

Item prototypes for Jobs states discovery

Name Description Type Key and additional info
Job states [{#NAME}] [{#TYPE}]: Get data

Gets raw data from the job states with the name [{#NAME}].

Dependent item veeam.jobs.states.raw[{#ID}]

Preprocessing

  • JSON Path: $.jobs_states.data.[?(@.id=='{#ID}')].first()

Job states [{#NAME}] [{#TYPE}]: Status

The current status of the job. The enums used: Running, Inactive, Disabled, Enabled, Stopping, Stopped, Starting.

Dependent item veeam.jobs.status[{#ID}]

Preprocessing

  • JSON Path: $.status

  • JavaScript: The text is too long. Please see the template.

Job states [{#NAME}] [{#TYPE}]: Last result

The last run result of the job. The enums used: None, Success, Warning, Failed.

Dependent item veeam.jobs.last.result[{#ID}]

Preprocessing

  • JSON Path: $.lastResult

  • JavaScript: The text is too long. Please see the template.

Trigger prototypes for Jobs states discovery

Name Description Expression Severity Dependencies and additional info
Veeam Backup: Last result job failed

The last run result of the job [{#NAME}] is failed.

last(/Veeam Backup and Replication by HTTP/veeam.jobs.last.result[{#ID}])=4 Average Manual close: Yes

LLD rule Malware events discovery

Name Description Type Key and additional info
Malware events discovery

Discovery of malware events.

Dependent item veeam.malware.events.discovery

Preprocessing

  • JSON Path: $.malware_events.data

  • Discard unchanged with heartbeat: 6h

Item prototypes for Malware events discovery

Name Description Type Key and additional info
Malware event [{#MACHINE}]: Get data

Gets raw data from malware event with the ID [{#ID}].

Dependent item veeam.malware.event.get[{#ID}]

Preprocessing

  • JSON Path: $.malware_events.data.[?(@.id=='{#ID}')].first()

    ⛔️Custom on fail: Discard value

Malware event [{#MACHINE}]: Severity

The severity level of the malware event. The enums used: Clean, Suspicious, Infected, Informative.

Dependent item veeam.malware.event.severity[{#ID}]

Preprocessing

  • JSON Path: $.severity

  • JavaScript: The text is too long. Please see the template.

  • Discard unchanged with heartbeat: 6h

Malware event [{#MACHINE}]: State

The state of the malware event. The enums used: Created, FalsePositive.

Dependent item veeam.malware.event.state[{#ID}]

Preprocessing

  • JSON Path: $.state

  • JavaScript: The text is too long. Please see the template.

  • Discard unchanged with heartbeat: 6h

Trigger prototypes for Malware events discovery

Name Description Expression Severity Dependencies and additional info
Veeam Backup: Malware infection detected on [{#MACHINE}]

A malware infection has been detected on the machine [{#MACHINE}]. The malware event ID is {#ID}.

last(/Veeam Backup and Replication by HTTP/veeam.malware.event.severity[{#ID}])=3 High Manual close: Yes
Veeam Backup: Suspicious malware activity detected on [{#MACHINE}]

Suspicious malware activity has been detected on the machine [{#MACHINE}]. The malware event ID is {#ID}.

last(/Veeam Backup and Replication by HTTP/veeam.malware.event.severity[{#ID}])=2 Average Manual close: Yes

LLD rule Authorization events discovery

Name Description Type Key and additional info
Authorization events discovery

Discovery of authorization events.

Dependent item veeam.authorization.events.discovery

Preprocessing

  • JSON Path: $.authorization_events.data

  • Discard unchanged with heartbeat: 6h

Item prototypes for Authorization events discovery

Name Description Type Key and additional info
Authorization event [{#NAME}]: Get data

Gets raw data from authorization event with the ID [{#ID}].

Dependent item veeam.authorization.event.get[{#ID}]

Preprocessing

  • JSON Path: $.authorization_events.data.[?(@.id=='{#ID}')].first()

    ⛔️Custom on fail: Discard value

Authorization event [{#NAME}]: State

The state of the authorization event. The enums used: Pending, Approved, Rejected, Expired, Info, CockpitMessage.

Dependent item veeam.authorization.event.state[{#ID}]

Preprocessing

  • JSON Path: $.state

  • JavaScript: The text is too long. Please see the template.

  • Discard unchanged with heartbeat: 6h

Trigger prototypes for Authorization events discovery

Name Description Expression Severity Dependencies and additional info
Veeam Backup: Authorization event [{#NAME}] is rejected

The authorization event [{#NAME}] has been rejected.

last(/Veeam Backup and Replication by HTTP/veeam.authorization.event.state[{#ID}])=3 High Manual close: Yes

LLD rule Security analyzer discovery

Name Description Type Key and additional info
Security analyzer discovery

Discovery of security best practices compliance checks.

Dependent item veeam.security.analyzer.discovery

Preprocessing

  • JSON Path: $.items

  • Discard unchanged with heartbeat: 6h

Item prototypes for Security analyzer discovery

Name Description Type Key and additional info
Security [{#BEST_PRACTICE}]: Status

The compliance status of the security best practice. The enums used: Analyzing, None, OK, Suppressed, UnableToCheck, Violation.

Dependent item veeam.security.best.practice.status[{#ID}]

Preprocessing

  • JSON Path: $.items.[?(@.id=='{#ID}')].status.first()

    ⛔️Custom on fail: Discard value

  • JavaScript: The text is too long. Please see the template.

  • Discard unchanged with heartbeat: 6h

Trigger prototypes for Security analyzer discovery

Name Description Expression Severity Dependencies and additional info
Veeam Backup: Security best practice violation: [{#BEST_PRACTICE}]

The security best practice [{#BEST_PRACTICE}] has a violation status.

last(/Veeam Backup and Replication by HTTP/veeam.security.best.practice.status[{#ID}])=6 High Manual close: Yes
Veeam Backup: Security best practice unable to check: [{#BEST_PRACTICE}]

The security best practice [{#BEST_PRACTICE}] could not be checked.

last(/Veeam Backup and Replication by HTTP/veeam.security.best.practice.status[{#ID}])=5 Warning Manual close: Yes

Feedback

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

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

Articles and documentation

+ Propose new article

Didn't find what you are looking for?