我在服务器上安装了 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)
(derivative()
由于bytes_recv
和bytes_sent
正在积累指标,所以是必要的。)
我担心的是数据不准确。作为测试,我下载了一些非常大的文件(1GB),并确认(ifconfig eth0
)RX bytes
在收到数据后按预期数量增加。但是,图表如下所示:
记录的指标没有任何变化。我做错了什么?
细节
- 主机运行的是 Ubuntu Server 16.04
- Telegraf、InfluxDB 和 Grafana 在 Docker 中运行
答案1
提出这个问题后,我立即意识到了问题所在。(将头放在桌子上)
Docker 为容器提供了一个虚拟以太网适配器,该适配器只能看到其自己的流量。解决方案是:
- ...在 Docker 之外运行 Telegraf或者
--net=host
...使用标志运行容器