WEBLOGIC 10启用SNMP
Weblogic要启用 SNMP 服务,请执行下列操作:
1.在管理控制台的"域结构"中,展开"诊断",然后选择"SNMP"。
2.在"SNMP 代理概要"页中,选择"域作用域 SNMP 代理"表中默认已经创建的 SNMP 代理,此代理名称跟 weblogic 的域名一致。
3.在"SNMP 代理概要"页的"域 SNMP 代理"表中,单击 SNMP 代理的名称。
4.在"SNMP 代理: 配置: 常规"页上,对默认值做如下更改:
a.选中"已启用"框。
b.在"SNMP UDP 端口"字段中,输入希望 SNMP 代理监听来自 SNMP 管理器的请求的端口号。按照本行规定,Weblogic SNMP UDP端口应配置为:16188;主要AgentX 端口应该配置为:11705
c.选中“已启用基于社区的访问”框。 在“社区前缀”字段中,输入 SNMP 管理器在将请求发送到 WebLogic SNMP 代理时必须指定的 SNMP 社区(密码)。根据本行规定,社区名为:hrwang,陷阱版本为:V2,如下图所示:
5.单击“保存”。
6.要激活这些更改,请在管理控制台的更改中心中单击“激活更改”SNMP 代理服务就启用。
7.检查Weblogic 的 snmp 是否已经成功启用,主要可以在 weblogic 安装机上,使用“netstat –an|grep 16188 ”命令检查 16188 端口是否已经打开。
Weblogic要启用 SNMP 服务,请执行下列操作:
1.在管理控制台的"域结构"中,展开"诊断",然后选择"SNMP"。
2.在"SNMP 代理概要"页中,选择"域作用域 SNMP 代理"表中默认已经创建的 SNMP 代理,此代理名称跟 weblogic 的域名一致。
3.在"SNMP 代理概要"页的"域 SNMP 代理"表中,单击 SNMP 代理的名称。
4.在"SNMP 代理: 配置: 常规"页上,对默认值做如下更改:
5.单击“保存”。
6.要激活这些更改,请在管理控制台的更改中心中单击“激活更改”SNMP 代理服务就启用。
7.检查Weblogic 的 snmp 是否已经成功启用,主要可以在 weblogic 安装机上,使用“netstat –an|grep 16188 ”命令检查 16188 端口是否已经打开。
一些概念:
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来获得堆栈、内存等使用信息了
在Services/SNMP下:
在weblogic中提供了1万多的oid可以给第三方软件使用,我们也可以使用unix自带的snmpwalk命令去取得各个oid的值,以下列出几个例子:
要特别注意ip、端口、版本号、community和配置的一致
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 树中的对象的位置,并指定通过树到达此对象的唯一路径。此路径中的每个节点均有一个编号和一个与编号关联的名称。
管理信息库(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来获得堆栈、内存等使用信息了
在Services/SNMP下:
在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
snmpwalk
#host
snmpwalk
#The
snmpwalk
#The
snmpwalk
其中第二个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.DefaultUdpTransportMappi ng;
public
class
test1
{
public static void main(String[] args)
{
try{
Snmp snmp = new Snmp(new DefaultUdpTransportMappi ng());
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();
}
}
}
import
import
import
import
import
import
import
import
import
import
import
import
public
//
//
//
}
要特别注意ip、端口、版本号、community和配置的一致
★ 需求
服务器运行了weblogic和apache,可是有时weblogic进程会莫名crash,业务都在这上面,所以需要能监控程序的运行。我在服务器端写了一个脚本,使用curl检测这两个服务的状态,返回一个数字来确定是哪个服务down了,然后远程通过cacti采集数据画图。
★ 解决方法
snmp提供了发送自定义信息的功能。查看snmpd.conf会看到有一个小节是关于外部脚本的,Executables/scripts。这个小节里面也举了例子,告诉你怎么通过snmp发送信息。我的做法如下(下面假定你已经配置好了snmp,通过cacti已经能采集到信息了)。
在任意位置添加一行:
exec .1.3.6.1.4.1.2021.51 wlsapache /root/wlsapache status
其中wlsapache是命令的名称,后面是命令以及参数。命令的名称可以随便起。脚本执行的结果类似下面:
# ./wlsapache status
3
ALL ok.
我这个脚本的“ALL ok”其实是副产品,对于采集数据没有用。
重启snmpd,然后远程通过snmpwalk接收一下数据看看:
# snmpwalk -v 1 192.168.1.201 -c public .1.3.6.1.4.1.2021.51
UCD-SNMP-MIB::ucdavis.51.1.1 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.51.2.1 = STRING: “wlsapache”
UCD-SNMP-MIB::ucdavis.51.3.1 = STRING: “/root/wlsapache status”
UCD-SNMP-MIB::ucdavis.51.100.1 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.51.101.1 = STRING: “3″
UCD-SNMP-MIB::ucdavis.51.101.2 = STRING: “ALL ok.”
UCD-SNMP-MIB::ucdavis.51.102.1 = INTEGER: 0
其中我们需要的是UCD-SNMP-MIB::ucdavis.51.101.1 = STRING: “3″这一行:
# snmpwalk -v 1 192.168.1.201 -c public .1.3.6.1.4.1.2021.51.101.1
UCD-SNMP-MIB::ucdavis.51.101.1 = STRING: “3″
能采集到数据之后,就可以配置cacti来接收了。在cacti界面中console->Templates->Data Templates,然后点击右上角的Add,Data Templates中的name是给这个数据模板的命名,Data Source中的name将来显示在Data Sources中,我这里添加“|host_description| - Network - wlsapache”,选get snmp data,Internal Data Source Name也可以随便添,这个用来给rrd文件命名。设置完后就可以save了,save之后会发现下面多了一些选项,在最下面那个添上我们需要的数据的OID“.1.3.6.1.4.1.2021.51.101.1”,可以保存了。
此后需要创建一个Graph Templates,好让cacti生成图片。在cacti界面中console->Templates->Graph Templates,然后点击右上角的Add,Templates中的name是给这个数据模板的命名,Graph Template中的name是将来显示在图片上面中间的内容,我这里添加“|host_description| - wlsapache status”,其他保持默认,保存之后上面会出来一些选项。
在Graph Template Items中添加一个item,Data Source选之前添加的,color选择一个图片的颜色,Graph Item Type选AREA,也就是区域,也可以选其他的线条,Text Format设置说明。然后再添加一个,Graph Item Type选GPRINT,Consolidation Function选LAST,也就是当前的值,Text Format输入current。你还可以添加一些Graph Item Type为COMMENT的注释说明等。
现在只要为host添加这个画图模板就可以看到画出来的图了。
服务器运行了weblogic和apache,可是有时weblogic进程会莫名crash,业务都在这上面,所以需要能监控程序的运行。我在服务器端写了一个脚本,使用curl检测这两个服务的状态,返回一个数字来确定是哪个服务down了,然后远程通过cacti采集数据画图。
★ 解决方法
snmp提供了发送自定义信息的功能。查看snmpd.conf会看到有一个小节是关于外部脚本的,Executables/scripts。这个小节里面也举了例子,告诉你怎么通过snmp发送信息。我的做法如下(下面假定你已经配置好了snmp,通过cacti已经能采集到信息了)。
在任意位置添加一行:
exec .1.3.6.1.4.1.2021.51 wlsapache /root/wlsapache status
其中wlsapache是命令的名称,后面是命令以及参数。命令的名称可以随便起。脚本执行的结果类似下面:
# ./wlsapache status
3
ALL ok.
我这个脚本的“ALL ok”其实是副产品,对于采集数据没有用。
重启snmpd,然后远程通过snmpwalk接收一下数据看看:
# snmpwalk -v 1 192.168.1.201 -c public .1.3.6.1.4.1.2021.51
UCD-SNMP-MIB::ucdavis.51.1.1 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.51.2.1 = STRING: “wlsapache”
UCD-SNMP-MIB::ucdavis.51.3.1 = STRING: “/root/wlsapache status”
UCD-SNMP-MIB::ucdavis.51.100.1 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.51.101.1 = STRING: “3″
UCD-SNMP-MIB::ucdavis.51.101.2 = STRING: “ALL ok.”
UCD-SNMP-MIB::ucdavis.51.102.1 = INTEGER: 0
其中我们需要的是UCD-SNMP-MIB::ucdavis.51.101.1 = STRING: “3″这一行:
# snmpwalk -v 1 192.168.1.201 -c public .1.3.6.1.4.1.2021.51.101.1
UCD-SNMP-MIB::ucdavis.51.101.1 = STRING: “3″
能采集到数据之后,就可以配置cacti来接收了。在cacti界面中console->Templates->Data Templates,然后点击右上角的Add,Data Templates中的name是给这个数据模板的命名,Data Source中的name将来显示在Data Sources中,我这里添加“|host_description| - Network - wlsapache”,选get snmp data,Internal Data Source Name也可以随便添,这个用来给rrd文件命名。设置完后就可以save了,save之后会发现下面多了一些选项,在最下面那个添上我们需要的数据的OID“.1.3.6.1.4.1.2021.51.101.1”,可以保存了。
此后需要创建一个Graph Templates,好让cacti生成图片。在cacti界面中console->Templates->Graph Templates,然后点击右上角的Add,Templates中的name是给这个数据模板的命名,Graph Template中的name是将来显示在图片上面中间的内容,我这里添加“|host_description| - wlsapache status”,其他保持默认,保存之后上面会出来一些选项。
在Graph Template Items中添加一个item,Data Source选之前添加的,color选择一个图片的颜色,Graph Item Type选AREA,也就是区域,也可以选其他的线条,Text Format设置说明。然后再添加一个,Graph Item Type选GPRINT,Consolidation Function选LAST,也就是当前的值,Text Format输入current。你还可以添加一些Graph Item Type为COMMENT的注释说明等。
现在只要为host添加这个画图模板就可以看到画出来的图了。