zabbix_export: version: '7.4' host_groups: - uuid: 7fd3a689a3874d0b9212a8f11af9f356 name: 'IT GUYS' - uuid: 5b5d7aa968304e2191657b4d0b0e5a4b name: LINUX - uuid: 137f19e6e2dc4219b33553b812627bc2 name: 'VM / MAQUINA VIRTUAL' hosts: - host: srvproxy001 name: 'iT Guys - Debian 12 - Pathfinder (Nginx Proxy)' templates: - name: Fail2ban - name: 'Linux via Agente Zabbix' - name: 'Nginx por Zabbix agent' groups: - name: 'IT GUYS' - name: LINUX - name: 'VM / MAQUINA VIRTUAL' interfaces: - ip: 172.16.254.1 interface_ref: if1 discovery_rules: - name: 'Insight: Log de Acesso' type: ZABBIX_ACTIVE key: nginx.access.logs.list delay: 1s enabled_lifetime_type: DISABLE_AFTER enabled_lifetime: 1h item_prototypes: - name: 'Insight: Acesso {#HOST_SITE}' type: ZABBIX_ACTIVE key: 'log[/var/log/nginx/{#HOST_SITE}.access.log]' delay: 1s history: 91d value_type: LOG timeout: 120s tags: - tag: Insight value: 'access log' - name: 'Insight: Bad-Bot {#HOST_SITE}' type: ZABBIX_ACTIVE key: 'log[/var/log/nginx/{#HOST_SITE}.bad-bot.log]' delay: 1s value_type: LOG timeout: 120s tags: - tag: Insight value: bad-bot - name: 'Insight: Erros {#HOST_SITE}' type: ZABBIX_ACTIVE key: 'log[/var/log/nginx/{#HOST_SITE}.error.log]' delay: 1s value_type: LOG timeout: 120s tags: - tag: Insight value: 'error log' - name: 'Nginx: Cache HITs Flag for {#HOST_SITE}' type: DEPENDENT key: 'nginx.cache.hit.flag.[{#HOST_SITE}]' preprocessing: - type: REGEX parameters: - 'upstream_cache_status":"HIT"' - '1' error_handler: CUSTOM_VALUE error_handler_params: '0' master_item: key: 'log[/var/log/nginx/{#HOST_SITE}.access.log]' tags: - tag: Insight value: performance - name: 'Insight: Cache Hit Ratio (Ultimo 1m) (%) {#HOST_SITE}' type: CALCULATED key: 'nginx.cache.hit.ratio.1m.[{#HOST_SITE}]' value_type: FLOAT units: '%' params: '(last(//nginx.cache.hits.1m.[{#HOST_SITE}]) * 100) / (last(//nginx.cache.hits.1m.[{#HOST_SITE}]) + last(//nginx.cache.miss.1m.[{#HOST_SITE}]) + (last(//nginx.cache.hits.1m.[{#HOST_SITE}]) + last(//nginx.cache.miss.1m.[{#HOST_SITE}]) = 0))' tags: - tag: Insight value: carga - name: 'Insight: Cache HITs no Ultimo minuto {#HOST_SITE}' type: CALCULATED key: 'nginx.cache.hits.1m.[{#HOST_SITE}]' units: hits params: 'sum(//nginx.cache.hit.flag.[{#HOST_SITE}],1m)' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Insight: Cache HITs nos Ultimos 5 minuto {#HOST_SITE}' type: CALCULATED key: 'nginx.cache.hits.5m.[{#HOST_SITE}]' delay: 4m units: hits params: 'sum(//nginx.cache.hit.flag.[{#HOST_SITE}],5m)' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Insight: Cache HITs nos Ultimos 15 minuto {#HOST_SITE}' type: CALCULATED key: 'nginx.cache.hits.15m.[{#HOST_SITE}]' delay: 14m units: hits params: 'sum(//nginx.cache.hit.flag.[{#HOST_SITE}],15m)' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Insight: Cache HITs nos Ultimos 24 hrs {#HOST_SITE}' type: CALCULATED key: 'nginx.cache.hits.24h.[{#HOST_SITE}]' delay: 1h units: hits params: 'sum(//nginx.cache.hit.flag.[{#HOST_SITE}],24h)' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Insight: Cache MISS no Ultimo minuto {#HOST_SITE}' type: CALCULATED key: 'nginx.cache.miss.1m.[{#HOST_SITE}]' units: miss params: 'sum(//nginx.cache.miss.flag.[{#HOST_SITE}],1m)' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Insight: Cache MISS no Ultimos 5 minuto {#HOST_SITE}' type: CALCULATED key: 'nginx.cache.miss.5m.[{#HOST_SITE}]' delay: 4m units: miss params: 'sum(//nginx.cache.miss.flag.[{#HOST_SITE}],5m)' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Insight: Cache MISS no Ultimos 15 minuto {#HOST_SITE}' type: CALCULATED key: 'nginx.cache.miss.15m.[{#HOST_SITE}]' delay: 14m units: miss params: 'sum(//nginx.cache.miss.flag.[{#HOST_SITE}],15m)' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Insight: Cache MISS no Ultimos 24 horas {#HOST_SITE}' type: CALCULATED key: 'nginx.cache.miss.24h.[{#HOST_SITE}]' delay: 1h units: miss params: 'sum(//nginx.cache.miss.flag.[{#HOST_SITE}],24h)' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Nginx: Cache MISS Flag for {#HOST_SITE}' type: DEPENDENT key: 'nginx.cache.miss.flag.[{#HOST_SITE}]' preprocessing: - type: REGEX parameters: - 'upstream_cache_status":"MISS"' - '1' error_handler: DISCARD_VALUE master_item: key: 'log[/var/log/nginx/{#HOST_SITE}.access.log]' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Insight: Cache Miss Ratio (Ultimo 1m) (%) {#HOST_SITE}' type: CALCULATED key: 'nginx.cache.miss.ratio.1m.[{#HOST_SITE}]' value_type: FLOAT units: '%' params: '(last(//nginx.cache.miss.1m.[{#HOST_SITE}]) * 100) / (last(//nginx.cache.hits.1m.[{#HOST_SITE}]) + last(//nginx.cache.miss.1m.[{#HOST_SITE}]) + (last(//nginx.cache.hits.1m.[{#HOST_SITE}]) + last(//nginx.cache.miss.1m.[{#HOST_SITE}]) = 0))' tags: - tag: Insight value: carga - name: 'Insight: {#HOST_SITE} Marcações Usuario Online' type: DEPENDENT key: 'nginx.log.user_status.list[{#HOST_SITE}}]' value_type: TEXT preprocessing: - type: JAVASCRIPT parameters: - | // Versão compatível com JavaScript antigo (ES5) - Saída em Texto Puro // Usamos um objeto para garantir que cada usuário seja único. var uniqueUsers = {}; var remoteUserRegex = /"remote_user":"([a-zA-Z0-9._-]+)"/g; var cookieUserRegex = /nc_username=([a-zA-Z0-9._-]+);/g; var urlUserRegex = /\/remote\.php\/dav\/files\/([a-zA-Z0-9._-]+)\//g; var lines = value.split('\n'); for (var i = 0; i < lines.length; i++) { var line = lines[i]; var match; // Função auxiliar para adicionar usuários ao nosso objeto de unicidade function findAndAdd(regex) { while ((match = regex.exec(line)) !== null) { if (match[1] && match[1].length > 0) { // Adiciona o usuário completo como uma chave do objeto. uniqueUsers[match[1]] = true; } } } findAndAdd(remoteUserRegex); findAndAdd(cookieUserRegex); findAndAdd(urlUserRegex); } // Pega todas as chaves do objeto para formar o array final de usuários únicos. var userArray = Object.keys(uniqueUsers); // --- LINHA ALTERADA --- // Une todos os elementos do array em uma única string, // separando cada um com um caractere de quebra de linha ('\n'). return userArray.join('\n'); master_item: key: 'log[/var/log/nginx/{#HOST_SITE}.access.log]' tags: - tag: Insight value: performance - name: 'Nginx: Requests Excelentes por minuto {#HOST_SITE}' type: CALCULATED key: 'nginx.requests.excellent.count.1m.[{#HOST_SITE}]' units: reqs/min params: | last(//nginx.request_time.count.0-20ms.1m.[{#HOST_SITE}]) + last(//nginx.request_time.count.21-50ms.1m.[{#HOST_SITE}]) + last(//nginx.request_time.count.51-100ms.1m.[{#HOST_SITE}]) + last(//nginx.request_time.count.101-200ms.1m.[{#HOST_SITE}]) tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Insight: Requisição nos Ultimos 5 Minuto em {#HOST_SITE}' type: CALCULATED key: 'nginx.requests.per_5minute[{#HOST_SITE}]' delay: 4m units: requests params: 'count(//log[/var/log/nginx/{#HOST_SITE}.access.log],5m)' tags: - tag: Insight value: carga - name: 'Insight: Requisição nos Ultimos 15 Minuto em {#HOST_SITE}' type: CALCULATED key: 'nginx.requests.per_15minute[{#HOST_SITE}]' delay: 14m units: requests params: 'count(//log[/var/log/nginx/{#HOST_SITE}.access.log],15m)' tags: - tag: Insight value: carga - name: 'Insight: Requisição nos Ultimos 24 horas em {#HOST_SITE}' type: CALCULATED key: 'nginx.requests.per_24h[{#HOST_SITE}]' delay: 1h units: requests params: 'count(//log[/var/log/nginx/{#HOST_SITE}.access.log],24h)' tags: - tag: Insight value: carga - name: 'Insight: Requisição no Ultimo 1 Minuto em {#HOST_SITE}' type: CALCULATED key: 'nginx.requests.per_minute[{#HOST_SITE}]' units: requests params: 'count(//log[/var/log/nginx/{#HOST_SITE}.access.log],1m)' tags: - tag: Insight value: carga - name: 'Insight: Média de Tempo de Resposta (1m) {#HOST_SITE}' type: CALCULATED key: 'nginx.request_time.avg.1m.[{#HOST_SITE}]' value_type: FLOAT units: ms params: 'avg(//nginx.request_time.[{#HOST_SITE}],1m)' tags: - tag: Insight value: carga - name: 'Insight: Média de Tempo de Resposta (5m) {#HOST_SITE}' type: CALCULATED key: 'nginx.request_time.avg.5m.[{#HOST_SITE}]' delay: 4m value_type: FLOAT units: ms params: 'avg(//nginx.request_time.[{#HOST_SITE}],5m)' tags: - tag: Insight value: carga - name: 'Insight: Média de Tempo de Resposta (15m) {#HOST_SITE}' type: CALCULATED key: 'nginx.request_time.avg.15m.[{#HOST_SITE}]' value_type: FLOAT units: ms params: 'avg(//nginx.request_time.[{#HOST_SITE}],15m)' tags: - tag: Insight value: carga - name: 'Nginx: RTime Flag (0-20ms) {#HOST_SITE}' type: DEPENDENT key: 'nginx.request_time.flag.0-20ms.[{#HOST_SITE}]' preprocessing: - type: JAVASCRIPT parameters: - | try { // O valor chega em segundos (ex: 0.015), convertemos para milissegundos. var value_ms = parseFloat(value) * 1000; // Verifica se o valor está na faixa de 0 a 20ms. if (value_ms >= 0 && value_ms <= 20) { return 1; } // Se não estiver na faixa, retorna null para o Zabbix descartar. return 0; } catch (e) { // Se der qualquer erro, também descarta. return 0; } master_item: key: 'nginx.request_time.[{#HOST_SITE}]' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Nginx: RTime Flag (21-50ms) {#HOST_SITE}' type: DEPENDENT key: 'nginx.request_time.flag.21-50ms.[{#HOST_SITE}]' preprocessing: - type: JAVASCRIPT parameters: - | try { // O valor chega em segundos (ex: 0.015), convertemos para milissegundos. var value_ms = parseFloat(value) * 1000; // Verifica se o valor está na faixa de 0 a 20ms. if (value_ms >= 21 && value_ms <= 50) { return 1; } // Se não estiver na faixa, retorna null para o Zabbix descartar. return 0; } catch (e) { // Se der qualquer erro, também descarta. return 0; } master_item: key: 'nginx.request_time.[{#HOST_SITE}]' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Nginx: RTime Flag (51-100ms) {#HOST_SITE}' type: DEPENDENT key: 'nginx.request_time.flag.51-100ms.[{#HOST_SITE}]' preprocessing: - type: JAVASCRIPT parameters: - | try { // O valor chega em segundos (ex: 0.015), convertemos para milissegundos. var value_ms = parseFloat(value) * 1000; // Verifica se o valor está na faixa de 0 a 20ms. if (value_ms >= 51 && value_ms <= 100) { return 1; } // Se não estiver na faixa, retorna null para o Zabbix descartar. return 0; } catch (e) { // Se der qualquer erro, também descarta. return 0; } master_item: key: 'nginx.request_time.[{#HOST_SITE}]' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Nginx: RTime Flag (201-300ms) {#HOST_SITE}' type: DEPENDENT key: 'nginx.request_time.flag.201-300ms.[{#HOST_SITE}]' preprocessing: - type: JAVASCRIPT parameters: - | try { // O valor chega em segundos (ex: 0.015), convertemos para milissegundos. var value_ms = parseFloat(value) * 1000; // Verifica se o valor está na faixa de 0 a 20ms. if (value_ms >= 201 && value_ms <= 300) { return 1; } // Se não estiver na faixa, retorna null para o Zabbix descartar. return 0; } catch (e) { // Se der qualquer erro, também descarta. return 0; } master_item: key: 'nginx.request_time.[{#HOST_SITE}]' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Nginx: RTime Flag (301-400ms) {#HOST_SITE}' type: DEPENDENT key: 'nginx.request_time.flag.301-400ms.[{#HOST_SITE}]' preprocessing: - type: JAVASCRIPT parameters: - | try { // O valor chega em segundos (ex: 0.015), convertemos para milissegundos. var value_ms = parseFloat(value) * 1000; // Verifica se o valor está na faixa de 0 a 20ms. if (value_ms >= 301 && value_ms <= 400) { return 1; } // Se não estiver na faixa, retorna null para o Zabbix descartar. return 0; } catch (e) { // Se der qualquer erro, também descarta. return 0; } master_item: key: 'nginx.request_time.[{#HOST_SITE}]' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Nginx: RTime Flag (401-500ms) {#HOST_SITE}' type: DEPENDENT key: 'nginx.request_time.flag.401-500ms.[{#HOST_SITE}]' preprocessing: - type: JAVASCRIPT parameters: - | try { // O valor chega em segundos (ex: 0.015), convertemos para milissegundos. var value_ms = parseFloat(value) * 1000; // Verifica se o valor está na faixa de 0 a 20ms. if (value_ms >= 401 && value_ms <= 500) { return 1; } // Se não estiver na faixa, retorna null para o Zabbix descartar. return 0; } catch (e) { // Se der qualquer erro, também descarta. return 0; } master_item: key: 'nginx.request_time.[{#HOST_SITE}]' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Nginx: RTime Flag (501-600ms) {#HOST_SITE}' type: DEPENDENT key: 'nginx.request_time.flag.501-600ms.[{#HOST_SITE}]' preprocessing: - type: JAVASCRIPT parameters: - | try { // O valor chega em segundos (ex: 0.015), convertemos para milissegundos. var value_ms = parseFloat(value) * 1000; // Verifica se o valor está na faixa de 0 a 20ms. if (value_ms >= 501 && value_ms <= 600) { return 1; } // Se não estiver na faixa, retorna null para o Zabbix descartar. return 0; } catch (e) { // Se der qualquer erro, também descarta. return 0; } master_item: key: 'nginx.request_time.[{#HOST_SITE}]' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Nginx: RTime Flag (601-700ms) {#HOST_SITE}' type: DEPENDENT key: 'nginx.request_time.flag.601-700ms.[{#HOST_SITE}]' preprocessing: - type: JAVASCRIPT parameters: - | try { // O valor chega em segundos (ex: 0.015), convertemos para milissegundos. var value_ms = parseFloat(value) * 1000; // Verifica se o valor está na faixa de 0 a 20ms. if (value_ms >= 601 && value_ms <= 700) { return 1; } // Se não estiver na faixa, retorna null para o Zabbix descartar. return 0; } catch (e) { // Se der qualquer erro, também descarta. return 0; } master_item: key: 'nginx.request_time.[{#HOST_SITE}]' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Nginx: RTime Flag (701-800ms) {#HOST_SITE}' type: DEPENDENT key: 'nginx.request_time.flag.701-800ms.[{#HOST_SITE}]' preprocessing: - type: JAVASCRIPT parameters: - | try { // O valor chega em segundos (ex: 0.015), convertemos para milissegundos. var value_ms = parseFloat(value) * 1000; // Verifica se o valor está na faixa de 0 a 20ms. if (value_ms >= 701 && value_ms <= 800) { return 1; } // Se não estiver na faixa, retorna null para o Zabbix descartar. return 0; } catch (e) { // Se der qualquer erro, também descarta. return 0; } master_item: key: 'nginx.request_time.[{#HOST_SITE}]' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Nginx: RTime Flag (801-900ms) {#HOST_SITE}' type: DEPENDENT key: 'nginx.request_time.flag.801-900ms.[{#HOST_SITE}]' preprocessing: - type: JAVASCRIPT parameters: - | try { // O valor chega em segundos (ex: 0.015), convertemos para milissegundos. var value_ms = parseFloat(value) * 1000; // Verifica se o valor está na faixa de 0 a 20ms. if (value_ms >= 801 && value_ms <= 900) { return 1; } // Se não estiver na faixa, retorna null para o Zabbix descartar. return 0; } catch (e) { // Se der qualquer erro, também descarta. return 0; } master_item: key: 'nginx.request_time.[{#HOST_SITE}]' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Nginx: RTime Flag (1001-2000ms) {#HOST_SITE}' type: DEPENDENT key: 'nginx.request_time.flag.1001-2000ms.[{#HOST_SITE}]' preprocessing: - type: JAVASCRIPT parameters: - | try { // O valor chega em segundos (ex: 0.015), convertemos para milissegundos. var value_ms = parseFloat(value) * 1000; // Verifica se o valor está na faixa de 0 a 20ms. if (value_ms >= 1001 && value_ms <= 2000) { return 1; } // Se não estiver na faixa, retorna null para o Zabbix descartar. return 0; } catch (e) { // Se der qualquer erro, também descarta. return 0; } master_item: key: 'nginx.request_time.[{#HOST_SITE}]' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Nginx: RTime Flag (>3001ms) {#HOST_SITE}' type: DEPENDENT key: 'nginx.request_time.flag.3001ms.[{#HOST_SITE}]' preprocessing: - type: JAVASCRIPT parameters: - | try { // O valor chega em segundos (ex: 0.015), convertemos para milissegundos. var value_ms = parseFloat(value) * 1000; // Verifica se o valor está na faixa de 0 a 20ms. if (value_ms >= 3001) { return 1; } // Se não estiver na faixa, retorna null para o Zabbix descartar. return 0; } catch (e) { // Se der qualquer erro, também descarta. return 0; } master_item: key: 'nginx.request_time.[{#HOST_SITE}]' tags: - tag: Insight value: cache - tag: Insight value: performance - name: 'Insight: Tempo de Resposta Total {#HOST_SITE}' type: DEPENDENT key: 'nginx.request_time.[{#HOST_SITE}]' value_type: FLOAT units: s preprocessing: - type: JAVASCRIPT parameters: - | try { // A variável 'value' contém a linha de log completa. // A regex procura por "request_time": e captura o número que vem depois. var regex = /"request_time":(\d+\.?\d*)/; var match = value.match(regex); // Se encontrar, match[1] conterá apenas o número (ex: "0.282"). if (match && match[1]) { return match[1]; } // Se não encontrar, descarta o valor. return null; } catch (e) { // Se houver qualquer erro, também descarta. return null; } master_item: key: 'log[/var/log/nginx/{#HOST_SITE}.access.log]' tags: - tag: Insight value: 'access log' - name: 'Nginx: URI da Requisição {#HOST_SITE}' type: DEPENDENT key: 'nginx.request_uri.[{#HOST_SITE}]' value_type: TEXT preprocessing: - type: JAVASCRIPT parameters: - | try { var regex = /"request_uri":"([^"]+)"/; var match = value.match(regex); if (match && match[1]) { return match[1]; } return null; } catch (e) { return null; } master_item: key: 'log[/var/log/nginx/{#HOST_SITE}.access.log]' tags: - tag: Insight value: cache - tag: Insight value: performance graph_prototypes: - name: 'Insight: Cache HITS {#HOST_SITE}' yaxismax: '0' percent_right: '20' ymin_type_1: FIXED graph_items: - color: 199C0D calc_fnc: ALL item: host: srvproxy001 key: 'nginx.cache.hits.5m.[{#HOST_SITE}]' - sortorder: '1' color: F63100 calc_fnc: ALL item: host: srvproxy001 key: 'nginx.cache.hits.15m.[{#HOST_SITE}]' - sortorder: '2' color: 2774A4 calc_fnc: ALL item: host: srvproxy001 key: 'nginx.cache.hits.24h.[{#HOST_SITE}]' - sortorder: '3' color: F7941D calc_fnc: ALL item: host: srvproxy001 key: 'nginx.cache.hits.1m.[{#HOST_SITE}]' - name: 'Insight: Cache HIT vs MISS {#HOST_SITE}' show_work_period: 'NO' show_triggers: 'NO' type: PIE graph_items: - color: F63100 item: host: srvproxy001 key: 'nginx.cache.miss.ratio.1m.[{#HOST_SITE}]' - sortorder: '1' color: 199C0D item: host: srvproxy001 key: 'nginx.cache.hit.ratio.1m.[{#HOST_SITE}]' - name: 'Insight: Cache MISS {#HOST_SITE}' yaxismax: '0' percent_right: '20' ymin_type_1: FIXED graph_items: - color: 199C0D calc_fnc: ALL item: host: srvproxy001 key: 'nginx.cache.miss.1m.[{#HOST_SITE}]' - sortorder: '1' color: F63100 calc_fnc: ALL item: host: srvproxy001 key: 'nginx.cache.miss.5m.[{#HOST_SITE}]' - sortorder: '2' color: 2774A4 calc_fnc: ALL item: host: srvproxy001 key: 'nginx.cache.miss.15m.[{#HOST_SITE}]' - sortorder: '3' color: F7941D calc_fnc: ALL item: host: srvproxy001 key: 'nginx.cache.miss.24h.[{#HOST_SITE}]' - name: 'Insight: Requisições {#HOST_SITE}' yaxismax: '0' ymin_type_1: FIXED graph_items: - color: F63100 yaxisside: RIGHT calc_fnc: ALL item: host: srvproxy001 key: 'nginx.requests.per_minute[{#HOST_SITE}]' - sortorder: '1' color: 199C0D calc_fnc: ALL item: host: srvproxy001 key: 'nginx.requests.per_5minute[{#HOST_SITE}]' - sortorder: '2' color: 2774A4 calc_fnc: ALL item: host: srvproxy001 key: 'nginx.requests.per_15minute[{#HOST_SITE}]' - sortorder: '3' color: F7941D calc_fnc: ALL item: host: srvproxy001 key: 'nginx.requests.per_24h[{#HOST_SITE}]' - name: 'Insight: Saúde do Site {#HOST_SITE}' show_work_period: 'NO' graph_items: - color: 199C0D calc_fnc: ALL item: host: srvproxy001 key: 'net.tcp.service[http,"{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PORT}"]' - sortorder: '1' color: F63100 calc_fnc: ALL item: host: srvproxy001 key: 'nginx.cache.hit.ratio.1m.[{#HOST_SITE}]' - sortorder: '2' color: F7941D calc_fnc: ALL item: host: srvproxy001 key: 'nginx.request_time.avg.1m.[{#HOST_SITE}]' - name: 'Insight: Tempo de Resposta vs Requisições {#HOST_SITE}' ymin_type_1: FIXED graph_items: - sortorder: '1' color: F63100 yaxisside: RIGHT calc_fnc: ALL item: host: srvproxy001 key: 'nginx.requests.per_minute[{#HOST_SITE}]' - sortorder: '2' drawtype: FILLED_REGION color: 199C0D calc_fnc: ALL item: host: srvproxy001 key: 'nginx.request_time.[{#HOST_SITE}]' - name: 'Insight: Tempos de Resposta {#HOST_SITE}' percent_right: '20' ymin_type_1: FIXED graph_items: - color: 199C0D calc_fnc: ALL item: host: srvproxy001 key: 'nginx.request_time.avg.1m.[{#HOST_SITE}]' - sortorder: '1' color: F63100 calc_fnc: ALL item: host: srvproxy001 key: 'nginx.request_time.avg.5m.[{#HOST_SITE}]' - sortorder: '2' color: 2774A4 calc_fnc: ALL item: host: srvproxy001 key: 'nginx.request_time.avg.15m.[{#HOST_SITE}]' preprocessing: - type: JAVASCRIPT parameters: - | // A variável 'value' é a string completa do UserParameter, contendo caminhos // separados por vírgula, espaço e/ou quebra de linha. // A Regex /[\s,]+/ divide a string em: // - Vírgulas (,) // - Espaços (incluindo múltiplos) // - Quebras de linha (\n, \r) // O filter(Boolean) remove quaisquer entradas vazias que o split possa gerar. var full_paths = value.trim().split(/[\s,]+/).filter(Boolean); var lld_data = []; // Regex para extrair o nome do site: // ^ -> Início do item (após o split) // (.+) -> Captura o nome do site (o que for que esteja lá) var regex = /^\/var\/log\/nginx\/(.+)\.access\.log$/; // Itera sobre todos os caminhos. for (var i = 0; i < full_paths.length; i++) { var path = full_paths[i]; // Aplica a regex em cada item. var match = path.match(regex); // match[1] contém o nome do site capturado em (.+). if (match && match[1]) { lld_data.push({ "{#HOST_SITE}": match[1] }); } } // Retorna o JSON LLD final. return JSON.stringify({ "data": lld_data }); macros: - macro: '{$NGINX.STUB_STATUS.HOST}' value: 172.16.254.1 description: 'O hostname ou endereço IP do host Nginx ou do contêiner Nginx com `stub_status`.' - macro: '{$NGINX.STUB_STATUS.PATH}' value: nginx_status description: 'The path of the `Nginx stub_status` page.' - macro: '{$NGINX.STUB_STATUS.PORT}' value: '8080' description: 'The port of the `Nginx stub_status` host or container.' inventory_mode: AUTOMATIC inventory: name: srvproxy001 os: 'Linux version 6.1.0-39-amd64 (debian-kernel@lists.debian.org) (gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0, GNU ld (GNU Binutils fo'