Por: @felipefc
Publicado em: 2019-05-29

Motor SDWAN: Implementação e Funcionamento

O motor SDWAN teve seu planejamento (veja o post anterior) e implementação iniciada nas últimas sprints e a primeira etapa foi concluída com os serviços de coleta e análise. A coleta, responsável por executar os pings e recolher o status e a latência, além de calcular o jitter. Já o serviço de análise trata os resultados de pings colhidos e determina se a tabela de roteamento, para determinada política, está ativa ou inativa. Adiante, será explicado melhor o funcionamento de cada serviço.

Arquitetura

A arquitetura atual do motor SDWAN, ainda sem algumas implementações, é a seguinte:

Coleta

Primeiramente, os arquivos de configuração das políticas de roteamento serão provisionados no diretório /etc/itflex/firewall/sdwan/policy-routing/. Assim, o serviço Collector consulta essas configurações para realizar o seu processamento. Com as tabelas de roteamento e os hosts de teste em mãos, o serviço coleta irá realizar pings para cada host via a interface configurada na tabela de roteamento. Através da ferramenta fping a sintaxe do comando é a seguinte:

fping --iface={interface} --count=1 --timeout={test_timeout} --stats {host}

Por exemplo:

fping --iface=eth0 --count=1 --timeout=300 --stats 8.8.8.8

Após coletar os dados necessários para avaliação do *link, *o serviço Collector irá disponibilizar essas métricas através de um Client HTTP do Prometheus.

Prometheus

Ainda na discussão de ideias para a construção do motor SDWAN, foi levantada uma questão: “Onde armazenar os dados coletados? Um banco de dados convencional? Um NoSQL? Salvar em arquivos?”. Precisavamos algo ágil e ideal para armazenar métricas, com isso foi definido a utilização do Prometheus.

Como o Prometheus já é utilizado produto e estava devidamente configurado, bastou ajustar o target para o client de coleta e definir as métricas utilizadas. A avaliação do status das políticas de roteamento aborda três critérios (pelo menos um obrigatório):** pacotes perdidos**, **latência** e ***jitter***. Com esses pontos a serem avaliados foram definidas as seguintes métricas:

  • sdwan_monitor_ping_latency: sendo uma métrica do tipo Gauge, ela armazena o valor das latências coletada para cada combinação de política, tabela de roteamento e host.
  • sdwan_monitor_ping_jitter: sendo uma métrica do tipo Gauge, ela armazena o valor das diferenças entre as duas últimas latências coletadas para cada combinação de política, tabela de roteamento e host.
  • sdwan_monitor_ping_failure: sendo uma métrica do tipo Counter, ela é um contador que será incrementado a cada ping classificado como falho durante a coleta. Assim como as métricas anteriores, teremos um contador para cada combinação de política, tabela de roteamento e host.
  • sdwan_monitor_latency_failure: sendo uma métrica do tipo Counter, ela é um contador que será incrementado a cada vez que uma coleta de latência ultrapassar o valor limite de threshold definido na configuração da política. É criado um contador para cada combinação de política, tabela de roteamento e host.
  • sdwan_monitor_jitter_failure: sendo uma métrica do tipo Counter, ela é um contador que será incrementado a cada vez que uma coleta de jitter ultrapassar o valor limite de threshold definido na configuração da política. É criado um contador para cada combinação de política, tabela de roteamento e host.

Análise

Com os dados armazenados como métricas no Prometheus, o serviço de análise poderá iniciar a avaliação dos status das tabelas de roteamento. Para cada combinação de política, tabela de roteamento e host de teste, será feita uma consulta sobre as métricas contadoras de falhas dos critérios habilitados (lembrando que pelo menos um dos critérios, isto é, pacotes perdidos, latência e jitter deve estar habilitado na configuração). Essa consulta será delimitada pelo período de tempo definido em analysis_time.

As consultas são feitas utilizando a operação increase do prometheus, que contabiliza o crescimento do contador dentro de um período. Por exemplo:

increase(
  sdwan_monitor_ping_failures{
    config_version="ABC123",
    routing_table="embratel",
    test_host="www.google.com"
  }[300s]
)

Com o resultado dessa consulta o serviço é capaz de avaliar se aquele critério está válido ou não naquele momento. Se todos os critérios habilitados são considerados válidos naquela iteração, a tabela de roteamento para aquele host e com base em determinada política, é considerada ativa. Depois que a avaliação dos critérios para cada host de teste é realizada, é possível determinar se a tabela de roteamento para aquela política está funcional ou com falha.

O resultado de uma avaliação é registrado em um arquivo nomeado como <policy_routing_name>.status e salvo em /var/lib/itflex/firewall/sdwan/. Este arquivo com o resultado da análise possui o seguinte formato:

[general]
config_version = ABC123

[routing_tables:embratel]
status = ok
last_change = 2019-05-29T14:24:10.102991Z
is_active = yes

[routing_tables:gvt]
status = fail
last_change = 2019-05-29T14:24:10.812813Z
is_active = no

Os campos presentes no resultado são os seguintes:

  • status: o resultado da avaliação da política de roteamento para aquela política, indicando se está com falha ou não.
  • last_change: a data e hora da última alteração no status da tabela de roteamento.
  • is_active: indicador se a tabela de roteamento está ativa ou não. Pode parecer redundante ao campo status, mas em casos de configurações com failback manual, a tabela de roteamento pode estar com o status OK, mas estar inativa até que alguém manualmente a reative.

Existem outros detalhes da análise relativos às configurações da política, como os tempos de intervalos de teste, o tempo para realização de failback automático, etc. A descrição mais profunda dos parâmetros de configuração que implicam na avaliação dos links pode ser vista na documentação do Contexto SDWAN.

CLI do Motor SDWAN

O motor SDWAN possui uma interface CLI para execução dos serviços e outras operações. Por exemplo, as chamadas do serviços de coleta e análise são feitas assim, respectivamente:

itflex-sdwan collector

itflex-sdwan analyzer

Referenciais para o desenvolvimento