计算每个进程zabbix的网络流量

时间:2016-10-09 06:32:28

标签: unix zabbix

我正在使用Zabbix 3.2。我想根据程序名称计算网络接口的流量统计信息。

与获取总传入流量一样,我们使用net.if.in [if,],以同样的方式可以检索每个正在运行的进程所使用的流量,如Nethogs。如果是这样,请共享Item键。或者,如果有任何sh脚本也可以这样做。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您尚未指定操作系统,但问题标记为“unix”,并且您提到了nethogs和shell脚本 - 我将假设Linux。

监控所有进程的流量可能有点过多 - 可能有数百个进程,即使很多人不使用网络,但很多人都会在服务器系统上运行。

您希望如何构建数据也很重要。例如,您是要根据流程名称或每个流程拆分它吗?或者甚至可能是进程名称及其参数 - 如果在同一个盒子上运行多个Java JVM。您必须决定所有这些,因为它会影响数据收集。

在向Zabbix发送数据时,Zabbix方面最简单的方法是仅按进程名称进行监视,如果您知道所有您感兴趣的进程名称,则提前创建项目。如果您不了解它们,您将不得不使用Zabbix low level discovery在新流程出现时自动创建项目。

我们终于进入了数据收集部分。在这里,它确实可能是最容易使用的nethogs(请记住UDP is not supported)。您可以在“跟踪”模式下运行nethogs,这与top的“批处理”模式非常相似。在此模式下,输出只是打印到stdout。

nethogs -c 1 -d 60 -t

这里,参数意味着:

  • -c - 打印输出的次数
  • -d - 在迭代之间休眠多长时间,包括第一次输出之前的时间
  • -t - 跟踪或批处理模式

Nethogs还支持使用-v标志设置流量输出类型。你必须决定如何想象这个:

  • 0 - KB / s
  • 1 - 总KB
  • 2 - 总B
  • 3 - 总MB

使用Zabbix,您可能不希望使用模式1或3 - 最好以字节存储数据并允许Zabbix根据需要添加乘数。在KB / s模式(0)的情况下,可能值得添加项目乘数1024以字节存储数据并再次受益于Zabbix的自动单元应用程序。请注意,在任何情况下,您都希望背靠背运行nethog实例,以避免在不收集数据的情况下使用Windows。最小化任何窗口可能性的一种方法是不断运行nethogs(不提供-c选项)并将输出重定向到文件。然后,脚本将解析文件并使用zabbix_sender将数据发送到Zabbix。

你不会将它作为普通的Zabbix user parameter运行,既不作为主动也不是被动检查 - 它会阻塞太长时间。考虑使用atdsee 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仅抓取程序行并打印出程序名称和已发送/已接收的流量。