diff --git a/README.md b/README.md index 8f1fac3bc..a78b36ce5 100644 --- a/README.md +++ b/README.md @@ -887,6 +887,8 @@ This repository is dedicated to templates that are created and maintained by Zab * [SNMP QNAP NAS](Storage_Devices/QNAP/template_zabbix_3.0_qnap_nas_snmp) * [SNMP QNAP NAS](Storage_Devices/QNAP/template_zabbix_3.4_qnap_nas_snmp) * [SNMP QNAP NAS](Storage_Devices/QNAP/template_zabbix_4.2_qnap_nas_snmp) + * [Qumulo](Storage_Devices/Qumulo) + * [QUMULO](Storage_Devices/Qumulo/template_qumulo/5.4/) * [QSAN](Storage_Devices/QSAN) * [SNMP QSAN XS3224 Storage](Storage_Devices/QSAN/template_qsan_xs3224) * [ReadyNAS](Storage_Devices/ReadyNAS) diff --git a/Storage_Devices/Qumulo/template_qumulo/5.4/README.md b/Storage_Devices/Qumulo/template_qumulo/5.4/README.md new file mode 100644 index 000000000..89ec6a5fe --- /dev/null +++ b/Storage_Devices/Qumulo/template_qumulo/5.4/README.md @@ -0,0 +1,70 @@ +# Qumulo + +## Overview + +Tested on Qumulo version 4.1.3 + +Use qq binary, that can be downloaded from qumulo web ui + +## Installation +* Get qq binary from your qumulo interface (Apis & Tools menu) +* Put qq on /etc/zabbix/scripts/qq (or adapt next conf file) +* Put zabbix_qumulo.conf on zabbix agent2.d folder, in order to include the userparameter, and change the user/pass on the first line ( UserParameter=qumulo.login,/etc/zabbix/scripts/qq --host qumulo_host login -u zabbix -p zabbix_pwd +) +* Import the template on zabbix. +* Change the 2 macro to the read value of your cluster (10% of usable capacity, and 20% ) +* Force the item "Qumulo login" to execute "now" in order the zabbix user have the good "cookies" on the qumulo cluster and in order to have all other check "OK". + +## Macros used + +|Name|Description|Default|Type| +|----|-----------|-------|----| +|{$QUMULO.10PCENT}|

Should be put to 10% of total size of cluster

|`21T`|Text macro| +|{$QUMULO.20PCENT}|

Should be put to 20% of total size of cluster

|`42T`|Text macro| + +## Template links + +There are no template links in this template. + +## Discovery rules + +|Name|Description|Type|Key and additional info| +|----|-----------|----|----| +|Disks List|

-

|`Zabbix agent`|qumulo.cluster_slots| +|Node List|

-

|`Zabbix agent`|qumulo.nodes_list| + +## Items collected + +|Name|Description|Type|Key and additional info| +|----|-----------|----|----| +|Disk {#QDISK_ID} serial|

-

