weblogic中snmp的使用

weblogic中snmp的使用

一些概念:
 SNMP: 簡單網絡管理協議,SNMP 使網絡管理員能夠管理網絡效能,發現並解決網絡問題以及規劃網絡增長。通過 SNMP 接收隨機消息(及事件報告)網絡管理系統獲知網絡出現問題。目前, SNMP 有 3 種: SNMPV1 、 SNMPV2 、 SNMPV3。第 1 版和第 2 版沒有太大差距,但 SNMPV2 是增強版本,包含了其它協議操作。與前兩種相比, SNMPV3 則包含更多安全和遠程配置。爲了解決不同 SNMP 版本間的不兼容問題, RFC3584 種定義了三者共存策略。
SNMP OID: SNMP Object Identifiers(對象標示符),SNMP對象標識符(OID)是定義在特定MIB模式中的值,來定義一個特定的在MIB數據庫中SNMP目標。 SNMP OID是劃界序列數字組成a.b.c...x.y.z的週期。它對信息的一個項目是一個獨特的標識符,其是一個MIB的一部分。典型的OIDs能夠有與它 們相關的名字。OIDs在自然中是分等級的。因此1.2.3出現在1.3之前但是在1.2之後。MIB 會爲其描述的每個受管對象分配一個唯一的、不可變的編號,稱爲對象標識符(Object Identifier,簡稱 OID)。每個 OID 包含一個從左到右的整數序列。此序列定義 MIB 樹中的對象的位置,並指定通過樹到達此對象的唯一路徑。此路徑中的每個節點均有一個編號和一個與編號關聯的名稱。 
    路徑 .1.3.6.1.4.1 定義 private.enterprises OID,樹上此節點下的每個編號代表樹中爲特定供應商(如 BEA)保留的分支。BEA MIB 註冊在樹中的位置 .1.3.6.1.4.1.140,WebLogic Server MIB 包含 .1.3.6.1.4.1.140.625 下的所有 OID
管理信息庫(MIB) 是一個具有分層特性的信息的集合,我們可以通過 SNMP 去存取它。MIB 的成員是一些被管理的對象(Managed Object),以對象標示符(Object Identifiers)來區分它們。


在bea目錄下有一個BEA-WEBLOGIC-MIB.asn1文件,保存了snmp的配置,具體配置的含義可以參照:http://e-docs.bea.com/wls/docs81/snmp/index.html

如果想加入自己的OID,可以將將OID 相應的包放到 %WL_HOME%\server\lib\mbeantypes 目錄下就可以了(這個我也沒有試過)

要使用weblogic的snmp功能首先要在weblogic的控制檯中啓用snmp功能,然後就可以使用oid來獲得堆棧、內存等使用信息了


在weblogic中提供了1萬多的oid可以給第三方軟件使用,我們也可以使用unix自帶的snmpwalk命令去取得各個oid的值,以下列出幾個例子:
# jvm runtime Heap size
snmpwalk 
- v 2c  - public   192.168 . 88.160 : 161  . 1.3 . 6.1 . 4.1 . 140.625 . 340.1 . 30

#host used memory (by jrockit jdk)
snmpwalk 
- v 2c  - public   192.168 . 88.160 : 161   1.3 . 6.1 . 4.1 . 140.625 . 302.1 . 40

#The number of idle threads assigned to the queue
snmpwalk 
- v 2c  - public   192.168 . 88.160 : 161   1.3 . 6.1 . 4.1 . 140.625 . 180.1 . 25.32 . 48.101 . 49.102 . 50.102 . 52.97 . 51.101 . 102.102 . 100.98 . 57.56 . 55.53 . 57.54 . 56.98 . 98.101 . 51.53 . 54.100 . 101.52 . 57.53

#The date and time that the longest waiting request was placed 
in  the queue  -- 900563304
snmpwalk 
- v 2c  - public   192.168 . 88.160 : 161  . 1.3 . 6.1 . 4.1 . 140.625 . 180.1 . 30.32 . 48.101 . 49.102 . 50.102 . 52.97 . 51.101 . 102.102 . 100.98 . 57.56 . 55.53 . 57.54 . 56.98 . 98.101 . 51.53 . 54.100 . 101.52 . 57.53

其中第二個oid和jrockit有關,所有和jrockit有關的oid在默認情況下都是不可以使用的,必須在weblogic啓動時將jdk改爲jrockit jdk纔可以,這個是bea公司自己的jdk

在java中我們也可以使用snmp4j去存取snmp的值,進行遠程控制,下面一段代碼就是用來取得所有的oid的:

package test;

import java.io.IOException;
import java.net.InetAddress;

import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.
event .ResponseEvent;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;

public   class  test1 {

    
public   static   void  main(String[] args)
    
{
        
try {
            Snmp snmp 
=   new  Snmp( new  DefaultUdpTransportMapping());
            CommunityTarget target 
=   new  CommunityTarget(); // agent對象
            target.setCommunity( new  OctetString( " public " )); // 設置共同體名,沒發現設置RWCommnity的方法,大概只能設一個.
            
            target.setVersion(SnmpConstants.version1);
// 設置版本
            target.setAddress( new  UdpAddress( " 127.0.0.1/161 " )); // 設置IP地址和端口號,這裏竟然用'/'來分隔,當初確實沒有料到,JDOC的說明等於沒有.
            target.setRetries( 1 );                       // 設置重試次數
            target.setTimeout( 5000 );              // 設置超時
            
            snmp.listen();                                 
// 監聽
            
            String m_oid 
=   " 1.3.6.1.4.1.140.625.10.1.0 " ;
            
int  w = 0 ;
            
while ( true {
                w
++ ;
                
// set pud type and set oid
                PDU request  =   new  PDU();          // new request PDU包
                request.setType(PDU.GETNEXT);  // 設置PDU類型,
                
//             request.add(new VariableBinding(new OID("1.3.6.1.2.1.1")));  // OID添加
                
//             request.add(new VariableBinding(new OID(".1.3.6.1.2.1.1")));  // OID添加
                request.add( new  VariableBinding( new  OID(m_oid)));
//                 System.out.println("request UDP:" + request); // 請求包內內容輸出,
                PDU response  =   null ; // 定義response包
                ResponseEvent responseEvent  =  snmp.send(request, target);  // 發出request PDU
                
// 接收response PDU
                response  =  responseEvent.getResponse();

                
// response PDU包解析
                 if  (response  !=   null {
                    
if  (response.getErrorIndex()  ==  response.noError
                            
&&  response.getErrorStatus()  ==  response.noError)  {
//                         System.out.println("no error.");
                        String pause  =  responseEvent.getResponse()
                                .getVariableBindings().toString();
                        String getvalue 
=  pause.substring(
                                pause.indexOf(
" " +   2 , pause.indexOf( ' ] ' ));
                        String oid 
=  pause.substring(pause.indexOf( " VBS[ " +   2 ,
                                pause.indexOf(
" = " -   1 );
                        System.
out .println(oid);
//                         System.out.println(response);
                        m_oid  =  oid;

                    }
  else   {
                        System.
out .println( " get error: "
                                
+  response.getErrorStatusText());
                        
break ;
                    }


                }
  else   {
                    System.
out .println( " get response error " );
                    
break ;
                }

                
                
if  (m_oid.equals( " 1.3.6.1.4.1.140.625.10.1.0 " ))  {
                    
break ;
                }

            }

            System.
out .println( " ::::::: "   +  w);
            
        }
  catch  (IOException e) {
            
//  TODO Auto-generated catch block
            e.printStackTrace();
        }

        
    }

}


要特別注意ip、端口、版本號、community和配置的一致
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章