weblogic中snmp的使用
一些概念:
SNMP: 简单网络管理协议,SNMP使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过 SNMP接收随机消息(及事件报告)网络管理系统获知网络出现问题。目前, SNMP 有 3 种: SNMPV1 、 SNMPV2 、 SNMPV3。第1 版和第 2 版没有太大差距,但 SNMPV2 是增强版本,包含了其它协议操作。与前两种相比, SNMPV3则包含更多安全和远程配置。为了解决不同 SNMP 版本间的不兼容问题, RFC3584 种定义了三者共存策略。
SNMP OID: SNMP ObjectIdentifiers(对象标示符),SNMP对象标识符(OID)是定义在特定MIB模式中的值,来定义一个特定的在MIB数据库中SNMP目标。SNMPOID是划界序列数字组成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 - c 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 - c 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 - c 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 - c 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和配置的一致
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com