如何正确使用Telegraf,InfluxDB和Grafana来监控networking接口的使用情况?

我已经在服务器上安装了Telegraf,它包含以下networkingconfiguration:

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

这将以下指标提供给InfluxDB:

bytes_recvbytes_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_reasmreqdsip_reasmtimeoutpackets_recvpackets_senttcp_activeopenstcp_attemptfailstcp_currestabtcp_estabresets tcp_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中创build了一个面板:

 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) 

(由于bytes_recvbytes_sent正在累积指标,因此derivative()是必需的。)

我担心的是数据不准确。 作为一个testing,我下载了一些非常大的文件(1GB),并确认( ifconfig eth0RX bytes的数量增加了预期的数量。 但是,图表看起来像这样:

在这里输入图像说明

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

细节

  • 主机正在运行Ubuntu服务器16.04
  • Telegraf,InfluxDB和Grafana正在Docker中运行

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

Docker为容器提供了一个虚拟的以太网适配器,只能看到自己的stream量。 解决scheme是要么:

  • 在Docker 或者 Docker之外运行Telegraf
  • --net=host标志运行容器