Como obter gráficos de tráfego por AS utilizando AS-STATS (open source)

AS-Stats é uma ferramenta simples para gerar gráficos de tráfego por AS a partir de registros NetFlow / sFlow criada
por Manuel Kasper para Monzoon Networks AG está na versão 1.6 (2014-09-12) e atualmente não tem mais tempo para manter AS-Stats. No entanto houve algumas contribuições e além disso, Nicolas Debrigode lançou uma IU da Web mais moderna para AS-Stats, bem como o Jack Slateur que contribui para o mapeamento de IP para ASN.

Com todas essas melhorias fiz um novo fork do projeto AS-Stats atualizado varias coisas e unificando todo o projeto.

Como funciona

Um script Perl (asstatd.pl) coleta registros de agregação do NetFlow v8/v9 AS ou amostras sFlow v5 de um ou mais roteadores. Ele os armazena em cache por cerca de um minuto (para evitar gravações excessivas em arquivos RRD), identifica o link a que cada registro se refere (por meio do índice de interface de entrada/saída SNMP), mapeia-o para um “link conhecido” correspondente e dados RRD fonte e, em seguida, executa o RRDtool. Para evitar a perda de novos registros enquanto os arquivos RRD são atualizados, a tarefa de atualização é executada em um processo separado.

Para cada AS, um arquivo RRD separado é criado conforme necessário. Ele contém duas fontes de dados para cada link – uma para o tráfego de entrada e outra para o tráfego de saída. Em gráficos de tráfego por AS gerados, o tráfego de entrada é mostrado como positivo, enquanto o tráfego de saída é mostrado como valores negativos.

Outro script Perl, rrd-extractstats.pl, deve ser executado uma vez por hora. Ele soma o tráfego por AS e link durante as últimas 24 horas, classifica os AS pelo tráfego total (decrescente) e grava os resultados em um arquivo de texto. Isso é então usado para exibir os “principais N AS” e outras estatísticas dos scripts PHP fornecidos.

Considerações

Os arquivos RRD são pequenos, mas existem em grande quantidade. Você verá um ganho de desempenho em um sistema de arquivos como XFS sobre EXT4. Considere em qual sistema de arquivos você colocou os arquivos RRD se o desempenho for um fator para suas necessidades.

Pré-requisitos

Debian 10 Stretch – Instalação Limpa

Hardware vai depender muito da quantidade de flows coletado, mas ele é muito mais modesto em relação ao elastflow, vou deixar aqui um exemplo, de um servidor que subi com o Rudson para coletar ~5GB de um Huawei NE40 coletando de 4 interfaces. (4CPU 2.20GHz + 8GB Ram) mas como pode ver no print está super de boa 🙂

Na questão de espaço em disco vai depender de quantas interfaces vc irá coletar, mas se prepare com ~50GB para não ter dor de cabeça, e na pior das hipóteses #format 😀

Ajustes seu repositório para pacotes non-free e contrib:

Instalaremos todos os pacotes necessários para o projeto

Responta YES

Último resultado será:

Último resultado será:

Como dito unifique todo o projeto, então vamos baixa-lo em uma pasta /data onde ficará todos os arquivos.

