# 🛡️ Zabbix ITGuys - Gold Collection
**Repositório Oficial de Ferramentas e Templates de Monitoramento de Alta Performance.**
> *"Um alerta sem contexto é apenas ruído. Um alerta com solução é uma ferramenta."* — Arthur "O Farol" Mendes
Este repositório contém a suíte de ferramentas e templates "Gold Standard" desenvolvida pela ITGuys para elevar o nível da observabilidade Zabbix. Aqui focamos em **inteligência acionável**, não apenas em coleta de dados.
---
## 🏆 O Padrão Arthur (Gold Standard)
Todo recurso neste repositório segue rigorosos critérios de qualidade:
1. **🇧🇷 Localização Total:** Tudo o que o operador vê (Items, Triggers, Graphs) está em **Português do Brasil (PT-BR)**, claro e profissional.
2. **🧠 Inteligência Acionável:** Alertas explicam o *motivo*, o *impacto* e a *solução*.
3. **🔮 Preditividade:** Uso de funções como `timeleft()` e detecção de anomalias para prevenir incidentes antes que ocorram.
4. **✅ Integridade Técnica:** UUIDs v4 válidos, sem dependências quebradas e sintaxe YAML impecável.
---
## 🧰 Ferramentas (Toolchain)
Scripts em Python desenvolvidos para garantir a integridade e qualidade dos templates.
### 1. `validate_zabbix_template.py` (The Gatekeeper)
O validador definitivo para templates Zabbix (YAML).
- **Verifica:** Sintaxe YAML, Duplicidade de UUIDs, Referências quebradas (Gráficos -> Itens, Dashboards -> Gráficos).
- **Garante:** Conformidade estrita com o padrão UUIDv4.
- **Audita:** Descrições em inglês (aviso) para garantir a tradução.
**Uso:**
```bash
python validate_zabbix_template.py templates_gold/template_app_pfsense_snmp.yaml
```
### 2. `fix_uuids.py`
Utilitário para correção em massa e higienização de templates.
- Remove metadados sujos de versões instáveis (Zabbix 8.0).
- Regenera UUIDs inválidos mantendo a consistência.
### 3. `merge_exchange.py`
Ferramenta para fundir o melhor de dois mundos: templates oficiais da Zabbix com customizações "Gold" da comunidade.
---
## 📂 Estrutura do Repositório
- **`/templates_gold`**: Templates prontos para produção, validados e traduzidos.
- *Exemplo:* `template_app_pfsense_snmp.yaml` (Monitoramento completo de pfSense via SNMP com análises de segurança e preditivas).
- **`/community-templates`**: Fonte upstream de templates diversos.
- **`/deploy_package`**: Scripts e arquivos para deploy automatizado de agentes e proxies.
---
## 📢 Criação e Definição de Salas (Telegram)
Para evitar a fadiga de alertas e garantir que problemas críticos sejam tratados imediatamente, utilizamos uma estrutura de grupos segmentada por **Severidade** e **Função**.
### A Regra de Ouro do MSP (Multi-Cliente)
Como atendemos múltiplos clientes, não criamos um grupo por cliente. Centralizamos por função e usamos **Tags** no início da mensagem.
> **Exemplo:** `🔥 [Coca-Cola] Oracle Down` ou `🐘 [Pepsi] Deadlock detectado`
### 📋 Tabela de Grupos e Mídias
| Canal (Grupo Telegram) | Chat ID | Nível de Severidade / Uso | Objetivo | Retenção Sugerida |
| :--- | :--- | :--- | :--- | :--- |
| **🌐 iT Guys - Alertas Queda de Link** | `-1002788825367` | 🚨 Disaster (Network only) | **EXCLUSIVO** para quedas de link do Datacenter (Redundância). | Eterna |
| **🔥 iT Guys - Alertas Criticos** | `-1002109756180` | 🚨 Disaster (Action Required) | Focado em "VOCÊ TEM QUE FAZER ALGUMA COISA AGORA". Incidentes que exigem intervenção humana imediata. Zero ruído. | Eterna |
| **🔒 iT Guys - Alertas de Segurança** | *Pendente* | 🚨 High, 🔥 Warning (SecOps) | Tentativas de invasão, Brute-force RDP/SSH, falhas de login excessivas, portas suspeitas. | Eterna |
| **🐘 iT Guys - Alertas Banco de Dados** | *Pendente* | ⚠️ Warning, 🔥 High (DBA) | Deadlocks, Queries Lentas, Conexões. Centraliza problemas de DB de **todos os clientes**. | 90 Dias |
| **💾 iT Guys - Alertas Storage** | *Pendente* | ⚠️ Warning, 🔥 High (Storage) | Tudo sobre Storage e Discos. Pode conter avisos preventivos, mas é o único lugar para assuntos de armazenamento. | 90 Dias |
| **♻️ iT Guys - Alertas Backups** | `-1002390490763` | ℹ️ Info, ⚠️ Warning (Backup Jobs) | Exclusivo para jobs e processos de backup (Sucesso/Falha). Ignora status do host (UP/DOWN). | 90 Dias |
| **👾 iT Guys - Gitea Gerencial** | `-4557333759` | ⚠️ Warning (KPIs/Management) | Focado em **Gestão e Prazos**. Projetos atrasados, ausência de commits por 7+ dias. (Nada de "push" logs). | 30 Dias |
| **🔨 iT Guys - Gitea Operacional** | `-4561812933` | ℹ️ Info (DevOps) | Logs técnicos, Commits, Pushes e Merges do dia a dia. | 30 Dias |
| **🃏 iT Guys - Ronald Santoro (Eventos)** | `-1002285824936` | ℹ️ Info, ⚠️ Warning (Default) | **Curinga (Wildcard)**. Se o alerta não se enquadra nas categorias acima, ele cai aqui. | 30 Dias |
### 🎣 Configuração de Webhooks (Gitea)
Para garantir a eficiência dos canais acima, configure os webhooks do Gitea da seguinte forma:
#### 1. 👾 iT Guys - Gitea Gerencial
**Foco:** Gestão de Projetos, Prazos e Entregas (Releases/PRs).
* [x] **Repositório** (Criado/Excluído)
* [x] **Versão** (Publicada/Atualizada)
* [x] **Pull Request** (Apenas Abertura/Fechamento/Merge)
* [x] **Issues** (Abertura/Fechamento - *Sem comentários*)
* [x] **Pacote** (Publicado)
#### 2. 🔨 iT Guys - Gitea Operacional
**Foco:** Atividade de Código, Logs de Desenvolvimento e Code Review.
* [x] **Push** (Commits)
* [x] **Criar** (Branch/Tag)
* [x] **Excluir** (Branch/Tag)
* [x] **Fork**
* [x] **Comentário da issue** (Discussões técnicas)
* [x] **Comentário no Pull Request** (Code Review)
* [x] **Pull Request Review Requested**
* [x] **Pull Request Sincronizado**
* [x] **Wiki** (Edições)
### 🔑 Credenciais de Bots (API Keys)
> **⚠️ CUIDADO:** Estas chaves dão acesso de escrita aos grupos.
- **Bot Queda de Link** (Uso exclusivo): `7720380254:AAFwcs3g5S3q3tAQwAkYGQ2_kM582IAnt8A`
- **Bot Críticos** (Action Required): `7186495928:AAHb4H_p02tjXpcNZlkq0KGXCUnoejBTuck`
- **Bot Backups** (Jobs e Rotinas): `7302893904:AAG5Bk2h76X6Yshb-mlOv568qBMMNw8cQvM`
- **Bot Gitea** (Gerencial): `7491383156:AAHaDxmhRlpElljs48R0Wvliy2qtUVB9ZIk`
- **Bot Gitea** (Operacional): `6881643386:AAFXbMjkvvOiqm47LvXZ8eC6LVQ4xea1Wms`
- **Bot Ronald Santoro** (Curinga): `6964501334:AAHjQ4q5CcohGvyhvg5aEscc8XcCWyxIeqA`
> **💡 Dica:** Para descobrir o `Chat ID` de um grupo, adicione o bot `@RawDataBot` ao grupo, copie o ID negativo (ex: `-100123456789`) e depois remova o bot.
---
### ⚙️ Configuração Zabbix 7.0 (The Gold Way)
Utilizamos a estratégia de **Roteamento via Ações (Action-Based Routing)**.
Neste modelo, o **Media Type** é apenas o "cano" e a **Action** é o "cérebro" que escolhe qual cano usar.
#### 1. Media Types (Canais)
Como cada bot tem um Token único, precisamos de um Media Type para cada um.
1. Vá em **Alertas > Tipos de Mídias**.
2. **Clone** o tipo `Telegram` padrão.
3. **Renomeie** para: `Telegram_[Nome_Do_Canal]` (ex: `Telegram_Criticos`).
4. **Token:** Insira o Token do bot específico na variável `api_token`.
#### 2. Usuário de Serviço (`itguys`)
Não crie um usuário para cada bot. Use um usuário central (ex: `itguys`).
1. Vá em **Alertas > Mídia** do usuário `itguys`.
2. Adicione **TODOS** os Media Types criados no passo anterior.
3. **Não use filtros de severidade aqui.** Deixe `1-7,00:00-24:00; N I A M A D` (tudo habilitado).
#### 3. Actions (O Cérebro)
Aqui definimos quem recebe o quê. Para cada canal, crie uma **Action** separada.
**Passo a Passo na Interface:**
1. **Ação:** Dê um nome claro (ex: `📢 Dispatch: Críticos`).
2. **Condições:** Defina as regras (Tag ou Severidade).
3. **Operações:** Adicione uma operação de envio.
* **Enviar para usuários:** Selecione `itguys` (ou `Zabbix administrators`).
* **Send to media type:** Selecione **APENAS** o Media Type específico daquele canal (ex: `Telegram_Criticos`).
**Matriz de Ações Recomendada:**
| Nome da Action | Aba: Condições (A) | Aba: Operações (B) -> Send directly to media type |
| :--- | :--- | :--- |
| **Quedas Link** | Tag `target` igual a `network_wan` | `Telegram_ITGuys_Queda_Link` |
| **Alertas de Segurança** | Tag `class` igual a `security` | `Telegram_ITGuys_Alertas_Seguranca` |
| **Alertas de Banco**| Tag `class` igual a `database` | `Telegram_ITGuys_Alertas_Banco` |
| **Alertas de Storage** | Tag `class` igual a `storage` | `Telegram_ITGuys_Alertas_Storage` |
| **Alertas Backups** | Tag `class` igual a `backup` | `Telegram_ITGuys_Alertas_Backups` |
| **Alertas Criticos** | Severidade >= `Média` **E**
Tag `target` **!=** `network_wan` **E**
Tag `class` **!=** `security` **E**
Tag `class` **!=** `database` **E**
Tag `class` **!=** `storage` **E**
Tag `class` **!=** `backup` | `Telegram_ITGuys_Alertas_Criticos` |
| **Serviço Indisponivel** (Default) | Severidade <= `Atenção` **E**
Tag `target` **!=** `network_wan` **E**
Tag `class` **!=** `security` **E**
Tag `class` **!=** `database` **E**
Tag `class` **!=** `storage` **E**
Tag `class` **!=** `backup` | `Telegram` (Padrão/Ronald) |
> **🚫 Regra de Ouro (Anti-Duplicação):** As ações "Críticos" e "Geral" funcionam como **aleias (catch-all)**. Elas devem conter condições de **negação (!=)** para todas as tags específicas, garantindo que um alerta de Banco de Dados vá *apenas* para o grupo de Banco, mesmo que seja um Desastre.
---
## ✨ Como Contribuir
1. **Valide sempre:** Antes de commitar qualquer template, execute o `validate_zabbix_template.py`.
2. **Traduza:** Não deixe termos como "Incoming Traffic" ou "Discarded packets". Use "Tráfego de Entrada" e "Pacotes Descartados".
3. **Contextualize:** Na descrição da trigger, explique o que fazer se o alerta disparar.
---
*Mantido pela equipe de SRE da ITGuys.*