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

calculate network traffic per process zabbix

我正在使用 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

这里参数的意思是:

  • -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 您不收集数据的地方。最小化任何 windows 的可能性的一种方法是不断 运行ning nethogs(不提供 -c 选项)并将输出重定向到文件。然后脚本将解析文件并使用 zabbix_sender.

将数据发送到 Zabbix

您不会运行将其作为普通 Zabbix user parameter, neither as an active, nor passive check - it would block for too long. Consider using atd (see this howto) or nohup to launch a script that sends data to Zabbix with zabbix_sender

请注意,您必须 运行 nethogs 作为 root - 为此使用 sudo。

我不知道任何现有的脚本,但以下内容可能会让您入门:

nethogs -c 1 -d 1 -t | awk 'BEGIN {FS="[[:space:]/]+"}; /Refreshing/,0 \
{if ( != "Refreshing:" &&  != "unknown") {print $(NF-4), $(NF-1), $NF}}'

这里,awk只抓取程序行并打印出程序名称和sent/received流量。