【问题标题】:calculate network traffic per process zabbix计算每个进程的网络流量 zabbix
【发布时间】:2016-10-09 06:32:28
【问题描述】:

我使用的是 Zabbix 3.2。我想根据程序名称计算网络接口上的流量统计。

就像获取总传入流量一样,我们使用 net.if.in[if,] ,同样可以检索每个运行进程使用的流量,就像在 Nethogs 中一样。如果是这样,请分享项目密钥。或者,如果有任何 sh 脚本可以做同样的事情。

提前致谢。

【问题讨论】:

    标签: unix zabbix


    【解决方案1】:

    您尚未指定操作系统,但问题被标记为“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/秒
    • 1 - 总 KB
    • 2 - 总 B
    • 3 - 总 MB

    使用 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 只抓取程序行并打印出程序名称和发送/接收的流量。

    【讨论】:

    • 知道一些允许将 nethogs 数据提取到 zabbix 的脚本吗?
    • 我的回答中的 sn-p 为您提供的数据格式应该易于与 zabbix_sender 一起使用。
    猜你喜欢
    • 2010-10-03
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    相关资源
    最近更新 更多