计算每个进程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流量。
我正在使用 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 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流量。