当前位置:  技术问答>linux和unix

有人知道怎么用proc/diskstats统计硬盘使用率?

    来源: 互联网  发布时间:2016-10-25

    本文导语:  想做一个监控系统,已经搞定cpu mem 了,不知道disk怎么计算了, cpu 用的 /proc/stat mem 用的 /proc/meminfo | du  df 都可以统计的啊,为什么非要用/proc | #!/bin/sh if [ $# -lt 1 ] then   echo "error_text=d...

想做一个监控系统,已经搞定cpu mem 了,不知道disk怎么计算了,
cpu 用的 /proc/stat
mem 用的 /proc/meminfo

|
du 
df
都可以统计的啊,为什么非要用/proc

|

#!/bin/sh
if [ $# -lt 1 ]
then
  echo "error_text=diskname argument not specified!"
  exit
fi

os=`uname`
diskname=$1
diskutil="5"
awk_cmd="awk"
disk_size=""
used=""
disk_size_mb="-1"
used_mb="-1"

#get pure disk name
which nawk > /dev/null 2>&1
if [ $? -eq 0 ]
then
    awk_cmd="nawk"
fi
tempfile=`echo $diskname|$awk_cmd '{gsub("/",""); print $0}'`
tempfile="disk_$tempfile.temp"

if [ "$os" = "linux" ] || [ "$os" = "Linux" ]
then
  df $diskname >$tempfile
  if [ $? -ne 0 ]
  then
    echo "error_text=$diskname not found"
    rm $tempfile
    exit 0
  fi
  temp=`cat $tempfile |tail -1`
  diskutil=`echo $temp|awk '{printf("%s",$5)}'|awk '{gsub("%",""); print $0}'`
  disk_size=`cat $tempfile |tail -1 | awk '{print $2}'`
  disk_size_mb=`expr $disk_size / 1024`
  disk_size=`echo | awk '{ printf("%.2f",(c1/1024.0)) }' c1=$disk_size_mb`
  disk_size="${disk_size}GB"

  used=`cat $tempfile |tail -1 | awk '{print $3}'`
  used_mb=`expr $used / 1024`
  used=`echo | awk '{ printf("%.2f",(c1/1024.0)) }' c1=$used_mb`
  used="${used}GB"


elif [ "$os" = "SunOS" ]
then
  df -k $diskname > $tempfile
  if [ $? -ne 0 ]
  then
    echo "error_text=$diskname not found"
    exit 0
  fi
  diskutil=`cat $tempfile |tail -1 | awk '{print $5}' | cut -f1 -d %`
  disk_size=`cat $tempfile |tail -1 | awk '{print $2}'`
  disk_size_mb=`expr $disk_size / 1024`
  disk_size=`echo | awk '{ printf("%.2f",(c1/1024.0)) }' c1=$disk_size_mb`
  disk_size="${disk_size}GB"


  used=`cat $tempfile |tail -1 | awk '{print $3}'`
  used_mb=`expr $used / 1024`
  used=`echo | awk '{ printf("%.2f",(c1/1024.0)) }' c1=$used_mb`
  used="${used}GB"



elif [ "$os" = "HP-UX" ]
then
  #df -k $diskname > /dev/null
  df -k $diskname > $tempfile
  if [ $? -ne 0 ]
  then
    echo "error_text=$diskname not found"
    exit 0
  fi
  #temp=`df -k $diskname |tail -1`
  temp=`cat $tempfile |tail -1`
  diskutil=`echo $temp|awk '{printf("%s",$1)}'|awk '{gsub("%"," "); print $0}'`
  diskutil=`echo $diskutil|awk '{gsub(" ",""); print $0}'`
  echo "Disk Utilization=${diskutil}"
  echo "Total Size=-1"
  echo "Used Size=-1"
  echo "Avail Size=-1"
  echo "status_text=Disk Utilization: {0}%;;;${diskutil}"
  exit

elif [ "$os" = "SCO_SV" ] || [ "$os" = "UnixWare" ]
then
  #df -k $diskname > /dev/null
  df -k $diskname > $tempfile
  if [ $? -ne 0 ]
  then
    echo "error_text=$diskname not found"
    exit 0
  fi
  #temp=`df -k $diskname |tail -1`
  temp=`cat $tempfile |tail -1`
  diskutil=`echo $temp|awk '{printf("%s",$4)}'|awk '{gsub("%"," "); print $0}'`
  diskutil=`echo $diskutil|awk '{gsub(" ",""); print $0}'`
  echo "Disk Utilization=${diskutil}"
  echo "Total Size=-1"
  echo "Used Size=-1"
  echo "Avail Size=-1"
  echo "status_text=Disk Utilization: {0}%;;;${diskutil}"
  exit

elif [ "$os" = "OSF1" ]
then
  df $diskname > $tempfile
  if [ $? -ne 0 ]
  then
    echo "error_text=$diskname not found"
    exit 0
  fi
  temp=`cat $tempfile |tail -1`
  diskutil=`echo $temp|awk '{printf("%s",$5)}'|awk '{gsub("%"," "); print $0}'`
  diskutil=`echo $diskutil|awk '{gsub(" ",""); print $0}'`
  echo "Disk Utilization=${diskutil}"
  echo "Total Size=-1"
  echo "Used Size=-1"
  echo "Avail Size=-1"
  echo "status_text=Disk Utilization: {0}%;;;${diskutil}"
  exit

elif [ "$os" = "AIX" ] || [ "$os" = "aix" ]
then
  #df -k $diskname > /dev/null
  df -k $diskname > $tempfile
  if [ $? -ne 0 ]
  then
    echo "error_text=$diskname not found"
    exit 0
  fi
  #temp=`df -k $diskname |tail -1`
  temp=`cat $tempfile |tail -1`
  diskutil=`echo $temp|awk '{printf("%s",$4)}'|awk '{gsub("%"," "); print $0}'`
  echo "Disk Utilization=${diskutil}"
  echo "Total Size=-1"
  echo "Used Size=-1"
  echo "Avail Size=-1"
  echo "status_text=Disk Utilization: {0}%;;;${diskutil}"
  exit

else 
  echo "error_text=Unsupported platform: $os"
  exit
fi

rm $tempfile
avail_mb=`expr $disk_size_mb - $used_mb`
avail=`echo | awk '{ printf("%.2f",(c1/1024.0)) }' c1=$avail_mb`
avail="${avail}GB"
echo "Disk Utilization=${diskutil}"
echo "Total Size=$disk_size_mb"
echo "Used Size=$used_mb"
echo "Avail Size=$avail_mb"


直接给你一个

|

#!/bin/sh
os=`uname`

if [ "$os" = "linux" ] || [ "$os" = "Linux" ]
then
  df -k | awk '{ print $1 ";" $6 ";" $2 }'
elif [ "$os" = "SunOS" ]
then
  df -k |more | awk '{ print $1 ";" $6 ";" $2 }'
elif [ "$os" = "HP-UX" ]
then
  df -k | awk '{ print $1 ";" $6 }'
elif [ "$os" = "SCO_SV" ] || [ "$os" = "UnixWare" ]
then
  df -k | awk '{ print $1 ";" $6 }'
elif [ "$os" = "OSF1" ]
then
  df -k | awk '{ print $1 ";" $6 }'
elif [ "$os" = "AIX" ] || [ "$os" = "aix" ]
then
  df -k | awk '{ print $1 ";" $7 }'
else 
  df -k | awk '{ print $1 ";" $6 }'
fi
exit


再来一个,我在linuxtone上下载的

|
看看iostat这个命令的源码吧 是用c语言写的 但是也是去读取/proc/partitions /proc/diskstats /proc/cpuinfo的值 然后分析结果的
源码在这里 http://www.linuxinsight.com/files/iostat-2.2.tar.gz
包括注释 一共563行代码

|

那个c语言的程序 就是读取的/proc下的文件的信息
你看看他怎么分析的  那些数字是哪些意思  然后用php同样读取该文件 同样读取同样位置的数据进行处理啊。

再说了 监控服务器有现成的Nagios和Cacti 这2个合起来用就非常happy了  自己扩展功能也容易  干嘛还要自己去写!

|
用命令df加sed awk什么的挺好的

|
是呀,我硬盘统计就直接用df命令,其它的两个参数,全是分析的文件,这个DISKSTATS 太不好搞了
----------------------
那你直接就用iostat这个命令呀!
他已经把硬盘使用率等等统计出来了 你直接截取你要的结果就行了啊!

|
所以 一样 你可以把iostat的结果显示到界面上  
看的人一看就明白了

|
我的这个做的复杂一些,不知道有没有参考价值

http://topic.csdn.net/u/20101206/00/fe88806e-7de0-4b6a-af04-5eccf22c9ee5.html?14161

|
系统监控直接用开源软件monit就可以了,没必要自己去重新造轮子

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问,我已经把LINUX8.0的前三张盘,全部复制到了硬盘上了.我光知道用光盘的装法,但我不会在硬盘上装.怎么装,是不是把所有的文件都拷到一个
  • 我现在只有debian kernel 2.6,我把disc1的iso格式释放到了我的硬盘上面,我不知道里面有什么软件,也不知道怎样安装这些软件,莫展一筹
  • 不知道有哪位高手搞过linux下硬盘的驱动.
  • 哪位大侠知道Linux里的有名管道传送数据快不快?有名管道操作的过程是否有读写硬盘的操作?
  • 那位大侠知道怎么从硬盘安装linux9.0吗?(*.iso文件)
  • 我买了LINUX8。0三张盘,我不想每次装都用光盘,所以我就想把它拷到硬盘上,可以备份到硬盘上以后,我就不知道怎么装了,是拷哪几个文件
  • 想从硬盘安装linux,在windows2000下,但是不知道怎样进入纯dos模式?有礼
  • linux c 如何知道 当前有多少个硬盘啊
  • 请问在不知道LINUX密码的情况下,能不能考贝硬盘的数据
  • 被LINUX分走的硬盘不知道去哪里了?
  • 1哪位大侠知道Linux里的有名管道传送数据快不快?有名管道操作的过程是否有读写硬盘的操作?
  • 新手:linux下怎么不知道硬盘和光驱在那儿,不象windows的资源管理器???
  • 怎样知道安装了linux的硬盘还剩下多少空间?
  • 如何知道硬盘文件系统格式?
  • jquery iis7站长之家
  • 请问linux中,如何编程知道硬盘是否格式化,如何编程实现格式化。最好有现成接口,谢谢。
  • 求助!!!想知道计算机可寻址空间与硬盘容量的关系!!!
  • 我对硬盘的fat分区重新用fdisk分区后,linux就启动不了了,里面有非常重要的东西.就是不知道怎么启动
  • 在linux下新加一块IDE硬盘,用linux自带的FDISK命令分了一个LINUX分区,但是不知道用什么命令将该分区格式化并且挂载到home下。在线等
  • 移动硬盘双linux系统攻略,实在不知道发到哪就发到这吧
  • 如何知道在linux下面如何知道mysql服务是用哪个端口啊
  • 那位知道怎样能知道 linux C/C++文件它所依赖的文件
  • 哪位大哥知道?我怎样知道LINUX redhat 7.2下声音设备由哪个应用程序占用?
  • 我做了个简单的留言板,不知道如何知道留言者的ip地址?
  • 只知道一个命令, 不知道其进程,问如何停止它?
  • red hat linux 9.0安装问题,不知道有人知道吗?
  • 知道进程的ID,有什么函数知道这个进程还活不活?
  • 我插入USB设备,知道是1-1:1.0下面,如何知道ttyUSB?
  • UI小问题,可我就是不知道怎么实现,或许您知道……
  • 我在rh8下装了wine,可是我不知道装到哪里了,那位知道默认路径?
  • 请问如何在不知道对方IP,仅知道MAC地址的情况下和对方通信呢?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3