Como monitorar corretamente a utilização da interface de rede com Telegraf, InfluxDB e Grafana?

1

Eu tenho o Telegraf instalado em um servidor e ele contém a seguinte configuração de rede:

[[inputs.net]]
  interfaces = ["eth0"]

Isso alimenta as seguintes métricas no InfluxDB:

bytes_recv , bytes_sent , drop_in , drop_out , err_in , err_out , icmp_inaddrmaskreps , icmp_inaddrmasks , icmp_incsumerrors , icmp_indestunreachs , icmp_inechoreps , icmp_inechos , icmp_inerrors , icmp_inmsgs , icmp_inparmprobs , icmp_inredirects , icmp_insrcquenchs , icmp_intimeexcds , icmp_intimestampreps , icmp_intimestamps , icmp_outaddrmaskreps , icmp_outaddrmasks , icmp_outdestunreachs , icmp_outechoreps , icmp_outechos , icmp_outerrors , icmp_outmsgs , icmp_outparmprobs , icmp_outredirects , icmp_outsrcquenchs , icmp_outtimeexcds , icmp_outtimestampreps , icmp_outtimestamps , ip_defaultttl , ip_forwarding , ip_forwdatagrams , ip_fragcreates , ip_fragfails , ip_fragoks , ip_inaddrerrors , ip_indelivers , ip_indiscards , ip_inhdrerrors , ip_inreceives , ip_inunknownprotos , ip_outdiscards , ip_outnoroutes , ip_outrequests , ip_reasmfails , ip_reasmoks , ip_reasmreqds , ip_reasmtimeout , packets_recv , packets_sent , tcp_activeopens , tcp_attemptfails , tcp_currestab , tcp_estabresets , tcp_incsumerrors , tcp_inerrs , tcp_insegs , tcp_maxconn , tcp_outrsts , tcp_outsegs , tcp_passiveopens , tcp_retranssegs , tcp_rtoalgorithm , tcp_rtomax , tcp_rtomin , udp_ignoredmulti , udp_incsumerrors , udp_indatagrams , udp_inerrors , udp_noports , udp_outdatagrams , udp_rcvbuferrors , udp_sndbuferrors , udplite_ignoredmulti , udplite_incsumerrors , udplite_indatagrams , udplite_inerrors , udplite_noports , udplite_outdatagrams , udplite_rcvbuferrors , udplite_sndbuferrors

Eu então criei um painel no Grafana com a seguinte consulta:

SELECT
  derivative(sum("bytes_sent"), 1s) AS "up",,
  derivative(sum("bytes_recv"), 1s) AS "down"
FROM
  "autogen"."net"
WHERE
  "interface" = 'eth0' AND
    $timeFilter
GROUP BY
  time($__interval)
  fill(null)

(O derivative() é necessário, pois bytes_recv e bytes_sent estão acumulando métricas.)

Minha preocupação é que os dados não sejam precisos. Como teste, baixei alguns arquivos muito grandes (1 GB) e confirmei ( ifconfig eth0 ) que RX bytes estava aumentando pela quantidade esperada conforme os dados foram recebidos. No entanto, o gráfico se parece com isto:

Não há alteração alguma nas métricas registradas. O que estou fazendo errado?

Detalhes

  • O host está executando o Ubuntu Server 16.04
  • Telegraf, InfluxDB e Grafana estão sendo executados no Docker
por Nathan Osman 23.05.2017 / 17:17

1 resposta

1

Imediatamente após compor a pergunta, percebi qual era o problema. (cabeça da sugestão na mesa)

O Docker fornece um adaptador ethernet virtual para o contêiner, que só verá seu próprio tráfego. A solução é:

  • ... execute o Telegraf fora do Docker ou
  • ... execute o contêiner com o --net=host flag
por 23.05.2017 / 17:26