Назад | Перейти на главную страницу

Как правильно отслеживать использование сетевого интерфейса с помощью Telegraf, InfluxDB и Grafana?

У меня установлен Telegraf на сервере, и он содержит следующую конфигурацию сети:

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

Это передает в 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

Затем я создал панель в Grafana со следующим запросом:

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)

(The derivative() необходимо, поскольку bytes_recv и bytes_sent накапливают метрики.)

Меня беспокоит то, что данные неточны. В качестве теста я загрузил несколько очень больших файлов (1 ГБ) и подтвердил (ifconfig eth0) который RX bytes увеличивалось на ожидаемую величину по мере получения данных. Однако график выглядит так:

Никаких изменений в записываемых показателях нет. Что я делаю не так?

подробности

Сразу после составления вопроса я понял, в чем проблема. (кий головой на стол)

Docker предоставляет контейнеру виртуальный адаптер Ethernet, который будет видеть только свой собственный трафик. Решение состоит в следующем:

  • ... запустить Telegraf вне Docker или
  • ... запустить контейнер с --net=host флаг