<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export><version>5.0</version><date>2021-11-21T22:06:00Z</date><groups><group><name>Templates/Operating systems</name></group></groups><templates><template><template>restic backup by Zabbix agent</template><name>restic backup by Zabbix agent</name><description>## Overview

Get alerts when your restic backup have failed, or didn't finish on time. The default is in last 26 hours but can be changed via a MACRO.
 
Two MACROs are available:
* `{$BACKUP_STATUS_FILE}` which contain the full path of the status file. Default is `/home/backup/status.json`.
* `{$MAX_HOURS_BETWEEN}` which contain the maximum number of hours before it triggers an alert. Default is `26` hours (for backup running once a day, plus some time if it takes a bit longer than usual).


 This is using the status file generated by [resticprofile](https://github.com/creativeprojects/resticprofile/).
 
For more information, see the [README](https://github.com/creativeprojects/resticprofile/tree/master/contrib/zabbix).

</description><groups><group><name>Templates/Operating systems</name></group></groups><applications><application><name>Backup</name></application></applications><items><item><name>Status file</name><key>vfs.file.contents[{$BACKUP_STATUS_FILE}]</key><delay>1h</delay><trends>0</trends><value_type>TEXT</value_type><applications><application><name>Backup</name></application></applications><preprocessing><step><type>DISCARD_UNCHANGED_HEARTBEAT</type><params>1d</params></step></preprocessing></item></items><discovery_rules><discovery_rule><name>Profiles</name><type>DEPENDENT</type><key>backup.profiles</key><delay>0</delay><item_prototypes><item_prototype><name>Backup profile {#PROFILENAME} / {#PROFILECOMMAND} error</name><type>DEPENDENT</type><key>backup.error[{#PROFILENAME}, {#PROFILECOMMAND}]</key><delay>0</delay><trends>0</trends><value_type>TEXT</value_type><applications><application><name>Backup</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.profiles[&quot;{#PROFILENAME}&quot;][&quot;{#PROFILECOMMAND}&quot;].error</params></step></preprocessing><master_item><key>vfs.file.contents[{$BACKUP_STATUS_FILE}]</key></master_item></item_prototype><item_prototype><name>Backup profile {#PROFILENAME} / {#PROFILECOMMAND} success</name><type>DEPENDENT</type><key>backup.success[{#PROFILENAME}, {#PROFILECOMMAND}]</key><delay>0</delay><applications><application><name>Backup</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.profiles[&quot;{#PROFILENAME}&quot;][&quot;{#PROFILECOMMAND}&quot;].success</params></step><step><type>BOOL_TO_DECIMAL</type><params/></step></preprocessing><master_item><key>vfs.file.contents[{$BACKUP_STATUS_FILE}]</key></master_item><trigger_prototypes><trigger_prototype><expression>{last()}=0</expression><name>Last {#PROFILENAME} / {#PROFILECOMMAND} failed</name><priority>HIGH</priority><manual_close>YES</manual_close></trigger_prototype></trigger_prototypes></item_prototype><item_prototype><name>Backup profile {#PROFILENAME} / {#PROFILECOMMAND} time</name><type>DEPENDENT</type><key>backup.time[{#PROFILENAME}, {#PROFILECOMMAND}]</key><delay>0</delay><units>unixtime</units><applications><application><name>Backup</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.profiles[&quot;{#PROFILENAME}&quot;][&quot;{#PROFILECOMMAND}&quot;].time</params></step><step><type>JAVASCRIPT</type><params>return Math.round(Date.parse(value)/1000)</params></step></preprocessing><master_item><key>vfs.file.contents[{$BACKUP_STATUS_FILE}]</key></master_item><trigger_prototypes><trigger_prototype><expression>{now()}-{last()}&gt;({$MAX_HOURS_BETWEEN}*3600)</expression><name>Last {#PROFILENAME} / {#PROFILECOMMAND} did not run</name><priority>HIGH</priority><description>Last profile has not finished on time (or has not started):&#13;
last run finished more than {$MAX_HOURS_BETWEEN} hour(s) ago</description><manual_close>YES</manual_close></trigger_prototype></trigger_prototypes></item_prototype></item_prototypes><master_item><key>vfs.file.contents[{$BACKUP_STATUS_FILE}]</key></master_item><preprocessing><step><type>JAVASCRIPT</type><params>var output = []

var status = JSON.parse(value)
Object.keys(status.profiles).forEach(function(profileName) {
    Object.keys(status.profiles[profileName]).forEach(function(entry) {
        output.push({
            &quot;{#PROFILENAME}&quot;: profileName,
            &quot;{#PROFILECOMMAND}&quot;: entry,
        })
    })
});

return JSON.stringify(output)</params></step></preprocessing></discovery_rule></discovery_rules><tags><tag><tag>from</tag><value>local</value></tag></tags><macros><macro><macro>{$BACKUP_STATUS_FILE}</macro><value>/home/backup/status.json</value><description>resticprofile status file</description></macro><macro><macro>{$MAX_HOURS_BETWEEN}</macro><value>26</value></macro></macros></template><template><template>restic backup by Zabbix agent active</template><name>restic backup by Zabbix agent active</name><description>## Overview

Get alerts when your restic backup have failed, or didn't finish on time. The default is in last 26 hours but can be changed via a MACRO.
 
Two MACROs are available:
* `{$BACKUP_STATUS_FILE}` which contain the full path of the status file. Default is `/home/backup/status.json`.
* `{$MAX_HOURS_BETWEEN}` which contain the maximum number of hours before it triggers an alert. Default is `26` hours (for backup running once a day, plus some time if it takes a bit longer than usual).


 This is using the status file generated by [resticprofile](https://github.com/creativeprojects/resticprofile/).
 
For more information, see the [README](https://github.com/creativeprojects/resticprofile/tree/master/contrib/zabbix).

## Overview

Get alerts when your restic backup have failed, or didn't finish on time. The default is in last 26 hours but can be changed via a MACRO.
 
Two MACROs are available:
* `{$BACKUP_STATUS_FILE}` which contain the full path of the status file. Default is `/home/backup/status.json`.
* `{$MAX_HOURS_BETWEEN}` which contain the maximum number of hours before it triggers an alert. Default is `26` hours (for backup running once a day, plus some time if it takes a bit longer than usual).


 This is using the status file generated by [resticprofile](https://github.com/creativeprojects/resticprofile/).
 
For more information, see the [README](https://github.com/creativeprojects/resticprofile/tree/master/contrib/zabbix).

</description><groups><group><name>Templates/Operating systems</name></group></groups><applications><application><name>Backup</name></application></applications><items><item><name>Status file</name><type>ZABBIX_ACTIVE</type><key>vfs.file.contents[{$BACKUP_STATUS_FILE}]</key><delay>1h</delay><trends>0</trends><value_type>TEXT</value_type><applications><application><name>Backup</name></application></applications><preprocessing><step><type>DISCARD_UNCHANGED_HEARTBEAT</type><params>1d</params></step></preprocessing></item></items><discovery_rules><discovery_rule><name>Profiles</name><type>DEPENDENT</type><key>backup.profiles</key><delay>0</delay><item_prototypes><item_prototype><name>Backup profile {#PROFILENAME} / {#PROFILECOMMAND} error</name><type>DEPENDENT</type><key>backup.error[{#PROFILENAME}, {#PROFILECOMMAND}]</key><delay>0</delay><trends>0</trends><value_type>TEXT</value_type><applications><application><name>Backup</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.profiles[&quot;{#PROFILENAME}&quot;][&quot;{#PROFILECOMMAND}&quot;].error</params></step></preprocessing><master_item><key>vfs.file.contents[{$BACKUP_STATUS_FILE}]</key></master_item></item_prototype><item_prototype><name>Backup profile {#PROFILENAME} / {#PROFILECOMMAND} success</name><type>DEPENDENT</type><key>backup.success[{#PROFILENAME}, {#PROFILECOMMAND}]</key><delay>0</delay><applications><application><name>Backup</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.profiles[&quot;{#PROFILENAME}&quot;][&quot;{#PROFILECOMMAND}&quot;].success</params></step><step><type>BOOL_TO_DECIMAL</type><params/></step></preprocessing><master_item><key>vfs.file.contents[{$BACKUP_STATUS_FILE}]</key></master_item><trigger_prototypes><trigger_prototype><expression>{last()}=0</expression><name>Last {#PROFILENAME} / {#PROFILECOMMAND} failed</name><priority>HIGH</priority><manual_close>YES</manual_close></trigger_prototype></trigger_prototypes></item_prototype><item_prototype><name>Backup profile {#PROFILENAME} / {#PROFILECOMMAND} time</name><type>DEPENDENT</type><key>backup.time[{#PROFILENAME}, {#PROFILECOMMAND}]</key><delay>0</delay><units>unixtime</units><applications><application><name>Backup</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.profiles[&quot;{#PROFILENAME}&quot;][&quot;{#PROFILECOMMAND}&quot;].time</params></step><step><type>JAVASCRIPT</type><params>return Math.round(Date.parse(value)/1000)</params></step></preprocessing><master_item><key>vfs.file.contents[{$BACKUP_STATUS_FILE}]</key></master_item><trigger_prototypes><trigger_prototype><expression>{now()}-{last()}&gt;({$MAX_HOURS_BETWEEN}*3600)</expression><name>Last {#PROFILENAME} / {#PROFILECOMMAND} did not run</name><priority>HIGH</priority><description>Last profile has not finished on time (or has not started):&#13;
last run finished more than {$MAX_HOURS_BETWEEN} hour(s) ago</description><manual_close>YES</manual_close></trigger_prototype></trigger_prototypes></item_prototype></item_prototypes><master_item><key>vfs.file.contents[{$BACKUP_STATUS_FILE}]</key></master_item><preprocessing><step><type>JAVASCRIPT</type><params>var output = []

var status = JSON.parse(value)
Object.keys(status.profiles).forEach(function(profileName) {
    Object.keys(status.profiles[profileName]).forEach(function(entry) {
        output.push({
            &quot;{#PROFILENAME}&quot;: profileName,
            &quot;{#PROFILECOMMAND}&quot;: entry,
        })
    })
});

return JSON.stringify(output)</params></step></preprocessing></discovery_rule></discovery_rules><tags><tag><tag>from</tag><value>local</value></tag></tags><macros><macro><macro>{$BACKUP_STATUS_FILE}</macro><value>/home/backup/status.json</value><description>resticprofile status file</description></macro><macro><macro>{$MAX_HOURS_BETWEEN}</macro><value>26</value></macro></macros></template></templates></zabbix_export>
