cpuinfo.pl
上传用户:shbosideng
上传日期:2013-05-04
资源大小:1555k
文件大小:5k
源码类别:

SNMP编程

开发平台:

C/C++

  1. #!/usr/bin/perl
  2. # ============================================================================
  3. # CPU Usage script for mrtg
  4. #
  5. #    File:  cpuinfo.pl
  6. #    Author:  Matthew Schumacher | schu@schu.net
  7. #    Version:  1.3
  8. #
  9. #    Date: 8/17/2000
  10. #    Purpose:   This script reports CPU usage for user
  11. # and system to mrtg, along with uptime 
  12. # and the machine's hostname.
  13. #
  14. #    Usage: ./cpuinfo.pl [machine] [os]
  15. #
  16. # For now [os] can only be "sun" or "linux"
  17. #
  18. #
  19. #    Info: Designed on RedHat linux 6.2 with perl
  20. # version 5.005_03.  The script itself has
  21. # only been tested on Linux, however, it 
  22. # has been tested to connect to, and graph
  23. # CPU usage on sun and linux.  
  24. #
  25. # This script requires both sar and rsh to 
  26. # be installed and working.  Because linux
  27. # does not come with sar (mine didn't) it
  28. # may be necessary to download and install
  29. # it.  Get sar here: 
  30. #
  31. #   ftp://metalab.unc.edu/pub/Linux/system/status/sysstat-3.2.4.tar.gz
  32. #    
  33. # How it works:
  34. #
  35. # The script uses rsh (or ssh)  to run sar on the the
  36. # remote machine.  Sar samples the cpu time
  37. # for both user and system once per second
  38. # for 10 seconds.  It then reports an average
  39. # to the script, which parses out the information
  40. # and formats it in a way mrtg can understand.
  41. # The script also runs uptime to get the machine's
  42. # uptime and passes it to mrtg.
  43. #
  44. #
  45. #    [History]
  46. #
  47. #              1/4/2000  -  Added support for different rsh programs.
  48. #              I also made the default rsh program ssh for security
  49. #              reasons.
  50. #
  51. #        3/9/2000 -  Removed the default os because it seemed 
  52. #        redundant.  Added code to support localhost as a machine
  53. #              name.
  54. #
  55. #              8/17/2000 - Updated sar regex for sar command.  Sorry
  56. #              for not keeping up with the email, I had some email
  57. #              issues then finnaly I got my own domain and changed it
  58. #              to schu@schu.net.
  59. #
  60. # ============================================================================
  61. # Sample cfg:
  62. #
  63. # WorkDir: /home/httpd/html/mrtg
  64. # Target[machine]: `/home/mrtg/run/cpuinfo.pl localhost linux`
  65. # MaxBytes[machine]: 100
  66. # Options[machine]: gauge, nopercent
  67. # Unscaled[machine]: dwym
  68. # YLegend[machine]: % of CPU used
  69. # ShortLegend[machine]: %
  70. # LegendO[machine]:  CPU System:
  71. # LegendI[machine]:  CPU User:
  72. # Title[machine]: Machine name
  73. # PageTop[machine]: <H1>CPU usage for machine (schu's workstation)
  74. #  </H1>
  75. #  <TABLE>
  76. #    <TR><TD>System:</TD><TD>Machine</TD></TR>
  77. #   </TABLE>
  78. #
  79. # ============================================================================
  80. # setup local vars
  81. my($machine, $os);
  82. # ============================================================================
  83. # == Enter your rsh program here here ==
  84. $rsh = "/usr/local/bin/ssh -x"; # Enter your rsh command here
  85. # == You shouldn't need to edit anything below this line ==
  86. #========================================================
  87. # This checks for options passed cpuinfo.pl from the cmd line 
  88. if (scalar(@ARGV) < 2) 
  89.    {
  90.    print("USAGE: cpuinfo.pl {machine} {os}n");
  91.    exit(-1);
  92.    }     
  93. if ($ARGV[0] ne '' && $ARGV[0] ne '#')
  94.    {
  95.    $machine = $ARGV[0];
  96.    }
  97. if ($ARGV[1] ne '' && $ARGV[1] ne '#')
  98.    {
  99.    $os = $ARGV[1];
  100.    }
  101. # Validate the os
  102. SWITCH: 
  103. {
  104.   if ($os =~ /^sun$/){last SWITCH;}
  105.   if ($os =~ /^linux$/){last SWITCH;}
  106.   # DEFAULT: Die if we can't figure out what the os is 
  107.   die "Can't figure out which OS the machine is.n";
  108. }
  109. # Execute the appropriate subroutine based on the os
  110. &$os;
  111. exit(0);
  112. #=======================================================
  113. # Subroutines: names of subroutines are supported OSs.
  114. #========================================================
  115. sub sun
  116.   {
  117.    # Run commands
  118.    if ($machine =~ 'localhost') 
  119.    {
  120.    $getcpu = `sar -u 1 10 | grep Average`;
  121.    $getuptime = `uptime`;
  122.    }
  123.    else
  124.    {
  125.    $getcpu = `$rsh $machine "sar -u 1 10" | grep Average`;
  126.    $getuptime = `$rsh $machine "uptime"`;
  127.    }
  128.  
  129.    # Parse though getcpu and get data
  130.    $getcpu =~ /^Averages+(d+)s+(d+)s+/;
  131.    $outputusr = $1;
  132.    $outputsys = $2;
  133.    # Print getcpu data for mrtg
  134.    print $outputusr."n";
  135.    print $outputsys."n";
  136.    # Parse though getuptime and get data
  137.    $getuptime =~ /^s+d{1,2}:d{2}..s+ups+(d+)s+(......),/;
  138.    # Print getuptime data for mrtg
  139.    print $1." ".$2."n"; 
  140.    # Print machine name for mrtg
  141.    print $machine."n";
  142.   }
  143. sub linux
  144.   {
  145.    # Run commands
  146.    if ($machine =~ 'localhost')
  147.    {
  148.    $getcpu = `/usr/local/bin/sar -u 1 10 | grep Average`;
  149.    $getuptime = `/usr/bin/uptime`;
  150.    }
  151.    else
  152.    {
  153.    $getcpu = `$rsh $machine "/usr/local/bin/sar -u 1 10 | grep Average"`;
  154.    $getuptime = `$rsh $machine "/usr/bin/uptime"`;
  155.    }
  156.    # Parse though getcpu and get data
  157.    $getcpu =~ /^Average:s+alls+(d+).d+s+d+.d+s+(d+).d+s+d+.d+/;  
  158.    $getcpuusr = $1;
  159.    $getcpusys = $2;
  160.    # Print getcpu data for mrtg
  161.    print $getcpuusr."n";
  162.    print $getcpusys."n";
  163.    # Parse though getuptime and get data
  164.    $getuptime =~ /^s+d{1,2}:d{2}..s+ups+(d+)s+(w+),/;
  165.    # Print getuptime data for mrtg
  166.    print $1." ".$2."n";
  167.    # Print machine name for mrtg
  168.    print $machine."n";
  169.   }
  170. exit(0);