Script de Exportação de Hosts do Zabbix para CSV
Tags: zabbix, python, hosts, csv
Published: 2024-01-12 13:07:32

**Introdução:**

Este script em Python se conecta à API do Zabbix, para obter informações valiosas sobre hosts e templates. Através de chamadas à API, o script realiza o login, recupera dados sobre os hosts, incluindo seus grupos e templates associados, e organiza essas informações em um arquivo CSV.

>**Autenticação:** Utiliza as credenciais do Zabbix (usuário e senha) para autenticar-se na API.

>**Obtenção de Dados:** Faz chamadas à API para extrair detalhes sobre hosts, incluindo seus grupos e templates associados.

>**Organização e Armazenamento:** Estrutura os dados em um formato legível e armazena-os em um arquivo CSV. 

<br>
Passo 1. **Salve esse script para exportação dos dados em python:**

```python
import requests
import json
import csv

# Configurações da API do Zabbix
url = 'https://zabbix.dominio.com.br/api_jsonrpc.php'
headers = {'Content-Type': 'application/json'}

# Credenciais de autenticação
usuario = 'seu_user'
senha = 'sua_senha'

# Função para fazer uma chamada à API do Zabbix
def zabbix_api_request(method, params, auth_token=None):
    data = {
        'jsonrpc': '2.0',
        'method': method,
        'params': params,
        'auth': auth_token,
        'id': 1
    }
    response = requests.post(url, data=json.dumps(data), headers=headers)
    result = response.json()

    if 'error' in result:
        raise Exception(f'Erro na chamada à API do Zabbix: {result["error"]["data"]}')

    return result.get('result', None)

# Função para fazer login na API do Zabbix e obter o token de acesso
def zabbix_login(usuario, senha):
    method = 'user.login'
    params = {'user': usuario, 'password': senha}
    response = zabbix_api_request(method, params)
    return response

# Função para obter informações de hosts por grupo, incluindo templates
def obter_hosts_com_templates(auth_token):
    method = 'host.get'
    params = {
        'output': ['host', 'name', 'groups'],
        'selectGroups': 'extend',
        'selectInterfaces': ['ip'],
        'selectParentTemplates': ['templateid', 'name']
    }

    response = zabbix_api_request(method, params, auth_token)

    if response is None:
        raise Exception('Nenhuma resposta válida da chamada à API para obter hosts.')

    hosts_com_templates = {}

    for host in response:
        for group in host.get('groups', []):
            grupo_nome = group.get('name', 'Sem Grupo')
            if grupo_nome not in hosts_com_templates:
                hosts_com_templates[grupo_nome] = []
            templates = [template['name'] for template in host.get('parentTemplates', [])]
            hosts_com_templates[grupo_nome].append({
                'hostname': host.get('host', ''),
                'ip': host['interfaces'][0]['ip'] if host.get('interfaces') else '',
                'templates': templates
            })

    return hosts_com_templates

# Função para escrever as informações em um arquivo CSV
def escrever_csv(info_hosts_com_templates):
    with open('info_hosts_templates.csv', mode='w', newline='') as arquivo_csv:
        writer = csv.writer(arquivo_csv)
        writer.writerow(['Grupo', 'Hostname', 'IP', 'Templates'])

        for grupo, hosts in info_hosts_com_templates.items():
            for host in hosts:
                writer.writerow([grupo, host['hostname'], host['ip'], ', '.join(host['templates'])])

# Faz login e obtém o token de autenticação
token_autenticacao = zabbix_login(usuario, senha)

# Obtém informações de hosts por grupo, incluindo templates
info_hosts_com_templates = obter_hosts_com_templates(token_autenticacao)

# Escreve as informações em um arquivo CSV
escrever_csv(info_hosts_com_templates)
```
<br>
Passo 2. **Para funcionamento, precisaremos do python instalado e a biblioteca requests:**


   **No linux:**
```bash
# Instalar o Python3
sudo apt update
sudo apt install python3
# Instalar o pip3 (gerenciador de pacotes do Python)
sudo apt install python3-pip
# Instalar a biblioteca requests
pip3 install requests
```

   **No Windows:**
   - Instale o Python no repo: https://www.python.org/
   - Certifique-se de marcar a opção "Add Python to PATH" durante a instalação.

```bash
# Atualizar o pip
python -m pip install --upgrade pip
# Instalar a biblioteca requests
pip install requests
```

<br>
Passo 3. **Execute o script para gerar o relatório em .csv:**
   * `python3 script.py`
   * Pronto, o arquivo gerado chamado `info_hosts_templates.csv` será dessa forma:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1xrdbp1yeh3u8f5v5a5h.png)