<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.openvz.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AlexKuklin</id>
	<title>OpenVZ Virtuozzo Containers Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.openvz.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AlexKuklin"/>
	<link rel="alternate" type="text/html" href="https://wiki.openvz.org/Special:Contributions/AlexKuklin"/>
	<updated>2026-04-11T05:27:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=Net-SNMP_subagent&amp;diff=7123</id>
		<title>Net-SNMP subagent</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=Net-SNMP_subagent&amp;diff=7123"/>
		<updated>2009-03-06T17:28:22Z</updated>

		<summary type="html">&lt;p&gt;AlexKuklin: New page: Here is snmp subagent to export UBC via SNMP protocol.  Author - n1ckname   === /etc/snmp/snmpagent.pl ===    #!/usr/bin/perl       $program = $0;      use NetSNMP::OID (':all');   use Net...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is snmp subagent to export UBC via SNMP protocol.&lt;br /&gt;
&lt;br /&gt;
Author - n1ckname&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== /etc/snmp/snmpagent.pl ===&lt;br /&gt;
&lt;br /&gt;
  #!/usr/bin/perl &lt;br /&gt;
  &lt;br /&gt;
  $program = $0;&lt;br /&gt;
  &lt;br /&gt;
  use NetSNMP::OID (':all');&lt;br /&gt;
  use NetSNMP::agent (':all');&lt;br /&gt;
  use NetSNMP::ASN (':all');&lt;br /&gt;
  use Data::Dumper;&lt;br /&gt;
  my $debug = 0;&lt;br /&gt;
  my @resName=qw(name vmguarpages tcpsndbuf othersockbuf physpages numfile numtcpsock numpty numsiginfo tcprcvbuf dcachesize numiptent numothersock privvmpages kmemsize numflock shmpages lockedpages dummy numproc oomguarpages dgramrcvbuf);&lt;br /&gt;
  my @catName=qw(held maxheld barrier limit failcnt);&lt;br /&gt;
  my %resIndex,%catIndex;&lt;br /&gt;
  @resIndex{@resName} = (0..$#resName);&lt;br /&gt;
  @catIndex{@catName} = (0..$#catName);&lt;br /&gt;
  &lt;br /&gt;
  sub handler { &lt;br /&gt;
      my ($handler, $reg_info, $request_info, $requests) = @_; &lt;br /&gt;
      open(UB,&amp;quot;&amp;lt;$source&amp;quot;);&lt;br /&gt;
      while(&amp;lt;UB&amp;gt;){&lt;br /&gt;
          my %vmachine;&lt;br /&gt;
          if ( /\D*(\d+):[\s\t]+([a-z]+)[\t\s]+(\d+)[\t\s]+(\d+)[\t\s]+(\d+)[\t\s]+(\d+)[\t\s]+(\d+).*/ ){ &lt;br /&gt;
  	    $vid=$1; &lt;br /&gt;
  	    $beancounters{$vid}=\%vmachine ; &lt;br /&gt;
              ${beancounters{$vid}{0}}=&amp;quot;www&amp;quot;;&lt;br /&gt;
  	    open(CONF,&amp;quot;&amp;lt;/etc/vz/conf/$vid.conf&amp;quot;);&lt;br /&gt;
  	    my $name=$vid;&lt;br /&gt;
  	    while(&amp;lt;CONF&amp;gt;) {&lt;br /&gt;
  		if(/NAME[\s\t]?=[\s\t]?[&amp;quot;]?([^&amp;quot;]+)[&amp;quot;]?/)  {&lt;br /&gt;
  		    $name=$1;&lt;br /&gt;
  		    last;&lt;br /&gt;
  		    #&amp;quot;&lt;br /&gt;
  		}&lt;br /&gt;
  	    }&lt;br /&gt;
  	    ${beancounters{$vid}{0}}=$name;&lt;br /&gt;
              $resource=$2 ;&lt;br /&gt;
              $held=$3 ;&lt;br /&gt;
              $maxheld=$4 ;&lt;br /&gt;
              $barrier=$5 ;&lt;br /&gt;
              $limit=$6 ;&lt;br /&gt;
              $failcnt=$7 ;&lt;br /&gt;
              ${beancounters{$vid}}{${resIndex{$resource}}}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
  &lt;br /&gt;
  	}&lt;br /&gt;
          if ( /^[\W\d]+([a-z]+)[\t\s]+(\d+)[\t\s]+(\d+)[\t\s]+(\d+)[\t\s]+(\d+)[\t\s]+(\d+).*/ ) {&lt;br /&gt;
                  $resource=$1 ;&lt;br /&gt;
                  $held=$2 ;&lt;br /&gt;
                  $maxheld=$3 ;&lt;br /&gt;
                  $barrier=$4 ;&lt;br /&gt;
                  $limit=$5 ;&lt;br /&gt;
                  $failcnt=$6 ;&lt;br /&gt;
                  ${beancounters{$vid}}{${resIndex{$resource}}}=[$held , $maxheld , $barrier , $limit ,$failcnt ];&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
      close(UB);&lt;br /&gt;
  &lt;br /&gt;
      for ( my $request = $requests; $request; $request = $request-&amp;gt;next() ) {&lt;br /&gt;
      &lt;br /&gt;
          my $reqOID = $request-&amp;gt;getOID();&lt;br /&gt;
          my $reqMode = $request_info-&amp;gt;getMode();&lt;br /&gt;
  	my $myOID = new NetSNMP::OID($OID);&lt;br /&gt;
  #1.3.6.1.4.1.2021.51.ctcount = 5&lt;br /&gt;
  #1.3.6.1.4.1.2021.51.ct.101.name = www&lt;br /&gt;
  #1.3.6.1.4.1.2021.51.ct.101.kmemsize.held = 458584&lt;br /&gt;
  #1.3.6.1.4.1.2021.51.ct.101.kmemsize.maxheld = 1490364&lt;br /&gt;
  #1.3.6.1.4.1.2021.51.ct.101.kmemsize.barrier = 11055923&lt;br /&gt;
  &lt;br /&gt;
  #		$request-&amp;gt;setValue(ASN_INTEGER, scalar keys (%beancounters));&lt;br /&gt;
  &lt;br /&gt;
          if ($reqMode == MODE_GET) {&lt;br /&gt;
  	    print STDERR $reqOID.&amp;quot; MODE_GET\n&amp;quot; if($debug);;&lt;br /&gt;
      	    if($reqOID == $myOID+&amp;quot;.0&amp;quot;){&lt;br /&gt;
  		$request-&amp;gt;setValue(ASN_INTEGER, scalar keys (%beancounters));&lt;br /&gt;
  	    } elsif($reqOID =~ /$myOID\.([0-9]+)[\.]?([0-9]+)?[\.]?([0-9]+)?[\.]?([0-9]+)?/) {&lt;br /&gt;
  &lt;br /&gt;
  		my $typeReq=$1;&lt;br /&gt;
  		my $vzidReq=$2;&lt;br /&gt;
  		my $resReq=$3;&lt;br /&gt;
  		my $catReq=$4;&lt;br /&gt;
  		my %vz;&lt;br /&gt;
  		&lt;br /&gt;
  &lt;br /&gt;
  		print STDERR &amp;quot;Type:$typeReq, VzID: $vzidReq, Res: $resReq/$resName[$resReq], Cat: $catReq/$catName[$catReq]\n&amp;quot; if($debug);;&lt;br /&gt;
  &lt;br /&gt;
  		if(!$vzidReq) {&lt;br /&gt;
  		    foreach $vzid (sort keys %beancounters) {&lt;br /&gt;
  			$vzidReq=$vzid;&lt;br /&gt;
  			last;&lt;br /&gt;
  		    }&lt;br /&gt;
  		}&lt;br /&gt;
  		if(!$vzidReq || !exists(${beancounters{$vzidReq}})) {&lt;br /&gt;
  		    $request-&amp;gt;setError($request_info,SNMP_ERR_NOSUCHNAME);&lt;br /&gt;
  		    last;&lt;br /&gt;
  		}&lt;br /&gt;
  &lt;br /&gt;
  		%vz=%{${beancounters{$vzidReq}}};&lt;br /&gt;
  &lt;br /&gt;
  		if((!defined($resReq) or $resReq == 0) &amp;amp;&amp;amp; defined(${vz{0}})) {&lt;br /&gt;
  		    $request-&amp;gt;setValue(ASN_OCTET_STR, &amp;quot;&amp;quot;.${vz{0}});&lt;br /&gt;
  		} elsif(!defined($catReq) &amp;amp;&amp;amp; defined(${vz{$resReq}[0]})) {&lt;br /&gt;
  		    $request-&amp;gt;setValue(ASN_INTEGER, ${vz{$resReq}[0]});&lt;br /&gt;
  &lt;br /&gt;
  		} elsif($catReq&amp;lt; $#catName &amp;amp;&amp;amp; defined(${vz{$resReq}[$catReq]})) {&lt;br /&gt;
  		    if(9223372036854775807 == ${vz{$resReq}[$catReq+1]}) {&lt;br /&gt;
  			$request-&amp;gt;setValue(ASN_INTEGER,-1);&lt;br /&gt;
  		    } else {&lt;br /&gt;
  			$request-&amp;gt;setValue(ASN_INTEGER,${vz{$resReq}[$catReq+1]});&lt;br /&gt;
  		    }&lt;br /&gt;
  		} elsif($resReq&amp;lt;scalar keys %vz &amp;amp;&amp;amp; defined(${vz{$resReq+1}[0]})) {&lt;br /&gt;
  		    if(9223372036854775807 == ${vz{$resReq}[$catReq+1]}) {&lt;br /&gt;
  			$request-&amp;gt;setValue(ASN_INTEGER,-1);&lt;br /&gt;
  		    } else {&lt;br /&gt;
  			$request-&amp;gt;setValue(ASN_INTEGER, ${vz{$resReq+1}[0]});&lt;br /&gt;
  		    }&lt;br /&gt;
  		} else  {&lt;br /&gt;
  		    my $finish=1;&lt;br /&gt;
  		    foreach $vzid (sort keys %beancounters) {&lt;br /&gt;
  			if($vzid &amp;gt; $vzidReq) {&lt;br /&gt;
  			    %vz=%{${beancounters{$vzid}}};&lt;br /&gt;
  			    $vzidReq=$vzid;&lt;br /&gt;
  			    $finish=0;&lt;br /&gt;
  			    last;&lt;br /&gt;
  			}&lt;br /&gt;
  		    }&lt;br /&gt;
  		    if(!$finish)  {&lt;br /&gt;
  			$request-&amp;gt;setValue(ASN_INTEGER, &amp;quot;&amp;quot;.${vz{0}});&lt;br /&gt;
  		    }&lt;br /&gt;
  		}&lt;br /&gt;
      		&lt;br /&gt;
  &lt;br /&gt;
  	    }&lt;br /&gt;
  &lt;br /&gt;
  	} elsif ($reqMode == MODE_GETNEXT) {&lt;br /&gt;
  	    print STDERR $reqOID.&amp;quot; MODE_GETNEXT\n&amp;quot; if($debug);&lt;br /&gt;
      	    if($reqOID &amp;lt; $myOID+&amp;quot;.0&amp;quot;){&lt;br /&gt;
      		$request-&amp;gt;setOID($OID.&amp;quot;.0&amp;quot;);&lt;br /&gt;
  		$request-&amp;gt;setValue(ASN_INTEGER, scalar keys (%beancounters));&lt;br /&gt;
  	    } elsif($reqOID =~ /$myOID\.([0-9]+)[\.]?([0-9]+)?[\.]?([0-9]+)?[\.]?([0-9]+)?$/) {&lt;br /&gt;
  		my $typeReq=$1;&lt;br /&gt;
  		my $vzidReq=$2;&lt;br /&gt;
  		my $resReq=$3;&lt;br /&gt;
  		my $catReq=$4;&lt;br /&gt;
  		my %vz;&lt;br /&gt;
  		&lt;br /&gt;
  		print STDERR &amp;quot;Type:$typeReq, VzID: $vzidReq, Res: $resReq/$resName[$resReq], Cat: $catReq/$catName[$catReq]\n&amp;quot; if($debug);;&lt;br /&gt;
  &lt;br /&gt;
  		if(!$vzidReq) {&lt;br /&gt;
  		    foreach $vzid (sort keys %beancounters) {&lt;br /&gt;
  			$vzidReq=$vzid;&lt;br /&gt;
  			last;&lt;br /&gt;
  		    }&lt;br /&gt;
  		}&lt;br /&gt;
  		if(!$vzidReq || !exists(${beancounters{$vzidReq}})) {&lt;br /&gt;
  		    $request-&amp;gt;setError($request_info,SNMP_ERR_NOSUCHNAME);&lt;br /&gt;
  		    last;&lt;br /&gt;
  		}&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  		%vz=%{${beancounters{$vzidReq}}};&lt;br /&gt;
  &lt;br /&gt;
  		if(!defined($resReq) &amp;amp;&amp;amp; defined(${vz{0}})) {&lt;br /&gt;
      		    $request-&amp;gt;setOID($myOID.&amp;quot;.1.&amp;quot;.$vzidReq.&amp;quot;.0&amp;quot;);&lt;br /&gt;
  		    $request-&amp;gt;setValue(ASN_OCTET_STR, &amp;quot;&amp;quot;.${vz{0}});&lt;br /&gt;
  		} elsif(!defined($catReq) &amp;amp;&amp;amp; defined(${vz{$resReq}[0]})) {&lt;br /&gt;
      		    $request-&amp;gt;setOID($myOID.&amp;quot;.1.&amp;quot;.$vzidReq.&amp;quot;.&amp;quot;.$resReq.&amp;quot;.0&amp;quot;);&lt;br /&gt;
  		    $request-&amp;gt;setValue(ASN_INTEGER, ${vz{$resReq}[0]});&lt;br /&gt;
  		} elsif($catReq&amp;lt; $#catName &amp;amp;&amp;amp; defined(${vz{$resReq}[$catReq]})) {&lt;br /&gt;
  		    $request-&amp;gt;setOID($myOID.&amp;quot;.1.&amp;quot;.$vzidReq.&amp;quot;.&amp;quot;.$resReq.&amp;quot;.&amp;quot;.($catReq+1));&lt;br /&gt;
  		    if(9223372036854775807 == ${vz{$resReq}[$catReq+1]}) {&lt;br /&gt;
  			$request-&amp;gt;setValue(ASN_INTEGER,-1);&lt;br /&gt;
  		    } else {&lt;br /&gt;
  			$request-&amp;gt;setValue(ASN_INTEGER,${vz{$resReq}[$catReq+1]});&lt;br /&gt;
  		    }&lt;br /&gt;
  		} elsif($resReq&amp;lt;scalar keys %vz &amp;amp;&amp;amp; defined(${vz{$resReq+1}[0]})) {&lt;br /&gt;
  		    $request-&amp;gt;setOID($myOID.&amp;quot;.1.&amp;quot;.$vzidReq.&amp;quot;.&amp;quot;.($resReq+1).&amp;quot;.0&amp;quot;);&lt;br /&gt;
  		    if(9223372036854775807 == ${vz{$resReq}[$catReq+1]}) {&lt;br /&gt;
  			$request-&amp;gt;setValue(ASN_INTEGER,-1);&lt;br /&gt;
  		    } else {&lt;br /&gt;
  			$request-&amp;gt;setValue(ASN_INTEGER, ${vz{$resReq+1}[0]});&lt;br /&gt;
  		    }&lt;br /&gt;
  		} else  {&lt;br /&gt;
  		    my $finish=1;&lt;br /&gt;
  		    foreach $vzid (sort keys %beancounters) {&lt;br /&gt;
  			if($vzid &amp;gt; $vzidReq) {&lt;br /&gt;
  			    %vz=%{${beancounters{$vzid}}};&lt;br /&gt;
  			    $vzidReq=$vzid;&lt;br /&gt;
  			    $finish=0;&lt;br /&gt;
  			    last;&lt;br /&gt;
  			}&lt;br /&gt;
  		    }&lt;br /&gt;
  		    if(!$finish)  {&lt;br /&gt;
  			$request-&amp;gt;setOID($myOID.&amp;quot;.1.&amp;quot;.$vzidReq.&amp;quot;.0.0&amp;quot;);&lt;br /&gt;
  			$request-&amp;gt;setValue(ASN_OCTET_STR, ${vz{0}});&lt;br /&gt;
  		    }&lt;br /&gt;
  		}&lt;br /&gt;
  	    }&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
  } &lt;br /&gt;
  &lt;br /&gt;
  {&lt;br /&gt;
          my $regoid = new NetSNMP::OID($OID); &lt;br /&gt;
          $agent-&amp;gt;register($program, $regoid, \&amp;amp;handler);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  #eof // nick&lt;br /&gt;
  &lt;br /&gt;
=== /etc/snmp/snmpd.conf ===&lt;br /&gt;
&lt;br /&gt;
  rouser my_username priv&lt;br /&gt;
  createUser my_username MD5 my_password DES&lt;br /&gt;
  perl $OID = '.1.3.6.1.4.1.2021.51'; &lt;br /&gt;
  perl $debugging = '1';&lt;br /&gt;
  perl $verbose = '1';&lt;br /&gt;
  perl $source = '/proc/user_beancounters'; &lt;br /&gt;
  perl do &amp;quot;/etc/snmp/snmpagent.pl&amp;quot;;&lt;/div&gt;</summary>
		<author><name>AlexKuklin</name></author>
		
	</entry>
</feed>