Compare commits
2 Commits
8c54e5d6ee
...
0bc4984f89
| Author | SHA1 | Date |
|---|---|---|
|
|
0bc4984f89 | |
|
|
7c5cab088f |
|
|
@ -0,0 +1,554 @@
|
|||
zabbix_export:
|
||||
version: '7.0'
|
||||
template_groups:
|
||||
- uuid: a571c0d144b14fd4a87a9d9b2aa9fcd6
|
||||
name: Templates/Aplicações
|
||||
templates:
|
||||
- uuid: a0e05ca631034676821b7e0e1ce25488
|
||||
template: 'Microsoft Exchange Server 2016 by Zabbix agent active'
|
||||
name: 'Microsoft Exchange Server 2016 by Zabbix agent active'
|
||||
description: 'Template Gold para Microsoft Exchange Server (2016/2019).
|
||||
|
||||
|
||||
Monitoramento 360º com foco em performance e disponibilidade.
|
||||
|
||||
|
||||
Inclui:
|
||||
|
||||
- Filas de Transporte (Submission, Delivery, Poison)
|
||||
|
||||
- Banco de Dados (Latência, Page Faults, Status)
|
||||
|
||||
- Serviços MSExchange (Discovery Automático)
|
||||
|
||||
- Web Access (OWA/ECP)
|
||||
|
||||
- Métricas de ActiveSync e WebServices
|
||||
|
||||
|
||||
Desenvolvido por Arthur "O Farol" Mendes.
|
||||
|
||||
'
|
||||
vendor:
|
||||
name: ITGuys
|
||||
version: 1.0-gold
|
||||
groups:
|
||||
- name: Templates/Aplicações
|
||||
items:
|
||||
- uuid: 4aa072de238b47b386a908ee01f1bc14
|
||||
name: 'Bancos de Dados: Total Montados'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchange Active Manager(_total)\Database Mounted"]
|
||||
delay: '{$MS.EXCHANGE.PERF.INTERVAL}'
|
||||
description: Número de cópias de banco de dados ativas no servidor.
|
||||
preprocessing:
|
||||
- type: DISCARD_UNCHANGED_HEARTBEAT
|
||||
parameters:
|
||||
- 3h
|
||||
tags:
|
||||
- tag: component
|
||||
value: database
|
||||
- uuid: 551b8a4f9fe64d1ea591d7ae26ea2ca4
|
||||
name: 'ActiveSync: Comandos Ping Pendentes'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchange ActiveSync\Ping Commands Pending", {$MS.EXCHANGE.PERF.INTERVAL}]
|
||||
delay: '{$MS.EXCHANGE.PERF.INTERVAL}'
|
||||
value_type: FLOAT
|
||||
description: Número de comandos de ping pendentes na fila.
|
||||
tags:
|
||||
- tag: component
|
||||
value: mobile
|
||||
- uuid: ead34280d2e24fe4a60ba857b32d5c77
|
||||
name: 'ActiveSync: Requisições por Segundo'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchange ActiveSync\Requests/sec", {$MS.EXCHANGE.PERF.INTERVAL}]
|
||||
delay: '{$MS.EXCHANGE.PERF.INTERVAL}'
|
||||
value_type: FLOAT
|
||||
description: Taxa de requisições HTTP recebidas via ASP.NET para ActiveSync. Indica carga de usuários móveis.
|
||||
tags:
|
||||
- tag: component
|
||||
value: mobile
|
||||
- uuid: 977fbdde2a924181a14e7d33134c12f7
|
||||
name: 'OWA: Usuários Únicos Atuais'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchange OWA\Current Unique Users", {$MS.EXCHANGE.PERF.INTERVAL}]
|
||||
delay: '{$MS.EXCHANGE.PERF.INTERVAL}'
|
||||
value_type: FLOAT
|
||||
description: Número de usuários únicos logados no Outlook Web App.
|
||||
tags:
|
||||
- tag: component
|
||||
value: web
|
||||
- uuid: 7625ed7825f847d2ae9d341c61f8c453
|
||||
name: 'OWA: Requisições por Segundo'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchange OWA\Requests/sec", {$MS.EXCHANGE.PERF.INTERVAL}]
|
||||
delay: '{$MS.EXCHANGE.PERF.INTERVAL}'
|
||||
value_type: FLOAT
|
||||
description: Taxa de requisições processadas pelo OWA.
|
||||
tags:
|
||||
- tag: component
|
||||
value: web
|
||||
triggers:
|
||||
- uuid: a1a64d10544c446aa04cb23538b42e70
|
||||
expression: 'last(/Microsoft Exchange Server 2016 by Zabbix agent active/perf_counter_en["\MSExchange OWA\Requests/sec", {$MS.EXCHANGE.PERF.INTERVAL}])=0 and avg(/Microsoft Exchange Server 2016 by Zabbix agent active/perf_counter_en["\MSExchange OWA\Requests/sec", {$MS.EXCHANGE.PERF.INTERVAL}],1h:now-1d)>5'
|
||||
name: '📉 Exchange: Queda Anômala de Tráfego OWA'
|
||||
event_name: '📉 Exchange: OWA zerado (Anomalia! Média esperada: {ITEM.VALUE2})'
|
||||
priority: HIGH
|
||||
description: 'Detecção de Anomalia: O tráfego do OWA caiu a zero, mas a média histórica para este dia/hora é superior a 5 req/s.'
|
||||
tags:
|
||||
- tag: scope
|
||||
value: anomaly
|
||||
- uuid: e4f4dc8abfa642ada0be9beb659c356c
|
||||
name: 'WebServices: Requisições por Segundo'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchangeWS\Requests/sec", {$MS.EXCHANGE.PERF.INTERVAL}]
|
||||
delay: '{$MS.EXCHANGE.PERF.INTERVAL}'
|
||||
value_type: FLOAT
|
||||
description: Taxa de requisições EWS (Exchange Web Services) processadas.
|
||||
tags:
|
||||
- tag: component
|
||||
value: web
|
||||
- uuid: b06d3ff34b6b47058c91b022114ef64d
|
||||
name: 'Zabbix: Disponibilidade do Agente (Active)'
|
||||
type: INTERNAL
|
||||
key: zabbix[host,active_agent,available]
|
||||
description: 'Disponibilidade das checagens ativas.
|
||||
|
||||
0 - desconhecido
|
||||
|
||||
1 - disponível
|
||||
|
||||
2 - indisponível
|
||||
|
||||
'
|
||||
valuemap:
|
||||
name: zabbix.host.active_agent.available
|
||||
tags:
|
||||
- tag: component
|
||||
value: health
|
||||
triggers:
|
||||
- uuid: fcda33f2d0eb4cc4903bff0e16b7f2ad
|
||||
expression: min(/Microsoft Exchange Server 2016 by Zabbix agent active/zabbix[host,active_agent,available],{$AGENT.TIMEOUT})=2
|
||||
name: '🚨 Exchange: Agente Zabbix Indisponível'
|
||||
opdata: 'Estado: {ITEM.LASTVALUE1}'
|
||||
priority: HIGH
|
||||
description: O Agente Zabbix (Active) parou de reportar dados.
|
||||
tags:
|
||||
- tag: scope
|
||||
value: availability
|
||||
- uuid: 81acfad17f434e25b52491c94118a0bd
|
||||
name: 'Fila de Transporte: Submission Queue'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchangeTransport Queues(_Total)\Submission Queue Length"]
|
||||
delay: 1m
|
||||
value_type: FLOAT
|
||||
description: Número de itens na fila de Submissão. Se > 50, indica gargalo no transporte.
|
||||
tags:
|
||||
- tag: component
|
||||
value: transport
|
||||
triggers:
|
||||
- uuid: cba94316ce8f4b15a9ac696c3fe3f301
|
||||
expression: min(/Microsoft Exchange Server 2016 by Zabbix agent active/perf_counter_en["\MSExchangeTransport Queues(_Total)\Submission Queue Length"],5m)>50
|
||||
name: '⚠️ Exchange: Fila de Submissão Alta'
|
||||
event_name: '⚠️ Exchange: Fila de Submissão Alta ({ITEM.LASTVALUE} > 50)'
|
||||
priority: AVERAGE
|
||||
description: A fila de submissão está acumulando mensagens por mais de 5 minutos.
|
||||
dependencies:
|
||||
- name: '🚨 Serviço Parado: Microsoft Exchange Transport Submission'
|
||||
expression: 'last(/Microsoft Exchange Server 2016 by Zabbix agent active/service.info["MSExchangeSubmission",state])<>0'
|
||||
- uuid: 1cfa33d9c4b24cb4901fb3dbad573465
|
||||
expression: 'forecast(/Microsoft Exchange Server 2016 by Zabbix agent active/perf_counter_en["\MSExchangeTransport Queues(_Total)\Submission Queue Length"],1h,15m)>200'
|
||||
name: '🔮 Exchange: Fila de Submissão em Crescimento Rápido'
|
||||
event_name: '🔮 Exchange: Fila de Submissão vai estourar (200 itens) em 15m'
|
||||
priority: HIGH
|
||||
description: 'Análise Preditiva: A fila está crescendo rápido e deve atingir nível crítico em breve.'
|
||||
tags:
|
||||
- tag: scope
|
||||
value: prediction
|
||||
dependencies:
|
||||
- name: '🚨 Serviço Parado: Microsoft Exchange Transport Submission'
|
||||
expression: 'last(/Microsoft Exchange Server 2016 by Zabbix agent active/service.info["MSExchangeSubmission",state])<>0'
|
||||
- uuid: 0f1acc8f102c43209268ceebbc608c1b
|
||||
name: 'Fila de Transporte: Active Mailbox Delivery'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchangeTransport Queues(_Total)\Active Mailbox Delivery Queue Length"]
|
||||
delay: 1m
|
||||
value_type: FLOAT
|
||||
description: Número de mensagens sendo entregues para caixas locais. Alto volume indica lentidão no disco/DB.
|
||||
tags:
|
||||
- tag: component
|
||||
value: transport
|
||||
triggers:
|
||||
- uuid: 08197c3b395e446b93f28435f1cb5b92
|
||||
expression: min(/Microsoft Exchange Server 2016 by Zabbix agent active/perf_counter_en["\MSExchangeTransport Queues(_Total)\Active Mailbox Delivery Queue Length"],5m)>100
|
||||
name: '⚠️ Exchange: Fila de Entrega Local Alta'
|
||||
event_name: '⚠️ Exchange: Fila de Entrega Local Alta ({ITEM.LASTVALUE} > 100)'
|
||||
priority: AVERAGE
|
||||
description: Muitas mensagens aguardando entrega local.
|
||||
dependencies:
|
||||
- name: '🚨 Serviço Parado: Microsoft Exchange Transport'
|
||||
expression: 'last(/Microsoft Exchange Server 2016 by Zabbix agent active/service.info["MSExchangeTransport",state])<>0'
|
||||
- uuid: 75c256562e28429492439f0ce87150b8
|
||||
expression: 'forecast(/Microsoft Exchange Server 2016 by Zabbix agent active/perf_counter_en["\MSExchangeTransport Queues(_Total)\Active Mailbox Delivery Queue Length"],1h,15m)>200'
|
||||
name: '🔮 Exchange: Fila de Entrega em Crescimento Rápido'
|
||||
event_name: '🔮 Exchange: Fila de Entrega vai estourar (200 itens) em 15m'
|
||||
priority: HIGH
|
||||
description: 'Análise Preditiva: A fila de entrega está crescendo rápido.'
|
||||
tags:
|
||||
- tag: scope
|
||||
value: prediction
|
||||
dependencies:
|
||||
- name: '🚨 Serviço Parado: Microsoft Exchange Transport'
|
||||
expression: 'last(/Microsoft Exchange Server 2016 by Zabbix agent active/service.info["MSExchangeTransport",state])<>0'
|
||||
- uuid: bd276a0ec6c14be7bd519c74e88ea50f
|
||||
name: 'Fila de Transporte: Poison Queue'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchangeTransport Queues(_Total)\Poison Queue Length"]
|
||||
delay: 10m
|
||||
value_type: FLOAT
|
||||
description: Mensagens corrompidas ou perigosas isoladas pelo Exchange.
|
||||
tags:
|
||||
- tag: component
|
||||
value: transport
|
||||
triggers:
|
||||
- uuid: a12a9a66b56e426aa680984334d8e539
|
||||
expression: last(/Microsoft Exchange Server 2016 by Zabbix agent active/perf_counter_en["\MSExchangeTransport Queues(_Total)\Poison Queue Length"])>0
|
||||
name: '🚨 Exchange: Mensagens em Quarentena (Poison Queue) detectadas'
|
||||
event_name: '🚨 Exchange: {ITEM.LASTVALUE} Mensagens Corrompidas/Perigosas (Poison Queue)'
|
||||
priority: HIGH
|
||||
description: |
|
||||
A "Poison Queue" isola mensagens que causaram falhas graves no sistema após múltiplas tentativas de processamento.
|
||||
Impacto: Essas mensagens NÃO serão entregues.
|
||||
Ação N1:
|
||||
1. Acesso o servidor Exchange via RDP/PowerShell.
|
||||
2. Execute "Get-Message -Queue Poison" para ver os detalhes.
|
||||
3. Escalone para N3 se não souber como tratar (remover ou reenfileirar).
|
||||
- uuid: b4ce5e851b35400ab9d14e8889d256c8
|
||||
name: 'Fila de Transporte: Retry Mailbox Delivery'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchangeTransport Queues(_Total)\Retry Mailbox Delivery Queue Length"]
|
||||
delay: 5m
|
||||
value_type: FLOAT
|
||||
description: Mensagens em nova tentativa de entrega.
|
||||
tags:
|
||||
- tag: component
|
||||
value: transport
|
||||
- uuid: b4882bc9014a4bd6bdee1baac6e8b27f
|
||||
name: 'Service: Status do Microsoft Exchange Transport Submission'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: service.info["MSExchangeSubmission",state]
|
||||
delay: 1m
|
||||
description: Status do serviço de submissão de transporte.
|
||||
valuemap:
|
||||
name: Service state
|
||||
tags:
|
||||
- tag: component
|
||||
value: service
|
||||
triggers:
|
||||
- uuid: 4b34aadb986643eebc84f23a3741a795
|
||||
expression: last(/Microsoft Exchange Server 2016 by Zabbix agent active/service.info["MSExchangeSubmission",state])<>0
|
||||
name: '🚨 Serviço Parado: Microsoft Exchange Transport Submission'
|
||||
priority: HIGH
|
||||
description: O serviço Microsoft Exchange Transport Submission está parado.
|
||||
tags:
|
||||
- tag: scope
|
||||
value: availability
|
||||
- uuid: c9300a9c97b84f21bb7eb45719caae58
|
||||
name: 'Service: Status do Microsoft Exchange Transport'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: service.info["MSExchangeTransport",state]
|
||||
delay: 1m
|
||||
description: Status do serviço de transporte principal.
|
||||
valuemap:
|
||||
name: Service state
|
||||
tags:
|
||||
- tag: component
|
||||
value: service
|
||||
triggers:
|
||||
- uuid: a1b2c3d4e5f64a1b8c2d3e4f5a6b7c8d
|
||||
expression: last(/Microsoft Exchange Server 2016 by Zabbix agent active/service.info["MSExchangeTransport",state])<>0
|
||||
name: '🚨 Serviço Parado: Microsoft Exchange Transport'
|
||||
priority: HIGH
|
||||
description: O serviço Microsoft Exchange Transport está parado.
|
||||
tags:
|
||||
- tag: scope
|
||||
value: availability
|
||||
discovery_rules:
|
||||
- uuid: c3c2d45be1f4439292678d07d36eb042
|
||||
name: Descoberta de Serviços Exchange
|
||||
type: ZABBIX_ACTIVE
|
||||
key: service.discovery
|
||||
delay: 1h
|
||||
filter:
|
||||
evaltype: AND
|
||||
conditions:
|
||||
- macro: '{#SERVICE.NAME}'
|
||||
value: ^(?!MSExchangeTransport$|MSExchangeSubmission$)MSExchange.*
|
||||
operator: MATCHES_REGEX
|
||||
- macro: '{#SERVICE.STARTUPNAME}'
|
||||
value: automatic
|
||||
operator: MATCHES_REGEX
|
||||
description: Descobre serviços do Exchange que iniciam automaticamente.
|
||||
item_prototypes:
|
||||
- uuid: dd3c489ce5f94540b50b6f2aa1aac65e
|
||||
name: 'Serviço: Status do {#SERVICE.DISPLAYNAME}'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: service.info["{#SERVICE.NAME}",state]
|
||||
delay: 3m
|
||||
description: Status atual do serviço {#SERVICE.DISPLAYNAME}.
|
||||
valuemap:
|
||||
name: Service state
|
||||
tags:
|
||||
- tag: component
|
||||
value: service
|
||||
trigger_prototypes:
|
||||
- uuid: 38cefb16c51448d69e05b322e08a495a
|
||||
expression: last(/Microsoft Exchange Server 2016 by Zabbix agent active/service.info["{#SERVICE.NAME}",state])<>0
|
||||
name: '🚨 Serviço Parado: {#SERVICE.DISPLAYNAME}'
|
||||
priority: HIGH
|
||||
description: O serviço {#SERVICE.DISPLAYNAME} deveria estar rodando (Auto) mas está parado.
|
||||
- uuid: 2c5a8b3587f9473484b9f52cc65bd57c
|
||||
name: Descoberta de Bancos de Dados
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_instance.discovery["MSExchange Active Manager"]
|
||||
delay: 1h
|
||||
description: Descoberta de instâncias de Bancos de Dados Database.
|
||||
item_prototypes:
|
||||
- uuid: d6c7a4d5987540cb850ac5744a3d1042
|
||||
name: 'Banco [{#INSTANCE}]: Função da Cópia'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchange Active Manager({#INSTANCE})\Database Copy Role Active"]
|
||||
delay: '{$MS.EXCHANGE.PERF.INTERVAL}'
|
||||
description: Função da cópia do banco (Ativa/Passiva).
|
||||
valuemap:
|
||||
name: Exchange database copy role
|
||||
preprocessing:
|
||||
- type: DISCARD_UNCHANGED_HEARTBEAT
|
||||
parameters:
|
||||
- 3h
|
||||
tags:
|
||||
- tag: component
|
||||
value: database
|
||||
- uuid: 2d17e641e64b401285f2cd151c0376f9
|
||||
name: 'Banco [{#INSTANCE}]: Page Faults/seg'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchange Database({#INF.STORE})\Database Page Fault Stalls/sec", {$MS.EXCHANGE.PERF.INTERVAL}]
|
||||
delay: '{$MS.EXCHANGE.PERF.INTERVAL}'
|
||||
value_type: FLOAT
|
||||
description: Taxa de falhas de página. Se > 0 com frequência, indica falta de cache/RAM.
|
||||
tags:
|
||||
- tag: component
|
||||
value: performance
|
||||
trigger_prototypes:
|
||||
- uuid: 38a4f3ef4f984513bbdfea4aa1095850
|
||||
expression: min(/Microsoft Exchange Server 2016 by Zabbix agent active/perf_counter_en["\MSExchange Database({#INF.STORE})\Database Page Fault Stalls/sec", {$MS.EXCHANGE.PERF.INTERVAL}],{$MS.EXCHANGE.DB.FAULTS.TIME})>{$MS.EXCHANGE.DB.FAULTS.WARN}
|
||||
name: '⚠️ Exchange: Page Faults Elevados em {#INSTANCE}'
|
||||
event_name: '⚠️ Exchange: Page Faults Elevados em {#INSTANCE} (>{$MS.EXCHANGE.DB.FAULTS.WARN})'
|
||||
priority: AVERAGE
|
||||
description: Falhas de página excessivas detectadas no banco {#INSTANCE}.
|
||||
- uuid: 5e18839af10849fcb1e0d855ed015d0d
|
||||
name: 'Banco [{#INSTANCE}]: Logs Aguardando (Stalled)'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchange Database({#INF.STORE})\Log Record Stalls/sec", {$MS.EXCHANGE.PERF.INTERVAL}]
|
||||
delay: '{$MS.EXCHANGE.PERF.INTERVAL}'
|
||||
value_type: FLOAT
|
||||
description: Logs aguardando buffer. Média deve ser < 10.
|
||||
tags:
|
||||
- tag: component
|
||||
value: performance
|
||||
trigger_prototypes:
|
||||
- uuid: 38185b2825d141f8acc508895a2d0125
|
||||
expression: avg(/Microsoft Exchange Server 2016 by Zabbix agent active/perf_counter_en["\MSExchange Database({#INF.STORE})\Log Record Stalls/sec", {$MS.EXCHANGE.PERF.INTERVAL}],{$MS.EXCHANGE.LOG.STALLS.TIME})>{$MS.EXCHANGE.LOG.STALLS.WARN}
|
||||
name: '🐢 Exchange: Escrita de Logs Travada em {#INSTANCE}'
|
||||
priority: AVERAGE
|
||||
description: Muitos registros de log aguardando escrita.
|
||||
- uuid: 81ac288a0d784f8d9cd99883b44797ee
|
||||
name: 'Banco [{#INSTANCE}]: Latência de Leitura (Ativo)'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Reads (Attached) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]
|
||||
delay: '{$MS.EXCHANGE.PERF.INTERVAL}'
|
||||
value_type: FLOAT
|
||||
units: s
|
||||
description: Latência média de leitura. Esperado < 20ms.
|
||||
preprocessing:
|
||||
- type: MULTIPLIER
|
||||
parameters:
|
||||
- '0.001'
|
||||
tags:
|
||||
- tag: component
|
||||
value: performance
|
||||
trigger_prototypes:
|
||||
- uuid: bc1a548c79bc428ea005f652e699f4cc
|
||||
expression: min(/Microsoft Exchange Server 2016 by Zabbix agent active/perf_counter_en["\MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Reads (Attached) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}],{$MS.EXCHANGE.DB.ACTIVE.READ.TIME})>{$MS.EXCHANGE.DB.ACTIVE.READ.WARN}
|
||||
name: '🐢 Exchange: Latência de Leitura Alta em {#INSTANCE}'
|
||||
priority: WARNING
|
||||
description: A latência de leitura está acima de 20ms sustentados.
|
||||
- uuid: 3fe061c683b9424c8b88caade4a5a4e3
|
||||
name: 'Banco [{#INSTANCE}]: Latência de Escrita (Ativo)'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Writes (Attached) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]
|
||||
delay: '{$MS.EXCHANGE.PERF.INTERVAL}'
|
||||
value_type: FLOAT
|
||||
units: s
|
||||
description: Latência média de escrita. Esperado < 50ms.
|
||||
preprocessing:
|
||||
- type: MULTIPLIER
|
||||
parameters:
|
||||
- '0.001'
|
||||
tags:
|
||||
- tag: component
|
||||
value: performance
|
||||
trigger_prototypes:
|
||||
- uuid: 47c01687add949ab8f72633ae8a1f53f
|
||||
expression: min(/Microsoft Exchange Server 2016 by Zabbix agent active/perf_counter_en["\MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Writes (Attached) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}],{$MS.EXCHANGE.DB.ACTIVE.WRITE.TIME})>{$MS.EXCHANGE.DB.ACTIVE.WRITE.WARN}
|
||||
name: '🐢 Exchange: Latência de Escrita Alta em {#INSTANCE}'
|
||||
priority: WARNING
|
||||
description: A latência de escrita está acima de 50ms sustentados.
|
||||
- uuid: 1f942e624a4c43e1a737c956cefbb1b1
|
||||
name: 'Banco [{#INSTANCE}]: Estado'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchangeIS Store({#INSTANCE})\Database State"]
|
||||
delay: '{$MS.EXCHANGE.PERF.INTERVAL}'
|
||||
description: 'Estado do Banco: 1=Montado, 0=Desmontado'
|
||||
valuemap:
|
||||
name: Exchange database state
|
||||
tags:
|
||||
- tag: component
|
||||
value: availability
|
||||
- uuid: c2b84a11f7ab47019b6f97c960669b60
|
||||
name: 'Banco [{#INSTANCE}]: Tamanho do Arquivo'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchange Database({#INF.STORE})\Database File Size In Bytes", {$MS.EXCHANGE.PERF.INTERVAL}]
|
||||
delay: 5m
|
||||
value_type: FLOAT
|
||||
units: B
|
||||
description: Tamanho atual do arquivo de banco de dados (.edb).
|
||||
tags:
|
||||
- tag: component
|
||||
value: storage
|
||||
trigger_prototypes:
|
||||
- uuid: d52164ffd4e0436daa9cf2d038d2f4bc
|
||||
expression: last(/Microsoft Exchange Server 2016 by Zabbix agent active/perf_counter_en["\MSExchange Database({#INF.STORE})\Database File Size In Bytes", {$MS.EXCHANGE.PERF.INTERVAL}])>{$EXCHANGE.DB.SIZE.WARN}
|
||||
name: '⚠️ Exchange: Banco de Dados Grande em {#INSTANCE}'
|
||||
event_name: '⚠️ Exchange: Banco {#INSTANCE} está grande ({ITEM.LASTVALUE} > {$EXCHANGE.DB.SIZE.WARN})'
|
||||
priority: WARNING
|
||||
description: O arquivo do banco de dados excedeu o limite configurado.
|
||||
- uuid: 0ea0824b26714249a2a90965377f0c10
|
||||
name: 'Banco [{#INSTANCE}]: Total de Itens'
|
||||
type: ZABBIX_ACTIVE
|
||||
key: perf_counter_en["\MSExchange IS Store({#INF.STORE})\Item Count", {$MS.EXCHANGE.PERF.INTERVAL}]
|
||||
delay: 15m
|
||||
value_type: FLOAT
|
||||
description: Contagem total de itens no banco de dados.
|
||||
tags:
|
||||
- tag: component
|
||||
value: storage
|
||||
preprocessing:
|
||||
- type: JAVASCRIPT
|
||||
parameters:
|
||||
- "var data = JSON.parse(value);\ndata.forEach(function(instance) {\n\tif (instance[\"{#INSTANCE}\"] === '_total') {\n\t\tinstance[\"{#INF.STORE}\"] = 'Information Store';\n\t}\n\telse {\n\t\tinstance[\"{#INF.STORE}\"] = 'Information Store - ' + instance[\"{#INSTANCE}\"];\n\t}\n})\nreturn JSON.stringify(data);\n"
|
||||
- type: DISCARD_UNCHANGED_HEARTBEAT
|
||||
parameters:
|
||||
- 1h
|
||||
graph_prototypes:
|
||||
- uuid: 7f33d43a755d49e1987d6eac3df0b330
|
||||
name: 'Exchange: Tamanho do Banco {#INSTANCE}'
|
||||
graph_items:
|
||||
- color: 1A7C11
|
||||
item:
|
||||
host: 'Microsoft Exchange Server 2016 by Zabbix agent active'
|
||||
key: perf_counter_en["\MSExchange Database({#INF.STORE})\Database File Size In Bytes", {$MS.EXCHANGE.PERF.INTERVAL}]
|
||||
- uuid: 4b27c3da6a7b45e0a6e78b27c3da4560
|
||||
name: 'Exchange: Contagem de Itens em {#INSTANCE}'
|
||||
graph_items:
|
||||
- color: 199C0D
|
||||
item:
|
||||
host: 'Microsoft Exchange Server 2016 by Zabbix agent active'
|
||||
key: perf_counter_en["\MSExchange IS Store({#INF.STORE})\Item Count", {$MS.EXCHANGE.PERF.INTERVAL}]
|
||||
httptests:
|
||||
- uuid: 2e6bd09c77fa434cbc8c02ad74d12b7c
|
||||
name: 'Teste de Disponibilidade: OWA'
|
||||
steps:
|
||||
- name: Login Page
|
||||
url: '{$EXCHANGE.URL}'
|
||||
status_codes: '200'
|
||||
tags:
|
||||
- tag: component
|
||||
value: web
|
||||
macros:
|
||||
- macro: '{$AGENT.TIMEOUT}'
|
||||
value: 5m
|
||||
- macro: '{$MS.EXCHANGE.PERF.INTERVAL}'
|
||||
value: '60'
|
||||
- macro: '{$MS.EXCHANGE.DB.FAULTS.WARN}'
|
||||
value: '0'
|
||||
- macro: '{$MS.EXCHANGE.DB.FAULTS.TIME}'
|
||||
value: 5m
|
||||
- macro: '{$MS.EXCHANGE.LOG.STALLS.WARN}'
|
||||
value: '100'
|
||||
- macro: '{$MS.EXCHANGE.LOG.STALLS.TIME}'
|
||||
value: 10m
|
||||
- macro: '{$MS.EXCHANGE.DB.ACTIVE.READ.WARN}'
|
||||
value: '0.02'
|
||||
- macro: '{$MS.EXCHANGE.DB.ACTIVE.READ.TIME}'
|
||||
value: 5m
|
||||
- macro: '{$MS.EXCHANGE.DB.ACTIVE.WRITE.WARN}'
|
||||
value: '0.05'
|
||||
- macro: '{$MS.EXCHANGE.DB.ACTIVE.WRITE.TIME}'
|
||||
value: 10m
|
||||
- macro: '{$EXCHANGE.URL}'
|
||||
value: https://webmail.itguys.com.br/owa
|
||||
description: URL para teste do OWA
|
||||
- macro: '{$EXCHANGE.DB.SIZE.WARN}'
|
||||
value: 500G
|
||||
description: Limite de aviso para tamanho do banco de dados.
|
||||
valuemaps:
|
||||
- uuid: 4608c0402f434f66b6fbc3b7b9cbb7ce
|
||||
name: Exchange database copy role
|
||||
mappings:
|
||||
- value: '0'
|
||||
newvalue: Passiva
|
||||
- value: '1'
|
||||
newvalue: Ativa
|
||||
- uuid: e6e48613166048cea3eb11be58dde6f1
|
||||
name: Exchange database state
|
||||
mappings:
|
||||
- value: '0'
|
||||
newvalue: Desmontado
|
||||
- value: '1'
|
||||
newvalue: Montado
|
||||
- value: '2'
|
||||
newvalue: Saudável
|
||||
- uuid: 1a2e1ca2e381428da1f9141fec223b37
|
||||
name: zabbix.host.active_agent.available
|
||||
mappings:
|
||||
- value: '0'
|
||||
newvalue: desconhecido
|
||||
- value: '1'
|
||||
newvalue: disponível
|
||||
- value: '2'
|
||||
newvalue: indisponível
|
||||
- uuid: 65abb9cc274947129796e721a34c41dd
|
||||
name: Service state
|
||||
mappings:
|
||||
- value: '0'
|
||||
newvalue: Running
|
||||
- value: '1'
|
||||
newvalue: Paused
|
||||
- value: '2'
|
||||
newvalue: Start Pending
|
||||
- value: '3'
|
||||
newvalue: Pause Pending
|
||||
- value: '4'
|
||||
newvalue: Continue Pending
|
||||
- value: '5'
|
||||
newvalue: Stop Pending
|
||||
- value: '6'
|
||||
newvalue: Stopped
|
||||
- value: '7'
|
||||
newvalue: Unknown
|
||||
- value: '255'
|
||||
newvalue: No such service
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# Documentação: Microsoft Exchange Server 2016 by Zabbix agent active
|
||||
|
||||
**Template:** Microsoft Exchange Server 2016 by Zabbix agent active
|
||||
**Descrição:**
|
||||
Template Gold para Microsoft Exchange Server (2016/2019).
|
||||
|
||||
Monitoramento 360º com foco em performance e disponibilidade.
|
||||
|
||||
Inclui:
|
||||
- Filas de Transporte (Submission, Delivery, Poison)
|
||||
- Banco de Dados (Latência, Page Faults, Status)
|
||||
- Serviços MSExchange (Discovery Automático)
|
||||
- Web Access (OWA/ECP)
|
||||
- Métricas de ActiveSync e WebServices
|
||||
|
||||
Desenvolvido por Arthur "O Farol" Mendes.
|
||||
|
||||
## Itens Monitorados
|
||||
|
||||
### Itens Globais
|
||||
- **Bancos de Dados: Total Montados** (`perf_counter_en["\MSExchange Active Manager(_total)\Database Mounted"]`)
|
||||
- **ActiveSync: Comandos Ping Pendentes** (`perf_counter_en["\MSExchange ActiveSync\Ping Commands Pending", {$MS.EXCHANGE.PERF.INTERVAL}]`)
|
||||
- **ActiveSync: Requisições por Segundo** (`perf_counter_en["\MSExchange ActiveSync\Requests/sec", {$MS.EXCHANGE.PERF.INTERVAL}]`)
|
||||
- **OWA: Usuários Únicos Atuais** (`perf_counter_en["\MSExchange OWA\Current Unique Users", {$MS.EXCHANGE.PERF.INTERVAL}]`)
|
||||
- **OWA: Requisições por Segundo** (`perf_counter_en["\MSExchange OWA\Requests/sec", {$MS.EXCHANGE.PERF.INTERVAL}]`)
|
||||
- **WebServices: Requisições por Segundo** (`perf_counter_en["\MSExchangeWS\Requests/sec", {$MS.EXCHANGE.PERF.INTERVAL}]`)
|
||||
- **Zabbix: Disponibilidade do Agente (Active)** (`zabbix[host,active_agent,available]`)
|
||||
- **Fila de Transporte: Submission Queue** (`perf_counter_en["\MSExchangeTransport Queues(_Total)\Submission Queue Length"]`)
|
||||
- **Fila de Transporte: Active Mailbox Delivery** (`perf_counter_en["\MSExchangeTransport Queues(_Total)\Active Mailbox Delivery Queue Length"]`)
|
||||
- **Fila de Transporte: Poison Queue** (`perf_counter_en["\MSExchangeTransport Queues(_Total)\Poison Queue Length"]`)
|
||||
- **Fila de Transporte: Retry Mailbox Delivery** (`perf_counter_en["\MSExchangeTransport Queues(_Total)\Retry Mailbox Delivery Queue Length"]`)
|
||||
- **Service: Status do Microsoft Exchange Transport Submission** (`service.info["MSExchangeSubmission",state]`)
|
||||
- **Service: Status do Microsoft Exchange Transport** (`service.info["MSExchangeTransport",state]`)
|
||||
|
||||
### Regras de Descoberta (LLD)
|
||||
|
||||
#### Descoberta de Serviços Exchange (`service.discovery`)
|
||||
- **Protótipos de Itens:**
|
||||
- Serviço: Status do {#SERVICE.DISPLAYNAME} (`service.info["{#SERVICE.NAME}",state]`)
|
||||
#### Descoberta de Bancos de Dados (`perf_instance.discovery["MSExchange Active Manager"]`)
|
||||
- **Protótipos de Itens:**
|
||||
- Banco [{#INSTANCE}]: Função da Cópia (`perf_counter_en["\MSExchange Active Manager({#INSTANCE})\Database Copy Role Active"]`)
|
||||
- Banco [{#INSTANCE}]: Page Faults/seg (`perf_counter_en["\MSExchange Database({#INF.STORE})\Database Page Fault Stalls/sec", {$MS.EXCHANGE.PERF.INTERVAL}]`)
|
||||
- Banco [{#INSTANCE}]: Logs Aguardando (Stalled) (`perf_counter_en["\MSExchange Database({#INF.STORE})\Log Record Stalls/sec", {$MS.EXCHANGE.PERF.INTERVAL}]`)
|
||||
- Banco [{#INSTANCE}]: Latência de Leitura (Ativo) (`perf_counter_en["\MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Reads (Attached) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]`)
|
||||
- Banco [{#INSTANCE}]: Latência de Escrita (Ativo) (`perf_counter_en["\MSExchange Database ==> Instances({#INF.STORE}/_Total)\I/O Database Writes (Attached) Average Latency", {$MS.EXCHANGE.PERF.INTERVAL}]`)
|
||||
- Banco [{#INSTANCE}]: Estado (`perf_counter_en["\MSExchangeIS Store({#INSTANCE})\Database State"]`)
|
||||
- Banco [{#INSTANCE}]: Tamanho do Arquivo (`perf_counter_en["\MSExchange Database({#INF.STORE})\Database File Size In Bytes", {$MS.EXCHANGE.PERF.INTERVAL}]`)
|
||||
- Banco [{#INSTANCE}]: Total de Itens (`perf_counter_en["\MSExchange IS Store({#INF.STORE})\Item Count", {$MS.EXCHANGE.PERF.INTERVAL}]`)
|
||||
|
||||
## Alertas (Triggers)
|
||||
|
||||
### Triggers Globais
|
||||
- [HIGH] **📉 Exchange: Queda Anômala de Tráfego OWA**
|
||||
- [HIGH] **🚨 Exchange: Agente Zabbix Indisponível**
|
||||
- [AVERAGE] **⚠️ Exchange: Fila de Submissão Alta**
|
||||
- [HIGH] **🔮 Exchange: Fila de Submissão em Crescimento Rápido**
|
||||
- [AVERAGE] **⚠️ Exchange: Fila de Entrega Local Alta**
|
||||
- [HIGH] **🔮 Exchange: Fila de Entrega em Crescimento Rápido**
|
||||
- [HIGH] **🚨 Exchange: Mensagens em Quarentena (Poison Queue) detectadas**
|
||||
- [HIGH] **🚨 Serviço Parado: Microsoft Exchange Transport Submission**
|
||||
- [HIGH] **🚨 Serviço Parado: Microsoft Exchange Transport**
|
||||
|
||||
### Protótipos de Triggers (LLD)
|
||||
|
||||
**Regra: Descoberta de Serviços Exchange**
|
||||
- [HIGH] **🚨 Serviço Parado: {#SERVICE.DISPLAYNAME}**
|
||||
|
||||
**Regra: Descoberta de Bancos de Dados**
|
||||
- [AVERAGE] **⚠️ Exchange: Page Faults Elevados em {#INSTANCE}**
|
||||
- [AVERAGE] **🐢 Exchange: Escrita de Logs Travada em {#INSTANCE}**
|
||||
- [WARNING] **🐢 Exchange: Latência de Leitura Alta em {#INSTANCE}**
|
||||
- [WARNING] **🐢 Exchange: Latência de Escrita Alta em {#INSTANCE}**
|
||||
- [WARNING] **⚠️ Exchange: Banco de Dados Grande em {#INSTANCE}**
|
||||
|
|
@ -257,6 +257,76 @@ def validate_nested_structure(content):
|
|||
return errors
|
||||
|
||||
|
||||
def validate_zabbix_7_compliance(content):
|
||||
"""
|
||||
Check for Zabbix 7.0 specific issues and common YAML gotchas.
|
||||
- Boolean keys (no: 1 -> False: 1)
|
||||
- REGEXP vs MATCHES_REGEX
|
||||
- Forbidden tags (e.g. 'no' in http steps)
|
||||
- Hostname mismatches in triggers
|
||||
"""
|
||||
errors = []
|
||||
warnings = []
|
||||
|
||||
# 1. Get Template Name for Hostname Mismatch Check
|
||||
template_name = None
|
||||
if isinstance(content, dict) and 'zabbix_export' in content:
|
||||
if 'templates' in content and isinstance(content['templates'], list):
|
||||
if len(content['templates']) > 0:
|
||||
template_name = content['templates'][0].get('name')
|
||||
|
||||
def check_node(node, path="root"):
|
||||
if isinstance(node, dict):
|
||||
# Check 1: Boolean Keys
|
||||
# PyYAML loads unquoted 'no', 'on', 'off' as booleans if unsafe, safe_load handles standard yaml 1.1 booleans
|
||||
# But we are checking the KEYS of the dict.
|
||||
# Convert keys to list to avoid runtime error during iteration
|
||||
for k, v in node.items():
|
||||
if isinstance(k, bool):
|
||||
errors.append(f"[INVALID YAML KEY] Found boolean key '{k}' at {path}. Quote it! (e.g. 'no': 1)")
|
||||
|
||||
# Check 3: Forbidden tags in httptests
|
||||
if path.endswith("steps") and isinstance(node, list) is False: # We are inside a step dict
|
||||
if k == 'no':
|
||||
errors.append(f"[FORBIDDEN TAG] Tag 'no' found at {path}. Zabbix 7.0 determines order by list position.")
|
||||
|
||||
# Check 2: Deprecated Operators
|
||||
if k == 'operator' and v == 'REGEXP':
|
||||
errors.append(f"[DEPRECATED CONSTANT] 'REGEXP' at {path}. Use 'MATCHES_REGEX' for Zabbix 7.0+.")
|
||||
|
||||
# Check 4: Hostname Mismatch in Triggers
|
||||
if k == 'expression' and isinstance(v, str) and template_name:
|
||||
# Look for {HOST.HOST} usage or literal matches
|
||||
# Only flagged if we find a LITERAL string that looks like a hostname but isn't the current template name
|
||||
# AND it's not a standard macro
|
||||
|
||||
# Regex to find /Host Name/Key
|
||||
# Matches: /Hostname/key
|
||||
matches = re.findall(r'\/([^\/]+)\/', v)
|
||||
for match in matches:
|
||||
if match != template_name and match != '{HOST.HOST}' and '$' not in match:
|
||||
# Heuristic: If it looks like "Microsoft Exchange..." but isn't exact match
|
||||
if "Microsoft" in match or "Exchange" in match or "Windows" in match:
|
||||
warnings.append(f"[HOSTNAME MISMATCH] Trigger at {path} references '{match}' but template is '{template_name}'.")
|
||||
|
||||
# Check 5: Empty parameters in functions (e.g. forecast(...,,15m))
|
||||
if ',,' in v:
|
||||
warnings.append(f"[POTENTIAL SYNTAX ERROR] Found empty parameter ',,' in expression at {path}. Zabbix sometimes rejects this. Use explicit '0' or '0s'.")
|
||||
if 'avg(' in v and re.search(r'avg\(.*,\d+[smhdw],\d+[smhdw]\)', v):
|
||||
warnings.append(f"[POTENTIAL SYNTAX ERROR] Found 'avg' with comma separation (1h,1d) at {path}. Zabbix 7.0 uses colon (1h:now-1d).")
|
||||
|
||||
for k, v in node.items():
|
||||
check_node(v, f"{path}.{k}")
|
||||
|
||||
elif isinstance(node, list):
|
||||
for i, item in enumerate(node):
|
||||
check_node(item, f"{path}[{i}]")
|
||||
|
||||
check_node(content)
|
||||
return errors, warnings
|
||||
|
||||
|
||||
|
||||
def check_duplicate_yaml_keys(file_path):
|
||||
"""
|
||||
Check for duplicate YAML keys at the same level (e.g., two 'macros:' sections).
|
||||
|
|
@ -427,6 +497,19 @@ def validate_yaml(file_path):
|
|||
else:
|
||||
print(" ✅ Structure nesting looks correct")
|
||||
|
||||
# ========== 7. Zabbix 7.0 Compliance Check ==========
|
||||
print("\n[7/7] Checking for Zabbix 7.0 Compliance & Common Errors...")
|
||||
z7_errors, z7_warnings = validate_zabbix_7_compliance(content)
|
||||
|
||||
if z7_errors:
|
||||
all_errors.extend(z7_errors)
|
||||
print(f" ❌ Found {len(z7_errors)} compliance errors")
|
||||
else:
|
||||
print(" ✅ Zabbix 7.0 compliance looks good")
|
||||
|
||||
if z7_warnings:
|
||||
warnings.extend(z7_warnings)
|
||||
|
||||
# ========== Summary ==========
|
||||
print("\n" + "=" * 60)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue