5.02021-11-21T22:02:52ZTemplates/DevelopmentWindows ICMP Macro Discovery ActiveWindows ICMP Macro Discovery Active## Overview
Sometimes we are faced with an infrastructure distributed over the Internet. In case there is no VPN, using zabbix active agents is a great way to configure monitoring of servers and workstations. But what if we just want to check the availability of the IP camera and other devices behind the NAT? Of course we should use an agent!
This template uses a macros with "!"-separated pairs for hosts and IP-addresses for LLD and makes a very simple ICMP checks for each host.
## Author
Maxim M. Demichev
Templates/DevelopmentStatus- ICMP Devices Macros ContentZABBIX_ACTIVEsystem.run["echo {$ICMP_DEVICES}"]1h1d0TEXTStatusJAVASCRIPTvar resultArr = value.split("!");
var resultArr1 = [];
resultArr.forEach(function(item, i, resultArr ) {
var tmp = item.replace(/\s/, '');
tmp = tmp.replace(/\r/, '');
tmp = tmp.replace(/\n/, '');
resultArr1.push(tmp);
});
var resultArrUnique = [];
resultArr1.forEach(function(item, i, resultArr1){
if(resultArrUnique.indexOf(item) === -1) {
resultArrUnique.push(item);
}
});
var out = [];
resultArrUnique.forEach(function(item, i, resultArr ) {
var tmp = item.replace(/\s/, '');
tmp = tmp.replace(/\r/, '');
tmp = tmp.replace(/\n/, '');
var tmpArr = tmp.split(",");
var tmp1 = {"{#ICMPDEVICEIP}": tmpArr[0], "{#ICMPDEVICENAME}": tmpArr[1]};
out.push(tmp1);
});
var out1 = {"data" : out};
return JSON.stringify(out1);
- Overall ICMP hosts statusEXTERNALzbx_app_worst_trigger.php["{HOST.HOST}", "/ICMP/"]7dStatusZabbix Trigger MappingTRIM\n\r
ICMP Macro DiscoveryZABBIX_ACTIVEsystem.run["echo {$ICMP_DEVICES} && break"]10mResponse for ICMP agent ping {#ICMPDEVICENAME}ZABBIX_ACTIVEsystem.run["ping -n 4 {#ICMPDEVICEIP}"]5m7d0TEXTICMP for {#ICMPDEVICENAME}{#ICMPDEVICENAME} ICMP availabilityZABBIX_ACTIVEsystem.run["ping -n 4 {#ICMPDEVICEIP} | find /v /c \"\""]1dICMP for {#ICMPDEVICENAME}Service stateJAVASCRIPTif(value < 11) {
return 0;
} else {
return 1;
}{last()}=0Недоступен узел {#ARPADDRESS} во внутренней сетиINFO{#ICMPDEVICENAME} ICMP packet lossZABBIX_ACTIVEsystem.run["ping -n 4 {#ICMPDEVICEIP} | findstr [0-9]"]1dICMP for {#ICMPDEVICENAME}JAVASCRIPTvar resultArr = value.split("\n");
var result = false;
resultArr.forEach(function(item, i, resultArr) {
if(item.includes("%")) {
var tmpResult = item.trim();
var tmpArr = tmpResult.split("%");
var tmpResult = tmpArr[0];
var tmpArr = tmpResult.split("(");
var tmpResult = tmpArr[1];
result = tmpResult;
}
});
return result;
JAVASCRIPTvar resultArr = value.split("!");
var resultArr1 = [];
resultArr.forEach(function(item, i, resultArr ) {
var tmp = item.replace(/\s/, '');
tmp = tmp.replace(/\r/, '');
tmp = tmp.replace(/\n/, '');
resultArr1.push(tmp);
});
var resultArrUnique = [];
resultArr1.forEach(function(item, i, resultArr1){
if(resultArrUnique.indexOf(item) === -1) {
resultArrUnique.push(item);
}
});
var out = [];
resultArrUnique.forEach(function(item, i, resultArr ) {
var tmp = item.replace(/\s/, '');
tmp = tmp.replace(/\r/, '');
tmp = tmp.replace(/\n/, '');
var tmpArr = tmp.split(",");
var tmp1 = {"{#ICMPDEVICEIP}": tmpArr[0], "{#ICMPDEVICENAME}": tmpArr[1]};
out.push(tmp1);
});
var out1 = {"data" : out};
return JSON.stringify(out1);
{$ICMP_DEVICES}127.0.0.1,localhost ! 127.0.1.1,camera1Service state0Down1UpZabbix Trigger Mapping0OK1information2warning3average4high5disaster