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

SNMP编程

开发平台:

C/C++

  1. #!/usr/bin/perl -w
  2. # $Id: stat.pl,v 1.1.1.1 2002/02/26 10:16:37 oetiker Exp $
  3. ####################
  4. # New updates for stat.pl
  5. ####################
  6. %D_STAT=(
  7.     RQ => 0,
  8.     RR => 1,
  9.     RIQ => 2,
  10.     RNXD => 3,
  11.     RFwdQ => 4,
  12.     RFwdR => 5,
  13.     RDupQ => 6,
  14.     RDupR => 7,
  15.     RFail => 8,
  16.     RFErr => 9,
  17.     RErr => 10,
  18.     RTCP => 11,
  19.     RAXFR => 12,
  20.     RLame => 13,
  21.     ROpts => 14,
  22.     SSysQ => 15,
  23.     SAns => 16,
  24.     SFwdQ => 17,
  25.     SDupQ => 18,
  26.     SFail => 19,
  27.     SFErr => 20,
  28.     SErr => 21,
  29.     RNotNsq => 22,
  30.     SNaAns => 23,
  31.     SNXD => 24,
  32. );                     
  33. # This file is to feed mrtg with right information.
  34. # You could do this more fancy with up-time and stuff like that,
  35. # but that will be maybe in a couple of versions upward.
  36. # This works and i dont want to be like other big companys that gives out
  37. # Programs that want work but is all that fancy.
  38. #
  39. # Any way please do change this files so the right PATH to youre scripts
  40. # are there.
  41. # Requirements:
  42. # this scripts require MRTG (of course), i wont get in how to configure this,
  43. # because im not sure how to do it correctly, i manged to get it to work.
  44. # but i sugest you take a real good look how to configure MRTG.
  45. # more requirement is , perl version 5.004_05. Look at the documentation
  46. # on MRTG this one needs you to have some patches for some OS.
  47. #
  48. # If you want to use getting iformation from a remote DNS, sure you could use
  49. # my script dns.named but beware that this is NOT safe maybe you should use 
  50. # If you want to use getting iformation from a remote DNS, sure you could use
  51. # scp to get youre file, but if not, be sure to set the rights so no non-auth
  52. # could see what password is.
  53. # dns.named requires expect version 5.26.0 (i havent tested on other versions)
  54. #
  55. # im not the greatest script maker but i managed this to work, but if
  56. # you have any comments or you have some great changes please be free to send them to calle@volvo.se                                          
  57. # HOSTNAME youre domain this will show up in the web-page
  58. #
  59. # OK now to this new version of this program
  60. # $LOG is where you find youre named.stats *
  61. # in Bind 8.2.1 the way to get youre named.stats is "ndc stats"
  62. # in Bind 4.9.3 kill -ABRT `cat /var/run/named.pid`
  63. # in Bind kill -ILL `cat /var/run/named.pid`
  64. # $RUN you have to set that to where youre script is set to run ex my $RUN = "/home/myhomeaccount/";
  65. #  
  66. # now to the real new thing that is you can have 2 graphs in one MRTG session
  67. # you have to set the $INCOMING and $OUTGOING, $INCOMING  = $D_STAT{"RQ"}; <-- this one needs to be set to look
  68. # for wich Data you want to see on the first Graph (RQ is Requested Queries)
  69. #
  70. # now to the other $OUTGOING = $D_STAT{"RFail"}; i set default but can be changed for what you want
  71. # RFail Requested Failure i done a short list of What some of them means , but if you want to have a complete list 
  72. # you could look into the DNS and Bind book from O'reilly page 166
  73. #
  74. # Short list of some of the things you could pull out
  75. #
  76. # RQ: Requested Queries.
  77. # RR: Count of responses recieved from relay.
  78. # RIQ: Count of reverse queries recieved from relay.
  79. # RNXD: Count of "no such domain" answeres.
  80. # RFwdQ: Count of queries received from relay that nedded more processing
  81. # RFwdR: Count of is the reponses recived from relay that answered the
  82. # original query and were passed back to application.
  83. # RDupR: Is the count of duplicat response from relay.
  84. # RFail: Is the count of SERVFAIL response from relay.
  85. # RFErr: is the count of FORMERR response from relay. 
  86. # RErr: is the count of errors that werent either SERVFAIL or FORMERR
  87. # RLame: Count of lame DELEGATIONS.
  88. # and so on read the book. 
  89. my $HOSTNAME = "HOST.YOURE.DOMAIN";   
  90. my $LOG = "/home/";
  91. my $RUN = "/home/";
  92. my $INCOMING  = $D_STAT{"RQ"};
  93. my $OUTGOING = $D_STAT{"RFail"};
  94. #######################################
  95. #### Please Dont toch this part
  96. ######################################
  97. my $QUE_P_MIN =();
  98. my $QUE_P_OTHER = ();
  99. my @N_STATS=();
  100. my @OLD_S=();
  101. my $UPTIME = ();
  102. sub HIST {
  103.     
  104.     open (STAT , "$LOG") or die "could not find or open file $LOG";
  105.     @N_STAT = <STAT>;
  106.     close (STAT);           
  107.     
  108.     open (V_OLD , "$RUN/OLD");
  109.     my @OLD_S = <V_OLD>;
  110.     close (V_OLD); 
  111.     
  112.     
  113.    
  114.     my $G_FLAG = "no";
  115.     
  116.     foreach $line (@N_STAT) {
  117.         
  118.         if ( $line =~ m/^([0-9]+)s+S+s+S+sreset/ ){
  119.     $UPTIME = $1;
  120. }
  121. if ( $G_FLAG =~ /yes/) {
  122.     
  123.     my @NUM_QUE=split ' ',$line;
  124.             open ( LOGGER , "> $RUN/OLD");
  125.             print LOGGER "$NUM_QUE[$INCOMING]n";
  126.     print LOGGER "$NUM_QUE[$OUTGOING]n";
  127.             close ( LOGGER );
  128.     $QUE_P_MIN = $NUM_QUE[$INCOMING]-$OLD_S[0];
  129.     $QUE_P_OTHER = $NUM_QUE[$OUTGOING]-$OLD_S[1];
  130.             $G_FLAG = "no";
  131.         }                                 
  132. if ($line =~ /(Global)/) {
  133.     $G_FLAG = "yes";
  134. }
  135.     }
  136.     
  137.     print "$QUE_P_MINn$QUE_P_OTHERn$UPTIMEn$HOSTNAMEn";
  138. }
  139. &HIST();
  140.