zabbix_export: version: '7.0' template_groups: - uuid: 36bff6c29af64692839d077febfc7079 name: 'Templates/Network devices' templates: - uuid: 7dc3e191c7804221b777b7c79944f283 template: 'Template Cisco MAC monitor' name: 'Template Cisco MAC monitor' groups: - name: 'Templates/Network devices' items: - uuid: a2d9df39e93d468891e68ba8d16c490b name: 'Get data' type: SCRIPT key: cisco-mac-monitor.get-data history: 1d value_type: TEXT trends: '0' params: | /** * Zabbix JavaScript para LLD - Compatible con versiones antiguas * Funciona con Zabbix 4.x, 5.x y 6.x */ // Configuración mediante macros var serviceUrl = "{$CISCO_SERVICE_URL}"; var ciscoHost = "{$CISCO_HOST}"; var ciscoUsername = "{$CISCO_USERNAME}"; var ciscoPassword = "{$CISCO_PASSWORD}"; // Validar parámetros requeridos if (!serviceUrl || !ciscoHost || !ciscoUsername || !ciscoPassword) { throw "Faltan parámetros: CISCO_SERVICE_URL, CISCO_HOST, CISCO_USERNAME, CISCO_PASSWORD"; } // Log de inicio Zabbix.Log(4, "[Cisco LLD] Host: " + ciscoHost); // Preparar datos para POST var postData = JSON.stringify({ "host": ciscoHost, "username": ciscoUsername, "password": ciscoPassword, "port": 22, "timeout": 30 }); // Crear request HTTP (método básico compatible) var req = new HttpRequest(); req.addHeader('Content-Type: application/json'); try { // Hacer consulta POST var response = req.post(serviceUrl , postData); // Verificar status if (req.getStatus() !== 200) { throw "HTTP Error " + req.getStatus(); } // Parsear respuesta var jsonData = JSON.parse(response); // Validar estructura if (!jsonData.data) { throw "Invalid response structure"; } // Log de éxito Zabbix.Log(4, "[Cisco LLD] Success: " + jsonData.data.length + " items"); // Retornar para LLD return JSON.stringify({"data": jsonData.data}); } catch (error) { Zabbix.Log(2, "[Cisco LLD] ERROR: " + error); throw "Cisco LLD failed: " + error; } discovery_rules: - uuid: 39c0b9d76a1a4118820b13906e1b00ca name: 'Port discovery' type: DEPENDENT key: port.discovery delay: '0' item_prototypes: - uuid: 983b103f825d451db67b4dd938f569fd name: '{#PORT}: MAC address list' type: DEPENDENT key: 'mac.addresses[{#PORT}]' delay: '0' value_type: TEXT trends: '0' preprocessing: - type: JSONPATH parameters: - '$.data[?(@.port=="{#PORT}")].data.addresses' - type: TRIM parameters: - '[]"' - type: JAVASCRIPT parameters: - 'return value.replace(/\\n/g, String.fromCharCode(10));' master_item: key: cisco-mac-monitor.get-data - uuid: 898b84bc5bb54ed1b261af3ebf54caf0 name: '{#PORT}: MAC address count' type: DEPENDENT key: 'mac.count[{#PORT}]' delay: '0' trends: '0' preprocessing: - type: JSONPATH parameters: - '$.data[?(@.port=="{#PORT}")].data.count' - type: TRIM parameters: - '[]' master_item: key: cisco-mac-monitor.get-data - uuid: d2691b9290a84befa03c931c934c5fe1 name: '{#PORT}: VLANs' type: DEPENDENT key: 'mac.vlans[{#PORT}]' delay: '0' value_type: TEXT trends: '0' preprocessing: - type: JSONPATH parameters: - '$.data[?(@.port=="{#PORT}")].data.vlans' - type: TRIM parameters: - '[]"' - type: STR_REPLACE parameters: - ',' - ', ' master_item: key: cisco-mac-monitor.get-data master_item: key: cisco-mac-monitor.get-data lld_macro_paths: - lld_macro: '{#ADDRESSES}' path: $.data.addresses - lld_macro: '{#COUNT}' path: $.data.count - lld_macro: '{#PORT}' path: $.port - lld_macro: '{#TIMESTAMP}' path: $.data.timestamp - lld_macro: '{#VLANS}' path: $.data.vlans preprocessing: - type: JSONPATH parameters: - '$.data[*]' macros: - macro: '{$CISCO_HOST}' value: 10.150.250.2 - macro: '{$CISCO_PASSWORD}' type: SECRET_TEXT - macro: '{$CISCO_SERVICE_URL}' value: 'https://ufrparesb015.nead.danet/mac-monitor' - macro: '{$CISCO_TIMEOUT}' value: '20' - macro: '{$CISCO_USERNAME}' value: itops