如何使用 Telegraf、InfluxDB 和 Grafana 正确监控网络接口利用率?

Nat*_*man 5 networking monitoring grafana

我在服务器上安装了 Telegraf,它包含以下网络配置:

[[inputs.net]]
  interfaces = ["eth0"]
Run Code Online (Sandbox Code Playgroud)

这会将以下指标输入 InfluxDB:

bytes_recv,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,bytes_sentdrop_indrop_outerr_inerr_outicmp_inaddrmaskrepsicmp_inaddrmasksicmp_incsumerrorsicmp_indestunreachsicmp_inechorepsicmp_inechosicmp_inerrorsicmp_inmsgsicmp_inparmprobsicmp_inredirectsicmp_insrcquenchsicmp_intimeexcdsicmp_intimestamprepsicmp_intimestampsicmp_outaddrmaskrepsicmp_outaddrmasksicmp_outdestunreachsicmp_outechorepsicmp_outechosicmp_outerrorsicmp_outmsgsicmp_outparmprobsicmp_outredirectsicmp_outsrcquenchsicmp_outtimeexcdsicmp_outtimestamprepsicmp_outtimestampsip_defaultttlip_forwardingip_forwdatagramsip_fragcreatesip_fragfailsip_fragoksip_inaddrerrorsip_indeliversip_indiscardsip_inhdrerrorsip_inreceivesip_inunknownprotosip_outdiscardsip_outnoroutesip_outrequestsip_reasmfailsip_reasmoksip_reasmreqds,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,ip_reasmtimeoutpackets_recvpackets_senttcp_activeopenstcp_attemptfailstcp_currestabtcp_estabresetstcp_incsumerrorstcp_inerrstcp_insegstcp_maxconntcp_outrststcp_outsegstcp_passiveopenstcp_retranssegstcp_rtoalgorithmtcp_rtomaxtcp_rtominudp_ignoredmultiudp_incsumerrorsudp_indatagramsudp_inerrorsudp_noportsudp_outdatagramsudp_rcvbuferrorsudp_sndbuferrorsudplite_ignoredmultiudplite_incsumerrorsudplite_indatagramsudplite_inerrorsudplite_noportsudplite_outdatagramsudplite_rcvbuferrorsudplite_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)
Run Code Online (Sandbox Code Playgroud)

(这derivative()是必要的,因为bytes_recv并且bytes_sent正在积累指标。)

我担心的是数据不准确。作为测试,我下载了一些非常大的文件 (1GB),并确认 ( )随着收到数据,ifconfig eth0该文件正在按预期数量增加。RX bytes然而,该图看起来像这样:

在此输入图像描述

记录的指标没有任何变化。我究竟做错了什么?

细节

  • 主机运行 Ubuntu Server 16.04
  • Telegraf、InfluxDB 和 Grafana 在 Docker 中运行

Nat*_*man 2

提出问题后,我立即意识到问题所在。(提示头在桌子上)

Docker 为容器提供了一个虚拟以太网适配器,该适配器只能看到自己的流量。解决方案是:

  • ...在 Docker 之外运行 Telegraf
  • --net=host...运行带有标志的容器