From 8249e60479d526f27ebcdf5db079e8dd59ad7ec3 Mon Sep 17 00:00:00 2001 From: Pavel Muhortov Date: Sat, 9 Sep 2023 20:24:59 +0300 Subject: [PATCH] added minidlna template --- README.md | 8 +- templates/applications/minidlna/6.0/README.md | 55 +++ .../minidlna/6.0/minidlna_by_http.yaml | 340 ++++++++++++++++++ 3 files changed, 402 insertions(+), 1 deletion(-) create mode 100755 templates/applications/minidlna/6.0/README.md create mode 100755 templates/applications/minidlna/6.0/minidlna_by_http.yaml diff --git a/README.md b/README.md index 6e1a941..d675b02 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,8 @@ -# zabbix +# Zabbix +Templates, scripts and hints for Zabbix. + +## [Templates](templates) + +* [Applications](templates/applications) + * [MiniDLNA](templates/applications/minidlna/6.0) diff --git a/templates/applications/minidlna/6.0/README.md b/templates/applications/minidlna/6.0/README.md new file mode 100755 index 0000000..8600ada --- /dev/null +++ b/templates/applications/minidlna/6.0/README.md @@ -0,0 +1,55 @@ + +# MiniDLNA by HTTP + +## Overview + +This template is designed for [MiniDLNA](https://minidlna.sourceforge.net/) monitoring by Zabbix via HTTP and doesn't require any external scripts. +The template `MiniDLNA by HTTP` - collects metrics by polling MiniDLNA status page with HTTP agent remotely. + +## Requirements + +Zabbix version: 6.0 and higher. + +## Tested versions + +This template has been tested on: + +- MiniDLNA 1.3.0 + +### Macros used + +|Name|Description|Default| +|----|-----------|-------| +|{$MINIDLNA.STATUS.PORT}}|The port of the MiniDLNA status page.|`8200`| +|{$MINIDLNA.STATUS.SCHEME}|The request scheme, which may be either HTTP or HTTPS.|`http`| + +### Items + +|Name|Description|Type|Key and additional info| +|----|-----------|----|-----------------------| +|MiniDLNA: Get status|Converted MiniDLNA status to JSON|HTTP agent|minidlna.get_status| +|MiniDLNA: Audio files|Amount of audio files|Dependent item|minidlna.audio_files| +|MiniDLNA: Image files|Amount of image files|Dependent item|minidlna.image_files| +|MiniDLNA: Video files|Amount of video files|Dependent item|minidlna.video_files| +|MiniDLNA: Clients amount|Amount of clients|Dependent item|minidlna.clients_num| +|MiniDLNA: Version|Service version|Dependent item|minidlna.version| +|MiniDLNA: Service ping|-|Simple check|net.tcp.service[{$MINIDLNA.STATUS.SCHEME},"{HOST.CONN}","{$MINIDLNA.STATUS.PORT}"]| + +### Triggers + +|Name|Description|Expression|Severity|Dependencies and additional info| +|----|-----------|----------|--------|--------------------------------| +|MiniDLNA: Service is down||last(/MiniDLNA by HTTP/net.tcp.service[{$MINIDLNA.STATUS.SCHEME},"{HOST.CONN}","{$MINIDLNA.STATUS.PORT}"])=0|Average|Manual close: Yes| + +### Discovery rules + +|Name|Description|Type|Key and additional info| +|----|-----------|----|-----------------------| +|Clients discovery|The discovery of clients|Dependent item|minidlna.clients.discovery| + +### Item prototypes for Clients discovery + +|Name|Description|Type|Key and additional info| +|----|-----------|----|-----------------------| +|MiniDLNA client "{#MINIDLNA_CLIENT_IPADDR}" connections|Number of connections from client|Dependent item|minidlna.client.connections[{#MINIDLNA_CLIENT_IPADDR}]| +|MiniDLNA client "{#MINIDLNA_CLIENT_IPADDR}" MAC address|Client MAC address|Dependent item|minidlna.client.hw_address[{#MINIDLNA_CLIENT_IPADDR}]| diff --git a/templates/applications/minidlna/6.0/minidlna_by_http.yaml b/templates/applications/minidlna/6.0/minidlna_by_http.yaml new file mode 100755 index 0000000..707ca05 --- /dev/null +++ b/templates/applications/minidlna/6.0/minidlna_by_http.yaml @@ -0,0 +1,340 @@ +zabbix_export: + version: '6.0' + date: '2023-09-09T17:00:00Z' + groups: + - + uuid: a571c0d144b14fd4a87a9d9b2aa9fcd6 + name: Templates/Applications + templates: + - + uuid: d0ccd623f0534ff886bf14b4df9aef0e + template: 'MiniDLNA by HTTP' + name: 'MiniDLNA by HTTP' + groups: + - + name: Templates/Applications + items: + - + uuid: ac1b5ca61f114dd09961d763a601c53a + name: 'MiniDLNA: Audio files' + type: DEPENDENT + key: minidlna.audio_files + delay: '0' + description: 'Amount of audio files' + preprocessing: + - + type: JSONPATH + parameters: + - $.audio_files + master_item: + key: minidlna.get_status + tags: + - + tag: Application + value: minidlna + - + uuid: b28dab5c0ea84f7a892e061dbd4b8f51 + name: 'MiniDLNA: Clients amount' + type: DEPENDENT + key: minidlna.clients_num + delay: '0' + description: 'Amount of clients' + preprocessing: + - + type: JSONPATH + parameters: + - $.clients_num + master_item: + key: minidlna.get_status + tags: + - + tag: Application + value: minidlna + - + uuid: eed1cf5217164710bc1c428fb6a0e193 + name: 'MiniDLNA: Get status' + type: HTTP_AGENT + key: minidlna.get_status + history: 1h + trends: '0' + value_type: TEXT + description: 'Converted MiniDLNA status to JSON' + preprocessing: + - + type: JAVASCRIPT + parameters: + - | + // Convert MiniDLNA status to JSON + var clients_raw = []; + var clients_arr = []; + var clients_num = 0; + + // Get all clients + clients_raw = value.split('IDTypeIP AddressHW AddressConnections')[1].split('')[0].split(/\d<\/td>/); + clients_raw.shift() + + // Parse clients + for (var i = 0; i < clients_raw.length; i++) { + if (clients_raw[i] !== null) { + var client_raw = clients_raw[i].split('')[0] + var client = { + ip_address: client_raw.split('')[1], + hw_address: client_raw.split('')[2], + connections: parseInt(client_raw.split('')[3]) + }; + + clients_arr.push(client); + clients_num++; + } + } + + // Prepare output + var output = { + bin_version: value.split('')[1].split('')[0].split(' ')[1], + audio_files: parseInt(value.split('Audio files')[1].split('')[0]), + video_files: parseInt(value.split('Video files')[1].split('')[0]), + image_files: parseInt(value.split('Image files')[1].split('')[0]), + clients_num: parseInt(clients_num), + data: clients_arr + }; + + // Return JSON string + return JSON.stringify(output); + url: '{$MINIDLNA.STATUS.SCHEME}://{HOST.CONN}:{$MINIDLNA.STATUS.PORT}' + tags: + - + tag: Application + value: minidlna + - + tag: component + value: raw + - + uuid: e05aae11c3d74157a78422733da21486 + name: 'MiniDLNA: Image files' + type: DEPENDENT + key: minidlna.image_files + delay: '0' + description: 'Amount of image files' + preprocessing: + - + type: JSONPATH + parameters: + - $.image_files + master_item: + key: minidlna.get_status + tags: + - + tag: Application + value: minidlna + - + uuid: b4de3ddd3b9347fd9496bcb11d6abd6c + name: 'MiniDLNA: Version' + type: DEPENDENT + key: minidlna.version + delay: '0' + history: 7d + trends: '0' + value_type: CHAR + description: 'Service version' + preprocessing: + - + type: JSONPATH + parameters: + - $.bin_version + master_item: + key: minidlna.get_status + tags: + - + tag: Application + value: minidlna + - + uuid: 58d98974b2164f1ab9c9db8b5dd4e235 + name: 'MiniDLNA: Video files' + type: DEPENDENT + key: minidlna.video_files + delay: '0' + description: 'Amount of video files' + preprocessing: + - + type: JSONPATH + parameters: + - $.video_files + master_item: + key: minidlna.get_status + tags: + - + tag: Application + value: minidlna + - + uuid: 08f1de5f34584f99a3d4f4672f0f6459 + name: 'MiniDLNA: Service ping' + type: SIMPLE + key: 'net.tcp.service[{$MINIDLNA.STATUS.SCHEME},"{HOST.CONN}","{$MINIDLNA.STATUS.PORT}"]' + history: 7d + tags: + - + tag: Application + value: minidlna + - + tag: component + value: health + triggers: + - + uuid: a0d3475de9004a98aee62338a881656e + expression: 'last(/MiniDLNA by HTTP/net.tcp.service[{$MINIDLNA.STATUS.SCHEME},"{HOST.CONN}","{$MINIDLNA.STATUS.PORT}"])=0' + name: 'MiniDLNA: Service is down' + priority: AVERAGE + manual_close: 'YES' + tags: + - + tag: Application + value: minidlna + - + tag: scope + value: availability + discovery_rules: + - + uuid: 4cb5ba7f8f114923a40e9329f70cd398 + name: 'Clients discovery' + type: DEPENDENT + key: minidlna.clients.discovery + delay: '0' + description: 'The discovery of clients' + item_prototypes: + - + uuid: 80f0a4c297124d0daa0f8aa8a67da8b0 + name: 'MiniDLNA client "{#MINIDLNA_CLIENT_IPADDR}" connections' + type: DEPENDENT + key: 'minidlna.client.connections[{#MINIDLNA_CLIENT_IPADDR}]' + delay: '0' + history: 14d + description: 'Number of connections from client' + preprocessing: + - + type: JSONPATH + parameters: + - '$.data.[?(@.ip_address=="{#MINIDLNA_CLIENT_IPADDR}")].connections.first()' + master_item: + key: minidlna.get_status + tags: + - + tag: Application + value: minidlna + - + tag: 'MiniDLNA client' + value: '{#MINIDLNA_CLIENT_IPADDR}' + - + uuid: 4b17636e80314c689375d07ee400be87 + name: 'MiniDLNA client "{#MINIDLNA_CLIENT_IPADDR}" MAC address' + type: DEPENDENT + key: 'minidlna.client.hw_address[{#MINIDLNA_CLIENT_IPADDR}]' + delay: '0' + history: 14d + trends: '0' + value_type: CHAR + preprocessing: + - + type: JSONPATH + parameters: + - '$.data.[?(@.ip_address=="{#MINIDLNA_CLIENT_IPADDR}")].hw_address.first()' + master_item: + key: minidlna.get_status + tags: + - + tag: Application + value: minidlna + - + tag: 'MiniDLNA client' + value: '{#MINIDLNA_CLIENT_IPADDR}' + graph_prototypes: + - + uuid: 0ae432fabda0492cb27e946614d13d2d + name: 'MiniDLNA client "{#MINIDLNA_CLIENT_IPADDR}" connections' + graph_items: + - + color: 0080FF + item: + host: 'MiniDLNA by HTTP' + key: 'minidlna.client.connections[{#MINIDLNA_CLIENT_IPADDR}]' + master_item: + key: minidlna.get_status + lld_macro_paths: + - + lld_macro: '{#MINIDLNA_CLIENT_IPADDR}' + path: $..ip_address.first() + - + lld_macro: '{#MINIDLNA_CLIENT_HWADDR}' + path: $..hw_address.first() + - + lld_macro: '{#MINIDLNA_CLIENT_CONNECTIONS}' + path: $..connections.first() + tags: + - + tag: Application + value: minidlna + macros: + - + macro: '{$MINIDLNA.STATUS.PORT}' + value: '8200' + - + macro: '{$MINIDLNA.STATUS.SCHEME}' + value: http + dashboards: + - + uuid: 2f2247d32fc34e8ab9a9911175f40933 + name: MiniDLNA + auto_start: 'NO' + pages: + - + widgets: + - + type: ITEM + width: '4' + hide_header: 'YES' + fields: + - + type: ITEM + name: itemid + value: + host: 'MiniDLNA by HTTP' + key: minidlna.audio_files + - + type: ITEM + x: '4' + width: '4' + hide_header: 'YES' + fields: + - + type: ITEM + name: itemid + value: + host: 'MiniDLNA by HTTP' + key: minidlna.image_files + - + type: ITEM + x: '8' + width: '4' + hide_header: 'YES' + fields: + - + type: ITEM + name: itemid + value: + host: 'MiniDLNA by HTTP' + key: minidlna.video_files + - + type: GRAPH_PROTOTYPE + x: '12' + width: '12' + height: '5' + fields: + - + type: INTEGER + name: columns + value: '1' + - + type: GRAPH_PROTOTYPE + name: graphid + value: + host: 'MiniDLNA by HTTP' + name: 'MiniDLNA client "{#MINIDLNA_CLIENT_IPADDR}" connections'