【发布时间】:2016-10-09 06:32:28
【问题描述】:
我使用的是 Zabbix 3.2。我想根据程序名称计算网络接口上的流量统计。
就像获取总传入流量一样,我们使用 net.if.in[if,] ,同样可以检索每个运行进程使用的流量,就像在 Nethogs 中一样。如果是这样,请分享项目密钥。或者,如果有任何 sh 脚本可以做同样的事情。
提前致谢。
【问题讨论】:
我使用的是 Zabbix 3.2。我想根据程序名称计算网络接口上的流量统计。
就像获取总传入流量一样,我们使用 net.if.in[if,] ,同样可以检索每个运行进程使用的流量,就像在 Nethogs 中一样。如果是这样,请分享项目密钥。或者,如果有任何 sh 脚本可以做同样的事情。
提前致谢。
【问题讨论】:
您尚未指定操作系统,但问题被标记为“unix”,并且您提到了 nethogs 和 shell 脚本 - 我假设是 Linux。
监控所有进程的流量可能有点过多 - 可能有数百个,即使很多不会使用网络,但在服务器系统上很多会。
您希望如何构建数据也很重要。例如,您想按进程名称还是按单个进程拆分它?或者甚至可能是进程名称及其参数——如果在同一个机器上运行多个 Java JVM。您必须决定所有这些,因为它会影响数据收集。
作为向Zabbix发送数据,Zabbix端最简单的方法是只通过进程名进行监控,如果你知道所有你感兴趣的进程名,就提前创建项目。如果你不知道,您将不得不使用 Zabbix low level discovery 在出现新进程时自动创建项目。
我们终于到了数据收集部分。在这里,它确实可能是最容易使用 nethogs 的(请记住 UDP is not supported)。您可以在“trace”模式下运行 nethogs,这与 top 的“batch”模式几乎相同。在这种模式下,输出只是简单地打印到标准输出。
nethogs -c 1 -d 60 -t
这里,参数的意思是:
Nethogs 还支持使用-v 标志设置流量输出类型。您必须决定如何将其可视化:
使用 Zabbix,您可能不想使用模式 1 或 3 - 最好以字节为单位存储数据并允许 Zabbix 根据需要添加乘数。在 KB/s 模式 (0) 的情况下,可能值得添加一个 1024 的项目乘数来以字节为单位存储数据,并再次受益于 Zabbix 的自动单位应用程序。请注意,在任何情况下,您都希望背靠背运行 nethog 实例,以避免出现不收集数据的窗口。最小化任何窗口可能性的一种方法是不断运行 nethogs(不提供-c 选项)并将输出重定向到文件。然后脚本会解析文件并使用 zabbix_sender 将数据发送到 Zabbix。
你不会像普通的 Zabbix user parameter 那样运行它,既不是主动检查,也不是被动检查——它会阻塞太久。考虑使用atd (see this howto) 或nohup 来启动一个脚本,使用zabbix_sender 将数据发送到Zabbix。
请注意,您必须以 root 身份运行 nethogs - 为此使用 sudo。
我不知道有任何现有的脚本,但以下内容可能会帮助您入门:
nethogs -c 1 -d 1 -t | awk 'BEGIN {FS="[[:space:]/]+"}; /Refreshing/,0 \
{if ($1 != "Refreshing:" && $1 != "unknown") {print $(NF-4), $(NF-1), $NF}}'
这里,awk 只抓取程序行并打印出程序名称和发送/接收的流量。
【讨论】:
zabbix_sender 一起使用。