|`Dependent item`|qumulo.cluster_slots[{#QDISK_ID},serial]

LLD

| +|Disk {#QDISK_ID} state|

-

|`Dependent item`|qumulo.cluster_slots[{#QDISK_ID},state]

LLD

| +|{#QNODE_NAME} serial|

-

|`Dependent item`|qumulo.nodes_list[{#QNODE_ID},serial]

LLD

| +|{#QNODE_NAME} status|

-

|`Dependent item`|qumulo.nodes_list[{#QNODE_ID},status]

LLD

| +|Qumulo date |

-

|`Zabbix agent`|qumulo.time_status| +|Qumulo restriper time|

-

|`Zabbix agent`|qumulo.restriper_status[time_remain]| +|Qumulo cluster slots|

-

|`Zabbix agent`|qumulo.cluster_slots[]| +|Qumulo nodes |

-

|`Zabbix agent`|qumulo.nodes_list[]| +|Qumulo restriper |

-

|`Zabbix agent`|qumulo.restriper_status[status]| +|qumulo.free.forecast.24 |

-

|`Calculated`|qumulo.free.forecast.24| +|qumulo.free.last.1 |

-

|`Calculated`|qumulo.free.last.1| +|Qumulo free space|

-

|`Zabbix agent`|qumulo.fs_get_stats[free]| +|Qumulo total space|

-

|`Zabbix agent`|qumulo.fs_get_stats[total]| +|qumulo.node_chassis_status_get|

-

|`Zabbix agent`|qumulo.node_chassis_status_get| +|Qumulo login |

-

|`Zabbix agent`|qumulo.time_status| + + +## Triggers + +|Name|Description|Expression|Priority| +|----|-----------|----------|--------| +|Qumulo free space < 10%|

-

|

**Expression**: last(/Template App QUMULO/qumulo.fs_get_stats[free])<(last(/Template App QUMULO/qumulo.fs_get_stats[total])*0.1)

**Recovery expression**:

|Disaster| +|Qumulo free space < 10% in next 24h|

-

|

**Expression**: timeleft(/Template App QUMULO/qumulo.fs_get_stats[free],12h,{$QUMULO.10PCENT})<24h

**Recovery expression**:

|high| +|Qumulo free space < 20% in next 48h|

-

|

**Expression**: timeleft(/Template App QUMULO/qumulo.fs_get_stats[free],24h,{$QUMULO.20PCENT})<48h

**Recovery expression**:

|Average| +|Qumulo time shift > 5s|

-

|

**Expression**: fuzzytime(/Template App QUMULO/qumulo.time_status,5s)=0

**Recovery expression**:

|Average| +|Restriper is COMPACT|

-

|

**Expression**: last(/Template App QUMULO/qumulo.restriper_status[status])="COMPACT"

**Recovery expression**:

|Information| +|Restriper is REBALANCE|

-

|

**Expression**: last(/Template App QUMULO/qumulo.restriper_status[status])="REBALANCE")

**Recovery expression**:

|Information| +|Very long rebalance running ( > 8h )|

-

|

**Expression**: last(/Template App QUMULO/qumulo.restriper_status[time_remain])>28800

**Recovery expression**:

|Information| + + + diff --git a/Storage_Devices/Qumulo/template_qumulo/5.4/files/zabbix_qumulo.conf b/Storage_Devices/Qumulo/template_qumulo/5.4/files/zabbix_qumulo.conf new file mode 100644 index 000000000..7c1aa25a3 --- /dev/null +++ b/Storage_Devices/Qumulo/template_qumulo/5.4/files/zabbix_qumulo.conf @@ -0,0 +1,7 @@ +UserParameter=qumulo.login,/etc/zabbix/scripts/qq --host qumulo_host login -u zabbix -p zabbix_pwd +UserParameter=qumulo.nodes_list[*],/etc/zabbix/scripts/qq --host qumulo_host nodes_list +UserParameter=qumulo.cluster_slots[*],/etc/zabbix/scripts/qq --host qumulo_host cluster_slots +UserParameter=qumulo.node_chassis_status_get[*],/etc/zabbix/scripts/qq --host qumulo_host node_chassis_status_get +UserParameter=qumulo.fs_get_stats[*],/etc/zabbix/scripts/qq --host qumulo_host fs_get_stats +UserParameter=qumulo.time_status,/etc/zabbix/scripts/qq --host qumulo_host time_status +UserParameter=qumulo.restriper_status[*],/etc/zabbix/scripts/qq --host qumulo_host restriper_status diff --git a/Storage_Devices/Qumulo/template_qumulo/5.4/template_qumulo.yaml b/Storage_Devices/Qumulo/template_qumulo/5.4/template_qumulo.yaml new file mode 100644 index 000000000..9fc5e97fa --- /dev/null +++ b/Storage_Devices/Qumulo/template_qumulo/5.4/template_qumulo.yaml @@ -0,0 +1,379 @@ +zabbix_export: + version: '5.4' + date: '2021-11-04T22:00:31Z' + groups: + - + uuid: 7df96b18c230490a9a0a9e2307226338 + name: Templates + - + uuid: a571c0d144b14fd4a87a9d9b2aa9fcd6 + name: Templates/Applications + templates: + - + uuid: 7f4309a3be574cdcadef8fb956cd8494 + template: 'Template App QUMULO' + name: 'Template App QUMULO' + groups: + - + name: Templates + - + name: Templates/Applications + items: + - + uuid: f2bbb53e3fa64007952509f0e793952e + name: 'Qumulo cluster slots' + key: 'qumulo.cluster_slots[]' + delay: 5m + history: '0' + trends: '0' + value_type: TEXT + tags: + - + tag: Application + value: 'Qumulo - Disks' + - + uuid: fcdf9e010806482abc60aeb6cb5b4d1b + name: qumulo.free.forecast.24 + type: CALCULATED + key: qumulo.free.forecast.24 + delay: 10m + value_type: FLOAT + units: B + params: 'forecast(//qumulo.free.last.1,5m,24h)' + - + uuid: 3382c4c8c5514fa58671b6a4b2ab4a65 + name: qumulo.free.last.1 + type: CALCULATED + key: qumulo.free.last.1 + delay: 10m + value_type: FLOAT + units: B + params: 'last(//qumulo.fs_get_stats[free])/1000000000' + - + uuid: 30b3637adb9040afabcf187c26eb585c + name: 'Qumulo free space' + key: 'qumulo.fs_get_stats[free]' + delay: 10m + units: B + preprocessing: + - + type: JSONPATH + parameters: + - $.free_size_bytes + tags: + - + tag: Application + value: Qumulo + triggers: + - + uuid: e8dea997257f4b5b909ca45cd5709af7 + expression: 'timeleft(/Template App QUMULO/qumulo.fs_get_stats[free],12h,{$QUMULO.10PCENT})<24h' + name: 'Qumulo free space < 10% in next 24h' + opdata: '{ITEM.VALUE}' + priority: HIGH + manual_close: 'YES' + - + uuid: af31325d58e84e28bb1bfcc418ca6306 + expression: 'timeleft(/Template App QUMULO/qumulo.fs_get_stats[free],24h,{$QUMULO.20PCENT})<48h' + name: 'Qumulo free space < 20% in next 48h' + opdata: '{ITEM.VALUE}' + priority: AVERAGE + description: 'before 9060086888857' + manual_close: 'YES' + dependencies: + - + name: 'Qumulo free space < 10% in next 24h' + expression: 'timeleft(/Template App QUMULO/qumulo.fs_get_stats[free],12h,{$QUMULO.10PCENT})<24h' + - + uuid: 08536cbf462748b1948d8c76012d7b81 + name: 'Qumulo total space' + key: 'qumulo.fs_get_stats[total]' + delay: 1h + history: 7d + trends: '0' + units: B + preprocessing: + - + type: JSONPATH + parameters: + - $.total_size_bytes + tags: + - + tag: Application + value: Qumulo + - + uuid: b6dea7b81b904803b84b5133e597c308 + name: 'Qumulo login' + key: qumulo.login + delay: 4h + trends: '0' + value_type: CHAR + tags: + - + tag: Application + value: Qumulo + - + uuid: 257d4fb29999447ab102379b8b5df24a + name: 'Qumulo nodes' + key: 'qumulo.nodes_list[]' + delay: 5m + history: '0' + trends: '0' + value_type: TEXT + tags: + - + tag: Application + value: Qumulo + - + uuid: 1e7072779ad14b77ac15ac4771c1c070 + name: qumulo.node_chassis_status_get + key: qumulo.node_chassis_status_get + delay: 1h + trends: '0' + value_type: TEXT + - + uuid: 94aa2aad8ab34569817c97b228f2b0c8 + name: 'Qumulo restriper' + key: 'qumulo.restriper_status[status]' + delay: 5m + history: 7d + trends: '0' + value_type: CHAR + preprocessing: + - + type: JSONPATH + parameters: + - $.phase + - + type: DISCARD_UNCHANGED_HEARTBEAT + parameters: + - '3600' + tags: + - + tag: Application + value: Qumulo + triggers: + - + uuid: 13312adff5b748978b59fb1a3859da9f + expression: 'last(/Template App QUMULO/qumulo.restriper_status[status])="COMPACT"' + name: 'Restriper is COMPACT' + priority: INFO + manual_close: 'YES' + - + uuid: d2754a43196d4b2d9aa97fe140d9b4fc + expression: 'last(/Template App QUMULO/qumulo.restriper_status[status])="REBALANCE"' + name: 'Restriper is REBALANCE' + priority: INFO + manual_close: 'YES' + - + uuid: 2c551e4fedc8483ca2dbfb32dc2c108f + name: 'Qumulo restriper time remain' + key: 'qumulo.restriper_status[time_remain]' + delay: 4m + history: 7d + units: s + preprocessing: + - + type: JSONPATH + parameters: + - $.estimated_seconds_left + error_handler: CUSTOM_ERROR + error_handler_params: '0' + tags: + - + tag: Application + value: Qumulo + triggers: + - + uuid: f113478705204b788a397211fc70f1b0 + expression: 'last(/Template App QUMULO/qumulo.restriper_status[time_remain])>28800' + name: 'Very long rebalance running ( > 8h )' + priority: INFO + manual_close: 'YES' + - + uuid: 4127a48e21e6481a92a6a14bab0e6a17 + name: 'Qumulo date' + key: qumulo.time_status + history: 7d + trends: 90d + value_type: FLOAT + units: unixtime + preprocessing: + - + type: JSONPATH + parameters: + - $.time + - + type: JAVASCRIPT + parameters: + - | + var myDate = new Date(value); + var myEpoch = myDate.getTime()/1000.0; + return(Number(myEpoch)); + tags: + - + tag: Application + value: Qumulo + triggers: + - + uuid: de85cc75753a43ad9f1a872f99df74ab + expression: 'fuzzytime(/Template App QUMULO/qumulo.time_status,2s)=0' + name: 'Qumulo time shift > 2s' + priority: AVERAGE + discovery_rules: + - + uuid: 54b6898ff29d4c49b7857b48a66a4a17 + name: 'Disks List' + key: qumulo.cluster_slots + delay: 1h + item_prototypes: + - + uuid: 140d6e9bdf6d44a0b5be5e5dd8939967 + name: 'Disk {#QDISK_ID} serial' + type: DEPENDENT + key: 'qumulo.cluster_slots[{#QDISK_ID},serial]' + delay: '0' + trends: '0' + value_type: CHAR + preprocessing: + - + type: JSONPATH + parameters: + - '$..[?(@.id == {#QDISK_ID})].disk_serial_number.first()' + master_item: + key: 'qumulo.cluster_slots[]' + tags: + - + tag: Application + value: 'Qumulo - Disks' + - + uuid: 38921a9c27de41c3baa44c0be224570d + name: 'Disk {#QDISK_ID} state' + type: DEPENDENT + key: 'qumulo.cluster_slots[{#QDISK_ID},state]' + delay: '0' + trends: '0' + value_type: CHAR + preprocessing: + - + type: JSONPATH + parameters: + - '$..[?(@.id == {#QDISK_ID})].state.first()' + master_item: + key: 'qumulo.cluster_slots[]' + tags: + - + tag: Application + value: 'Qumulo - Disks' + trigger_prototypes: + - + uuid: ddd56692a8ac4290aba01ba4c239559d + expression: 'find(/Template App QUMULO/qumulo.cluster_slots[{#QDISK_ID},state],,"like","healthy")=0 or nodata(/Template App QUMULO/qumulo.cluster_slots[{#QDISK_ID},state],10m)=1' + name: '{#QDISK_ID} is not healthy (or nodata for 10m)' + priority: AVERAGE + lld_macro_paths: + - + lld_macro: '{#QDISK_ID}' + path: $..id.first() + - + lld_macro: '{#QDISK_SERIAL}' + path: $..disk_serial_number.first() + - + lld_macro: '{#QDISK_STATE}' + path: $..node_state.first() + - + uuid: 42f50b2932c44b7abf672fa630402e18 + name: 'Node List' + key: qumulo.nodes_list + delay: 1h + item_prototypes: + - + uuid: a865e0391d514acdb2eca407552422bd + name: '{#QNODE_NAME} serial' + type: DEPENDENT + key: 'qumulo.nodes_list[{#QNODE_ID},serial]' + delay: '0' + trends: '0' + value_type: CHAR + preprocessing: + - + type: JSONPATH + parameters: + - '$..[?(@.id == {#QNODE_ID})].serial_number.first()' + master_item: + key: 'qumulo.nodes_list[]' + tags: + - + tag: Application + value: Qumulo + - + uuid: fb9f407f18a949ecb1c1c30083edac4c + name: '{#QNODE_NAME} status' + type: DEPENDENT + key: 'qumulo.nodes_list[{#QNODE_ID},status]' + delay: '0' + trends: '0' + value_type: CHAR + preprocessing: + - + type: JSONPATH + parameters: + - '$..[?(@.id == {#QNODE_ID})].node_status.first()' + master_item: + key: 'qumulo.nodes_list[]' + tags: + - + tag: Application + value: Qumulo + trigger_prototypes: + - + uuid: cbf81c49d9964a6fa62efda926ba800e + expression: 'find(/Template App QUMULO/qumulo.nodes_list[{#QNODE_ID},status],,"like","online")=0 or nodata(/Template App QUMULO/qumulo.nodes_list[{#QNODE_ID},status],10m)=1' + name: '{#QNODE_NAME} is not online (or nodata for 10m)' + priority: AVERAGE + lld_macro_paths: + - + lld_macro: '{#QNODE_ID}' + path: $..id.first() + - + lld_macro: '{#QNODE_NAME}' + path: $..node_name.first() + - + lld_macro: '{#QNODE_SERIAL}' + path: $..serial_number.first() + - + lld_macro: '{#QNODE_STATUS}' + path: $..node_status.first() + macros: + - + macro: '{$QUMULO.10PCENT}' + value: 21T + - + macro: '{$QUMULO.20PCENT}' + value: 42T + triggers: + - + uuid: a74578cd6238405dba1b0393d9591e35 + expression: 'last(/Template App QUMULO/qumulo.fs_get_stats[free])<(last(/Template App QUMULO/qumulo.fs_get_stats[total])*0.1)' + name: 'Qumulo free space < 10%' + priority: DISASTER + graphs: + - + uuid: c02a561137b841c387f324a0eb3252a4 + name: 'Qumulo disk usage' + ymin_type_1: FIXED + graph_items: + - + sortorder: '1' + color: 1A7C11 + calc_fnc: ALL + item: + host: 'Template App QUMULO' + key: 'qumulo.fs_get_stats[free]' + - + sortorder: '2' + color: F63100 + calc_fnc: ALL + item: + host: 'Template App QUMULO' + key: 'qumulo.fs_get_stats[total]'