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