Pesquisas adicionais (em caso de Mikrotik será necessário um complemento a mais já que o flow enviado não vem informação do AS, a solução gambiarra é usar um “tradutor de IPs para AS”.

Vai ser necessário instalar o snmpwalk e as MIBs para coletarmos informações do router, pois é com essas informações que vamos dizer qual interface vamos coletar os flows.

Para fazer a coleta precisamos saber o identificador (ifIndex) da interface, para isso então vamos usar o snmpwalk para descobrir qual os nomes (ifDescr) primeiro e em seguida o identificador (ifIndex).

Exemplo de saída snmpwalk de um huawei:

Exemplo de saída snmpwalk de um RouterOS/Mikrotik:

Agora que já sabemos os IDs (ifIndex) das suas respectivas interfaces:

Vamos aos ajustes as entradas no arquivo knownlinks:

Exemplo:

Para melhor entendimento:

knownlinks configurado, vamos configurar nosso arquivo que inicirá o processo, mas mantes é necessário informar o seu AS e caso for um RouterOS/Mikrotik as coisas mudam um pouco.

Altere para seu AS

Se seu router é um RouterOS/Mikrotik permaneça com a linha a baixo descomentada!

Caso ser outro, comente a linha acima e descomenta a linha:

Exemplo: “AS 666 no Huawei”

Para iniciar o serviço execute:

Verifique se as portas estão ouvindo

Para carregar o start na inicialização faça:

Adicione

Altere as permissões para execução:

Ajustes no cron:

Adicione as linhas a baixo ao final do arquivo:

Reinicie o serviço cron

Instale o tcpdump para verificar se os pacotes irão chegando ao seu servidor ao configurar os flows em seu servidor. Obs: enp0s3 é o nome da interface do servidor.

Configuração para o router

RouterOS/Mikrotik (Flow v5)

Huawei NE Netstream (netflow)

Deixar aqui também um exemplo que o Rudson Costa / Gabriel Mocan compartilhou: (Huawei NE40/8000)

Contribuição do Thiago Melo para Juniper:

No projeto oficial você encontra modelos de configurações para outros vendors.

Agora é aguardar ~5 min até gerar os arquivos em /data/asstats/rrd

Uma boa dica é você ficar ligado com o a saúde do seu servidor, olhar para o processamento/memoria e como ta a escrita no disco é importante, vou deixar duas ferramentas para observar isso:

Agora precisamos fazer o acesso web para visualizar as informações.
Ajustes de segurança para o apache:

Para ficar algo bom vou criar um domínio virtual para acessar o as-stats, não esqueça de apontar em seu DNS!

Ajuste para sua realidade, fique ligado que em Require ip só permite que estes tenham acesso:

Ajuste seu ASN:

Localize $my_asn = “1234” e altere pelo seu.

Execute para que o asstats_day.txt seja criado e ao acessar o web-ui não fique em branco.

Acesse em seu navegador “http://asstats.remontti.com.br“. Caso você não tenha dificuldade com dominios virtuais pode fazer um atalho dentro de /var/www/html, assim basta vc acessar o IP/as-stats/

e acessar http://ip/as-stats

Espero que tenha gostado!

Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Participe do canal no telegram para ficar atualizado sempre que publicar um novo tutorial.

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Fontes:
https://github.com/manuelkasper/AS-Stats
https://github.com/nidebr/as-stats-gui
https://github.com/JackSlateur/perl-ip2as

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

35 Resultados

  1. Elcimar disse:

    Caso alguém se interesse, fiz um script pra gerar o arquivo knownlinks a partir do resultado do snmpwalk. O arquivo gerado serve como um ponto de partida quando se tem muitas interfaces pra monitorar. O repositório tá aqui: https://github.com/simakwm/klgenerator

  2. Charles disse:

    DBD::SQLite::db do failed: no such table: stats at /data/asstats/bin/rrd-extractstats.pl line 78.

  3. Tiago Rocha disse:

    bom dia.
    eu conseguiria deixar ele ativo e capturar simultaneamente dados provenientes de uma mikrotik e de um juniper ?

    obrigado.

  4. Ricardo disse:

    /data/asstats/rrd/ – Ajuda nóis não grava nada, as conf tudo certo chegando flow, snmp index ok, site ok.

  5. Daniel disse:

    Não consigo nenhum retorno quando tento executar o snmpwalk -v2c -c public 10.20.30.2 IF-MIB::ifDescr

    RETORNO:
    snmpwalk -v2c -c noc-novonet 186.251.103.1 IF-MIB::ifDescr
    Timeout: No Response from 186.251.103.1

  6. Bruno disse:

    Olá todos,

    Fiz a instalação num Debian 10 limpo seguindo à risca o tutorial mas não gera nenhum RRD, no syslog vejo os seguintes erros:

    Apr 8 02:49:36 as-stats rc.local[485]: Error creating RRD file /data/asstats/rrd/7d/28285.rrd: invalid DS format
    Apr 8 02:49:36 as-stats rc.local[485]: Error updating RRD file : opening ”: No such file or directory

    Alguém sabe o que pode ser?

  7. Jefferson disse:

    Alguém conseguiu fazer funcionar? o rrd não está gerando os gráficos

  8. Vinicius disse:

    Galera alguém descobriu o motivo da pasta RRD vazia? Gostaria muito de ver isso funcionando.

  9. Andy disse:

    I created this project but I only got inbound traffic on graph. How we could get outbound traffic on graph. Could you please help me to fix it?

  10. Piero Iancol disse:

    bug ao criar 2 interfaces mesmo nome (porem de host diferente) sfpsfpplus1 (de 2 hosts) nao cria um deles.

  11. Felipe disse:

    No TCPDUMP recebo os dados do roteador mas não mostrou gráfico e não gerou nenhum arquivo na pasta rrd. :/

  12. Erlan Siqueira disse:

    Muito bom, mas tenho uma duvida, toda a infraestrutura do meu LAB são equipamentos Cisco ele conseguiria coletar os flows??

  13. Michel disse:

    Rapaz, com certeza vai ganhar um café!
    Já tem algo em mente pra ligar com mais de um roteador, sendo que são vendors diferentes? Mikrotik e Huawei no mesmo servidor… como ficaria o start?

  14. Bruno disse:

    Amigo muito bom seu tutorial parabéns!!!
    Consegui coletar em ipv4 certinho, porem no ipv6 eu tive dificuldade, pois não está chegando, pelo dump eu consigo ver, mas acho que deve ser algo no arquivo knowlinks.

    Sempre que adiciono ipv6 lá, no site fica com a imagem quebrada.

    o Router IP eu testei em IPv4 de teste também coloquei o IPv6, o snmpindex eu peguei das interfaces de ipv6, mas mesmo assim fica com as imagens quebrada dos gráficos em ipv6 e não carrega.

    Tem alguma ideia do que pode ser?

  15. Algum dos colegas poderia indicar o sampling utilizado para Huawei?

  16. Bruno Cabral disse:

    Pra alterar a lista de knownlinks, alem de reiniciar o script de start, o que precisa mais fazer? Fica dando erro de unknown DS name

  17. Lucas disse:

    Não exibe gráfico nenhum. Fiz todos os passos, esta trafegando dados no tcpdump, porém sem exibição

  18. Matheus disse:

    Muito bom tutorial.
    Um detalhe percebido: A minha amostragem de tráfego está menor que a realidade, de 1 a 2Gb a menos. Modifiquei o parâmetro de sampling para um valor maior, mas sem percepção de modificação. Alguém percebeu o mesmo?

  19. Vinicius Rodrigues disse:

    Boa tarde Rudimar! Fiz todos os passos como vocês ensinam, porém não está gerando arquivos na pasta rrd, pode me ajudar? Valeeeu!

  20. Vinicius disse:

    Rudimar não está gerando os arquivos rrd, o que pode ser? Segui todos os passos do tutorial.

  21. Alguém tendo problema na exibição dos gráficos?
    hoje parou de mostrar os gráficos aqui.

  22. Vinícius Dorneles disse:

    E mais uma dica, seria colocar na opção -P do start, o número zero, daí ele não inicia o sFlow e nem abre a porta para ele.

  23. Vinícius Dorneles disse:

    Rudimar! Muito bom esse tutorial, mas deixe-me acrescentar um problema que algumas pessoas podem esbarrar.

    O arquivo ip2asn.json não é 100% completo, e portanto pode faltar um ou outro ASN, principalmente os mais novos, como os ASes de 6 dígitos. Logo em um cenário que seu trânsito for um desses ASes que não esteja no ip2asn.json e ele tiver CDNs, o tráfego dessas CDNs (e nenhum outro tráfego proveniente deste(s) AS(es)) não vão aparecer nos gráficos.

    A solução mais rápida é colocar manualmente a relação IP ASN no .json, mas acredito que tu pode ensinar o pessoal uma forma de atualizar o .json a partir de alguma base whois automaticamente!

    Abraços.

    • Pasta tools:

      Demora!!!

      • Vinícius Dorneles disse:

        Complementando então para os AS de 32-Bits:

        (echo begin; echo verbose; for i in seq 131072 143673; do echo “AS$i”; done; echo end) | netcat whois.cymru.com 43 | ./generate-asinfo.py >> asinfo.txt
        (echo begin; echo verbose; for i in seq 196608 213403; do echo “AS$i”; done; echo end) | netcat whois.cymru.com 43 | ./generate-asinfo.py >> asinfo.txt
        (echo begin; echo verbose; for i in seq 262144 272796; do echo “AS$i”; done; echo end) | netcat whois.cymru.com 43 | ./generate-asinfo.py >> asinfo.txt
        (echo begin; echo verbose; for i in seq 327680 329727; do echo “AS$i”; done; echo end) | netcat whois.cymru.com 43 | ./generate-asinfo.py >> asinfo.txt
        (echo begin; echo verbose; for i in seq 393216 401308; do echo “AS$i”; done; echo end) | netcat whois.cymru.com 43 | ./generate-asinfo.py >> asinfo.txt

  24. Não conseguir, pois esbarrei nesse erro:
    DBD::SQLite::db do failed: near “-“: syntax error at /data/asstats/bin/rrd-extractstats.pl line 64.

  25. Duh Batista disse:

    Alguém teve coleta de trafego via IPV6 ?

  26. Anderson disse:

    Top meu amigo… sempre sigo suas dicas… a unica coisa que aconteceu foi que ao abrir a pagina me deparei com The file sqlite3.php could not be found.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *