No cenário atual de gestão de redes e segurança da informação, a automação da coleta de dados se tornou essencial para garantir eficiência e agilidade. Ferramentas como NSX-T, Fortigate, Palo Alto, Cisco ACI e BIG-IP possuem interfaces CLI ricas em informações, mas a extração e organização desses dados pode ser um desafio.
Neste artigo, apresentamos uma abordagem prática e escalável para coletar dados via SSH, estruturá-los dinamicamente e exportá-los para um banco de dados SQL, permitindo análise histórica e geração de relatórios automatizados.
Arquitetura da Solução
A estrutura do processo é dividida em três camadas principais:
1. Coleta de Dados
Utilizamos Python para conectar via SSH aos dispositivos e executar comandos CLI específicos para cada fabricante.
2. Normalização
Os dados extraídos são organizados em um formato padrão, permitindo uma integração mais eficiente com o banco de dados.
3. Armazenamento no Banco de Dados
Os resultados da coleta são armazenados em uma tabela SQL para futuras consultas e análises.
Tecnologias Utilizadas
Para viabilizar essa automação, utilizamos as seguintes tecnologias:
✅ Linguagem: Python
✅ Bibliotecas:
Paramiko
ouNetmiko
→ Para conexão SSHPyODBC
ouSQLAlchemy
→ Para integração com SQLPandas
→ Para estruturação dos dados
✅ Banco de Dados: MySQL, PostgreSQL ou SQL Server
✅ Formato de Templates: YAML para facilitar a escalabilidade
Criação de Templates Dinâmicos
Cada fabricante utiliza comandos CLI diferentes para extrair informações. Para facilitar a escalabilidade, utilizamos templates YAML para armazenar os comandos.
Exemplo de Template YAML para Diferentes Fabricantes:
NSX-T:
get_routes: "get logical-routers <router-id> routes"
get_firewall_rules: "get firewall rules"
Fortigate:
get_routes: "get router info routing-table all"
get_sessions: "diagnose sys session list"
PaloAlto:
get_routes: "show routing route"
get_sessions: "show session all"
BIG-IP:
get_virtual_servers: "show ltm virtual"
get_pool_members: "show ltm pool"
Cisco ACI:
get_tenants: "moquery -c fvTenant"
get_epgs: "moquery -c fvAEPg"
Isso permite que novos comandos sejam adicionados sem a necessidade de modificar o código principal.
Script de Coleta e Exportação para SQL
Abaixo, um exemplo de script Python que executa os comandos via SSH, processa os resultados e insere os dados no banco de dados SQL.
Código de Automação:
import yaml
import paramiko
import pyodbc
# Carregar templates de comandos
with open("commands.yaml", "r") as file:
commands = yaml.safe_load(file)
def execute_ssh_command(device, command):
"""Executa comando via SSH e retorna a saída."""
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=device["ip"], username=device["user"], password=device["pass"])
stdin, stdout, stderr = client.exec_command(command)
output = stdout.read().decode()
client.close()
return output
def save_to_sql(db_conn, table, data):
"""Salva os dados no SQL dinamicamente."""
cursor = db_conn.cursor()
placeholders = ",".join(["?"] * len(data))
sql = f"INSERT INTO {table} VALUES ({placeholders})"
cursor.execute(sql, list(data.values()))
db_conn.commit()
# Configurar conexão SQL
db_conn = pyodbc.connect("DRIVER={SQL Server};SERVER=server_ip;DATABASE=db;UID=user;PWD=pass")
# Dispositivo de exemplo
device_info = {"ip": "192.168.1.1", "user": "admin", "pass": "password", "type": "Fortigate"}
# Executar coleta baseada no template
for cmd_name, cmd in commands[device_info["type"]].items():
output = execute_ssh_command(device_info, cmd)
parsed_data = {"device": device_info["ip"], "command": cmd_name, "output": output}
save_to_sql(db_conn, "network_logs", parsed_data)
Benefícios da Automação
✅ Facilidade na Expansão: O uso de YAML permite adicionar novos fabricantes sem alterar o código-fonte.
✅ Execução Escalável: Pode ser implementado em múltiplos dispositivos simultaneamente via threading.
✅ Centralização dos Dados: O banco de dados SQL permite auditoria, análise histórica e visualizações em dashboards.
✅ Redução de Erros: Automação minimiza falhas manuais na coleta de informações críticas.
Conclusão
Automatizar a coleta de dados via CLI e exportá-los para um banco de dados SQL garante eficiência na administração de redes e segurança. Essa abordagem não só facilita o monitoramento, como também permite a criação de dashboards inteligentes para análise preditiva e resolução rápida de incidentes.
Comments are closed