933 lines
39 KiB
YAML
933 lines
39 KiB
YAML
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'
|