使用 pidstat 或 sar 报告每个进程的 IO 统计信息

使用 pidstat 或 sar 报告每个进程的 IO 统计信息

我正在尝试跟踪一些“可疑”进程在一段时间内的 IO 使用情况。理想情况下,希望通过 munin 提供这些统计数据,或直接推送到 graphite。但是,作为起点,能够以合理的空间/资源高效方式跟踪这种使用情况会很棒。然后能够检索一段时间内前 10 个 IO 使用者及其数据读/写统计数据。

pidstat -d 2似乎每隔几秒就会产生大量 io 消耗最大的进程的输出。我知道它sar有一些内置的存档功能,但我不确定如何让它存档我获得的统计数据pidstat(也许在SA1_OPTIONS?我在 debian/ubuntu 上)。

除了通过管道传输pidstat到磁盘,然后对输出运行一些收集/聚合之外,还有什么方法可以用 sar 做同样的事情(但更有效),然后稍后检索统计信息?

答案1

想出了一个临时的 bash 脚本,它通过 carbon 将 pidstat 信息(每个进程的 IO 读写)转发给 graphite

#!/bin/bash

hostname=`hostname -s`    
carbon_host=YOUR_CARBON_HOSTNAME_OR_IP
carbon_port=2003

pidstat -h -d 1 | grep --line-buffered -v '^$' | grep --line-buffered -v '^#' | grep --line-buffered -v '^Linux' | awk --assign=hostname=${hostname} '{ printf "servers.%s.pidstat.%s.read %s %s\nservers.%s.pidstat.%s.write %s %s\n", hostname, $6, $3, $1, hostname, $6, $4, $1 ; fflush(); }' > /dev/tcp/${carbon_host}/${carbon_port}

相关内容