[Automação] Get data via CLI e exportar para DB SQL

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 ou Netmiko → Para conexão SSH
  • PyODBC ou SQLAlchemy → Para integração com SQL
  • Pandas → 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.

CATEGORIES:

Programing

Comments are closed