added 'DNS availabilty by Zabbix agent'

This commit is contained in:
Pavel Muhortov 2024-06-01 01:59:28 +03:00
parent a4c187baca
commit a274178271
3 changed files with 365 additions and 0 deletions

View File

@ -11,6 +11,7 @@ Templates, scripts and hints for Zabbix.
* [Wireguard](templates/applications/vpn/wireguard/6.0) * [Wireguard](templates/applications/vpn/wireguard/6.0)
* [Components](templates/components) * [Components](templates/components)
* [certificate](templates/components/certificate/6.0) * [certificate](templates/components/certificate/6.0)
* [dns availability](templates/components/dns-availability/6.0)
* [network availability](templates/components/network-availability/6.0) * [network availability](templates/components/network-availability/6.0)
* [Sensors](templates/sensors) * [Sensors](templates/sensors)
* [ds18b20](templates/sensors/ds18b20/6.0) * [ds18b20](templates/sensors/ds18b20/6.0)

View File

@ -0,0 +1,99 @@
# DNS availability by Zabbix agent
## Overview
This template is designed for dns availability monitoring by Zabbix agent via host/posh and doesn't require any external scripts.
## Requirements
- Zabbix version: 6.0 and higher.
- [`Define user parameters.`](#define-user-parameters)
## Tested versions
This template has been tested on:
- [Debian GNU/Linux 11](http://ftp.debian.org/debian/dists/bullseye/)
- [Windows 11](https://www.microsoft.com/en-us/windows/windows-11)
### Macros used
|Name|Description|Default|
|----|-----------|-------|
|{$REQUEST}|address to check availability|`google.com`|
|{$RESOLVER1}|dns to check availability|`ns3-l2.nic.ru`|
|{$RESOLVER2}|dns to check availability|`ns4-l2.nic.ru`|
|{$RESOLVER3}|dns to check availability|`ns8-l2.nic.ru`|
|{$RESOLVER4}|dns to check availability|`ns4-cloud.nic.ru`|
|{$RESOLVER5}|dns to check availability|`ns8-cloud.nic.ru`|
### Items
|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|DNS request|Address for resolve|Calculated|'dns.request'|
|DNS resolver 1 address|Resolver address|Calculated|'dns.resolver1.address'|
|DNS resolver 1 available|Availability of address|Zabbix agent|'dns.resolver1.available[{$REQUEST},{$RESOLVER1}]'|
|DNS resolver 2 address|Resolver address|Calculated|'dns.resolver2.address'|
|DNS resolver 2 available|Availability of address|Zabbix agent|'dns.resolver2.available[{$REQUEST},{$RESOLVER2}]'|
|DNS resolver 3 address|Resolver address|Calculated|'dns.resolver3.address'|
|DNS resolver 3 available|Availability of address|Zabbix agent|'dns.resolver3.available[{$REQUEST},{$RESOLVER3}]'|
|DNS resolver 4 address|Resolver address|Calculated|'dns.resolver4.address'|
|DNS resolver 4 available|Availability of address|Zabbix agent|'dns.resolver4.available[{$REQUEST},{$RESOLVER4}]'|
|DNS resolver 5 address|Resolver address|Calculated|'dns.resolver5.address'|
|DNS resolver 5 available|Availability of address|Zabbix agent|'dns.resolver5.available[{$REQUEST},{$RESOLVER5}]'|
### Triggers
|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----------|--------|--------------------------------|
|{ITEM.VALUE1} not resolved by any DNS||length(last(/DNS availability by Zabbix agent/dns.request))>0 and last(/DNS availability by Zabbix agent/dns.resolver1.available[{$REQUEST},{$RESOLVER1}],#1)<>1 and last(/DNS availability by Zabbix agent/dns.resolver2.available[{$REQUEST},{$RESOLVER2}],#1)<>1 and last(/DNS availability by Zabbix agent/dns.resolver3.available[{$REQUEST},{$RESOLVER3}],#1)<>1 and last(/DNS availability by Zabbix agent/dns.resolver4.available[{$REQUEST},{$RESOLVER4}],#1)<>1 and last(/DNS availability by Zabbix agent/dns.resolver5.available[{$REQUEST},{$RESOLVER5}],#1)<>1|High|Manual close: No|
|{ITEM.VALUE1} not resolved by {ITEM.VALUE2}||length(last(/DNS availability by Zabbix agent/dns.request))>0 and length(last(/DNS availability by Zabbix agent/dns.resolver1.address))>0 and last(/DNS availability by Zabbix agent/dns.resolver1.available[{$REQUEST},{$RESOLVER1}],#1)<>1|Average|Manual close: No|
|{ITEM.VALUE1} not resolved by {ITEM.VALUE2}||length(last(/DNS availability by Zabbix agent/dns.request))>0 and length(last(/DNS availability by Zabbix agent/dns.resolver2.address))>0 and last(/DNS availability by Zabbix agent/dns.resolver2.available[{$REQUEST},{$RESOLVER2}],#1)<>1|Average|Manual close: No|
|{ITEM.VALUE1} not resolved by {ITEM.VALUE2}||length(last(/DNS availability by Zabbix agent/dns.request))>0 and length(last(/DNS availability by Zabbix agent/dns.resolver3.address))>0 and last(/DNS availability by Zabbix agent/dns.resolver3.available[{$REQUEST},{$RESOLVER3}],#1)<>1|Average|Manual close: No|
|{ITEM.VALUE1} not resolved by {ITEM.VALUE2}||length(last(/DNS availability by Zabbix agent/dns.request))>0 and length(last(/DNS availability by Zabbix agent/dns.resolver4.address))>0 and last(/DNS availability by Zabbix agent/dns.resolver4.available[{$REQUEST},{$RESOLVER4}],#1)<>1|Average|Manual close: No|
|{ITEM.VALUE1} not resolved by {ITEM.VALUE2}||length(last(/DNS availability by Zabbix agent/dns.request))>0 and length(last(/DNS availability by Zabbix agent/dns.resolver5.address))>0 and last(/DNS availability by Zabbix agent/dns.resolver5.available[{$REQUEST},{$RESOLVER5}],#1)<>1|Average|Manual close: No|
### Discovery rules
There are no discovery rules in this template.
### Item prototypes for Clients discovery
There are no item prototypes in this template.
### Define user parameters
for Linux:
```bash
tee -a /etc/zabbix/zabbix_agentd.conf > /dev/null <<'EOF'
Timeout=30
UserParameter=dns.resolver1.available[*], host $1 $2 >> /dev/null && echo 1 || echo 0
UserParameter=dns.resolver2.available[*], host $1 $2 >> /dev/null && echo 1 || echo 0
UserParameter=dns.resolver3.available[*], host $1 $2 >> /dev/null && echo 1 || echo 0
UserParameter=dns.resolver4.available[*], host $1 $2 >> /dev/null && echo 1 || echo 0
UserParameter=dns.resolver5.available[*], host $1 $2 >> /dev/null && echo 1 || echo 0
EOF
systemctl restart zabbix-agent
```
for Windows:
```batch
powershell.exe
$text = @"
Timeout=30
UserParameter=dns.resolver1.available[*], powershell.exe -Command "if (Resolve-DnsName -Name $1 -Type A -Server $2 -ErrorAction SilentlyContinue) {return '1'}; return '0'"
UserParameter=dns.resolver2.available[*], powershell.exe -Command "if (Resolve-DnsName -Name $1 -Type A -Server $2 -ErrorAction SilentlyContinue) {return '1'}; return '0'"
UserParameter=dns.resolver3.available[*], powershell.exe -Command "if (Resolve-DnsName -Name $1 -Type A -Server $2 -ErrorAction SilentlyContinue) {return '1'}; return '0'"
UserParameter=dns.resolver4.available[*], powershell.exe -Command "if (Resolve-DnsName -Name $1 -Type A -Server $2 -ErrorAction SilentlyContinue) {return '1'}; return '0'"
UserParameter=dns.resolver5.available[*], powershell.exe -Command "if (Resolve-DnsName -Name $1 -Type A -Server $2 -ErrorAction SilentlyContinue) {return '1'}; return '0'"
"@
$text | Out-File -Append "$env:ProgramFiles\Zabbix Agent\zabbix_agentd.conf" -Encoding "UTF8"
exit
sc stop "Zabbix Agent" && sc start "Zabbix Agent"
```

View File

@ -0,0 +1,265 @@
zabbix_export:
version: '6.0'
date: '2024-05-31T00:00:00Z'
groups:
-
uuid: 57b7ae836ca64446ba2c296389c009b7
name: Templates/Modules
templates:
-
uuid: dc56a9b915614419a6a0778029bbe4d9
template: 'DNS availability by Zabbix agent'
name: 'DNS availability by Zabbix agent'
groups:
-
name: Templates/Modules
items:
-
uuid: a1f3e964152d489bae4a5cf68bee8dfa
name: 'DNS request'
type: CALCULATED
key: dns.request
trends: '0'
value_type: TEXT
params: '{$REQUEST}'
tags:
-
tag: component
value: dns
-
uuid: 3958093ad1954ad58fd83b8a71199dac
name: 'DNS resolver 1 address'
type: CALCULATED
key: dns.resolver1.address
trends: '0'
value_type: TEXT
params: '{$RESOLVER1}'
tags:
-
tag: component
value: dns
-
uuid: a241bc10b4794540afccbc744816a145
name: 'DNS resolver 1 available'
key: 'dns.resolver1.available[{$REQUEST},{$RESOLVER1}]'
preprocessing:
-
type: CHECK_REGEX_ERROR
parameters:
- 'not found'
- '0'
error_handler: CUSTOM_VALUE
error_handler_params: '0'
tags:
-
tag: component
value: dns
-
uuid: 3d21807ac5c1417bb231a57fd10ea7ef
name: 'DNS resolver 2 address'
type: CALCULATED
key: dns.resolver2.address
trends: '0'
value_type: TEXT
params: '{$RESOLVER2}'
tags:
-
tag: component
value: dns
-
uuid: 69400921e3f54340b60315213e71c63f
name: 'DNS resolver 2 available'
key: 'dns.resolver2.available[{$REQUEST},{$RESOLVER2}]'
preprocessing:
-
type: CHECK_REGEX_ERROR
parameters:
- 'not found'
- '0'
error_handler: CUSTOM_VALUE
error_handler_params: '0'
tags:
-
tag: component
value: dns
-
uuid: 55db5ac1866a4b7491996b18f8eafbeb
name: 'DNS resolver 3 address'
type: CALCULATED
key: dns.resolver3.address
trends: '0'
value_type: TEXT
params: '{$RESOLVER3}'
tags:
-
tag: component
value: dns
-
uuid: 4473bbf60fa144c9b06d6efc48569136
name: 'DNS resolver 3 available'
key: 'dns.resolver3.available[{$REQUEST},{$RESOLVER3}]'
preprocessing:
-
type: CHECK_REGEX_ERROR
parameters:
- 'not found'
- '0'
error_handler: CUSTOM_VALUE
error_handler_params: '0'
tags:
-
tag: component
value: dns
-
uuid: 0530f72294f5483985492d29045062cc
name: 'DNS resolver 4 address'
type: CALCULATED
key: dns.resolver4.address
trends: '0'
value_type: TEXT
params: '{$RESOLVER4}'
tags:
-
tag: component
value: dns
-
uuid: 5cb0869d357943eb8f68a4162e612c21
name: 'DNS resolver 4 available'
key: 'dns.resolver4.available[{$REQUEST},{$RESOLVER4}]'
preprocessing:
-
type: CHECK_REGEX_ERROR
parameters:
- 'not found'
- '0'
error_handler: CUSTOM_VALUE
error_handler_params: '0'
tags:
-
tag: component
value: dns
-
uuid: 4efe4f6ca3a04fb79611569e0a5430de
name: 'DNS resolver 5 address'
type: CALCULATED
key: dns.resolver5.address
trends: '0'
value_type: TEXT
params: '{$RESOLVER5}'
tags:
-
tag: component
value: dns
-
uuid: 83cbd80d7969426fa25f77f5a667ecd2
name: 'DNS resolver 5 available'
key: 'dns.resolver5.available[{$REQUEST},{$RESOLVER5}]'
preprocessing:
-
type: CHECK_REGEX_ERROR
parameters:
- 'not found'
- '0'
error_handler: CUSTOM_VALUE
error_handler_params: '0'
tags:
-
tag: component
value: dns
macros:
-
macro: '{$REQUEST}'
value: google.com
-
macro: '{$RESOLVER1}'
value: ns3-l2.nic.ru
-
macro: '{$RESOLVER2}'
value: ns4-l2.nic.ru
-
macro: '{$RESOLVER3}'
value: ns8-l2.nic.ru
-
macro: '{$RESOLVER4}'
value: ns4-cloud.nic.ru
-
macro: '{$RESOLVER5}'
value: ns8-cloud.nic.ru
triggers:
-
uuid: 91bc458eac464bd38709e1de596ea047
expression: 'length(last(/DNS availability by Zabbix agent/dns.request))>0 and last(/DNS availability by Zabbix agent/dns.resolver1.available[{$REQUEST},{$RESOLVER1}],#1)<>1 and last(/DNS availability by Zabbix agent/dns.resolver2.available[{$REQUEST},{$RESOLVER2}],#1)<>1 and last(/DNS availability by Zabbix agent/dns.resolver3.available[{$REQUEST},{$RESOLVER3}],#1)<>1 and last(/DNS availability by Zabbix agent/dns.resolver4.available[{$REQUEST},{$RESOLVER4}],#1)<>1 and last(/DNS availability by Zabbix agent/dns.resolver5.available[{$REQUEST},{$RESOLVER5}],#1)<>1'
name: '{ITEM.VALUE1} not resolved by any DNS'
opdata: '{$REQUEST}, {$RESOLVER1}, {$RESOLVER2}, {$RESOLVER3}, {$RESOLVER4}, {$RESOLVER5}'
priority: HIGH
-
uuid: 372ac457598f46b4944cb26061037b24
expression: 'length(last(/DNS availability by Zabbix agent/dns.request))>0 and length(last(/DNS availability by Zabbix agent/dns.resolver1.address))>0 and last(/DNS availability by Zabbix agent/dns.resolver1.available[{$REQUEST},{$RESOLVER1}],#1)<>1'
name: '{ITEM.VALUE1} not resolved by {ITEM.VALUE2}'
opdata: '{$REQUEST}, {$RESOLVER1}'
priority: AVERAGE
-
uuid: 91f4fbb34bc04e9e80e420075d092ab3
expression: 'length(last(/DNS availability by Zabbix agent/dns.request))>0 and length(last(/DNS availability by Zabbix agent/dns.resolver2.address))>0 and last(/DNS availability by Zabbix agent/dns.resolver2.available[{$REQUEST},{$RESOLVER2}],#1)<>1'
name: '{ITEM.VALUE1} not resolved by {ITEM.VALUE2}'
opdata: '{$REQUEST}, {$RESOLVER2}'
priority: AVERAGE
-
uuid: 4cffdf0bddb043d89a9ba6cdec815856
expression: 'length(last(/DNS availability by Zabbix agent/dns.request))>0 and length(last(/DNS availability by Zabbix agent/dns.resolver3.address))>0 and last(/DNS availability by Zabbix agent/dns.resolver3.available[{$REQUEST},{$RESOLVER3}],#1)<>1'
name: '{ITEM.VALUE1} not resolved by {ITEM.VALUE2}'
opdata: '{$REQUEST}, {$RESOLVER3}'
priority: AVERAGE
-
uuid: 06baf3ea932f472ea9b2f320728cadee
expression: 'length(last(/DNS availability by Zabbix agent/dns.request))>0 and length(last(/DNS availability by Zabbix agent/dns.resolver4.address))>0 and last(/DNS availability by Zabbix agent/dns.resolver4.available[{$REQUEST},{$RESOLVER4}],#1)<>1'
name: '{ITEM.VALUE1} not resolved by {ITEM.VALUE2}'
opdata: '{$REQUEST}, {$RESOLVER4}'
priority: AVERAGE
-
uuid: d1dd1aa7f9e1428c801160b1997b70e5
expression: 'length(last(/DNS availability by Zabbix agent/dns.request))>0 and length(last(/DNS availability by Zabbix agent/dns.resolver5.address))>0 and last(/DNS availability by Zabbix agent/dns.resolver5.available[{$REQUEST},{$RESOLVER5}],#1)<>1'
name: '{ITEM.VALUE2} not resolved by {ITEM.VALUE1}'
opdata: '{$REQUEST}, {$RESOLVER5}'
priority: AVERAGE
graphs:
-
uuid: f455326ebf3a4aaabe7395665f965840
name: 'DNS resolvers availability'
show_triggers: 'NO'
ymin_type_1: FIXED
graph_items:
-
drawtype: GRADIENT_LINE
color: FF0000
item:
host: 'DNS availability by Zabbix agent'
key: 'dns.resolver1.available[{$REQUEST},{$RESOLVER1}]'
-
sortorder: '1'
drawtype: GRADIENT_LINE
color: FFFF00
item:
host: 'DNS availability by Zabbix agent'
key: 'dns.resolver2.available[{$REQUEST},{$RESOLVER2}]'
-
sortorder: '2'
drawtype: GRADIENT_LINE
color: 00FF00
item:
host: 'DNS availability by Zabbix agent'
key: 'dns.resolver3.available[{$REQUEST},{$RESOLVER3}]'
-
sortorder: '3'
drawtype: GRADIENT_LINE
color: 0080FF
item:
host: 'DNS availability by Zabbix agent'
key: 'dns.resolver4.available[{$REQUEST},{$RESOLVER4}]'
-
sortorder: '4'
drawtype: GRADIENT_LINE
color: BF00FF
item:
host: 'DNS availability by Zabbix agent'
key: 'dns.resolver5.available[{$REQUEST},{$RESOLVER5}]'