注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

涅槃

文档收藏

 
 
 

日志

 
 
 
 

系统管理员工具: 如何使用 SNMP 数据--源自IBM  

2013-05-20 13:53:40|  分类: 监控_cacti |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
系统管理员工具包: 使用 SNMP 数据
源文来自:
http://www.ibm.com/developerworks/cn/aix/library/au-satsnmp/

许多设备内置了简单网络管理协议(Simple Network Management Protocol,SNMP),但是当您只想检查某个简单统计数据或者跟踪某个特定设备或问题时,能够读取和分析该信息的工具和软件通常太大和太复杂了。本文研究一些用于从设备中获取 SNMP 信息的简化方法,以及如何将该信息集成到网络数据映射的其他部分中。

摘要平时有用的部分如下

例如,清单 1 显示了一些较常见的 ID。


清单 1. SNMP 对象 ID
                

sysDescr.0      1.3.6.1.2.1.1.1.0
sysObjectId.0   1.3.6.1.2.1.1.2.0
sysUpTime.0     1.3.6.1.2.1.1.3.0
sysContact.0    1.3.6.1.2.1.1.4.0
sysName.0       1.3.6.1.2.1.1.5.0
sysLocation.0   1.3.6.1.2.1.1.6.0
sysServices.0   1.3.6.1.2.1.1.7.0
ifNumber.0      1.3.6.1.2.1.2.1.0


清单 2. “遍历” SNMP 树
                

$ snmpwalk -Os -c MCSLP -v 1 localhost system
sysDescr.0 = STRING: Linux tweedledum 2.6.23-gentoo-r8 
             #1 SMP Tue Feb 12 16:32:14 GMT 2008 x86_64
sysObjectID.0 = OID: netSnmpAgentOIDs.10
sysUpTimeInstance = Timeticks: (34145553) 3 days, 22:50:55.53
sysContact.0 = STRING: root@Unknown
sysName.0 = STRING: tweedledum
sysLocation.0 = STRING: serverroom
sysORLastChange.0 = Timeticks: (0) 0:00:00.00
sysORID.1 = OID: snmpFrameworkMIBCompliance
sysORID.2 = OID: snmpMPDCompliance
sysORID.3 = OID: usmMIBCompliance
sysORID.4 = OID: snmpMIB
sysORID.5 = OID: tcpMIB
sysORID.6 = OID: ip
sysORID.7 = OID: udpMIB
sysORID.8 = OID: vacmBasicGroup
sysORDescr.1 = STRING: The SNMP Management Architecture MIB.
sysORDescr.2 = STRING: The MIB for Message Processing and Dispatching.
sysORDescr.3 = STRING: The management information definitions for 
                                    the SNMP User-based Security Model.
sysORDescr.4 = STRING: The MIB module for SNMPv2 entities
sysORDescr.5 = STRING: The MIB module for managing TCP implementations
sysORDescr.6 = STRING: The MIB module for managing IP and ICMP implementations
sysORDescr.7 = STRING: The MIB module for managing UDP implementations
sysORDescr.8 = STRING: View-based Access Control Model for SNMP.
sysORUpTime.1 = Timeticks: (0) 0:00:00.00
sysORUpTime.2 = Timeticks: (0) 0:00:00.00
sysORUpTime.3 = Timeticks: (0) 0:00:00.00
sysORUpTime.4 = Timeticks: (0) 0:00:00.00
sysORUpTime.5 = Timeticks: (0) 0:00:00.00
sysORUpTime.6 = Timeticks: (0) 0:00:00.00
sysORUpTime.7 = Timeticks: (0) 0:00:00.00
sysORUpTime.8 = Timeticks: (0) 0:00:00.00


清单 3. 简化的信息
                

$ snmpstatus -v1 -c public t1000
[192.168.0.26]=>[SunOS t1000 5.11 snv_81 sun4v] Up: 2:12:10.20
Interfaces: 4, Recv/Trans packets: 643/160 | IP: 456/60
2 interfaces are down!


清单 4. 获取系统描述和正常运行时间
                

$ snmpget -v1 -c public t1000 system.sysUpTime.0 system.sysContact.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (867411) 2:24:34.11
SNMPv2-MIB::sysContact.0 = STRING: "System administrator"



清单 5. 使用 Perl 和 Net::SNMP 获得单个 SNMP 代理属性 

                
#! /usr/local/bin/perl

use strict;

use Net::SNMP;

my $uptimeOID = '1.3.6.1.2.1.1.3.0';

foreach my $host (@ARGV)
{
    my ($session, $error) = Net::SNMP->session(
        -hostname  =>  $host,
        -community => 'public',
        -port      => 161
        );

    warn ("ERROR for $host: $error\n") unless (defined($session));

    my $result = $session->get_request(
        -varbindlist => [$uptimeOID]
        );

    if (!defined($result))
    {
        warn ("ERROR: " . $session->error . "\n");
    }
    else
    {
        printf("Uptime for %s: %s\n",$host, $result->{$uptimeOID});
    }

    $session->close;
}


清单 6. 每个主机的正常运行时间列表
                

$ perl uptime.pl tweedledum t1000
Uptime for tweedledum: 4 minutes, 52.52
Uptime for t1000: 6 minutes, 26.12


清单 7. 获取 SNMP 属性的累计视图
                

#! /usr/local/bin/perl

use strict;
use warnings;
use Net::SNMP qw(snmp_dispatcher);

my $diskspaceOID = '1.3.6.1.4.1.2021.9.1.7.1';

foreach my $host (@ARGV)
{
    my ($session, $error) = Net::SNMP->session(
        -hostname    => $host,
        -nonblocking => 0x1,
        );

    if (!defined($session))
    {
        warn "ERROR: $host produced $error - not monitoring\n"
    }
    else
    {
        my ($last_poll) = (0);

        $session->get_request(
            -varbindlist => [$diskspaceOID],
            -callback    => [
                 \&diskspace_cb, \$last_poll
            ]
            );
    }
}

snmp_dispatcher();

exit 0;

sub diskspace_cb
{
    my ($session, $last_poll) = @_;

    if (!defined($session->var_bind_list))
    {
        printf("%-15s  ERROR: %s\n", $session->hostname, $session->error);
    }
    else
    {
        my $space = $session->var_bind_list->{$diskspaceOID};

        if ($space < ${$last_poll})
        {
            my $diff = ((${$last_poll}-$space)/${$last_poll})*100;
            printf("WARNING: %s has lost %0.2f%% diskspace)\n",
                   $session->hostname,$diff);
        }

        printf("%-15s  Ok (%s)\n",
               $session->hostname,
               $space
               );

        ${$last_poll} = $space;
    }

    $session->get_request(
        -delay       => 60,
        -varbindlist => [$diskspaceOID]
        );
}


清单 8. 获取可用 MIB 数据的转储
                

$ snmpwalk -v 1 localhost -c public UCD-SNMP-MIB::dskTable
UCD-SNMP-MIB::dskIndex.1 = INTEGER: 1
UCD-SNMP-MIB::dskPath.1 = STRING: /
UCD-SNMP-MIB::dskDevice.1 = STRING: /dev/sda3
UCD-SNMP-MIB::dskMinimum.1 = INTEGER: 100000
UCD-SNMP-MIB::dskMinPercent.1 = INTEGER: -1
UCD-SNMP-MIB::dskTotal.1 = INTEGER: 72793272
UCD-SNMP-MIB::dskAvail.1 = INTEGER: 62024000
UCD-SNMP-MIB::dskUsed.1 = INTEGER: 7071512
UCD-SNMP-MIB::dskPercent.1 = INTEGER: 10
UCD-SNMP-MIB::dskPercentNode.1 = INTEGER: 3
UCD-SNMP-MIB::dskErrorFlag.1 = INTEGER: noError(0)
UCD-SNMP-MIB::dskErrorMsg.1 = STRING:

清单 9. 使用 snmptranslate 
                

$ snmptranslate -On UCD-SNMP-MIB::dskAvail 
.1.3.6.1.4.1.2021.9.1.7

清单 10. 自动监视磁盘空间
                

$ perl diskspace-auto.pl tweedledum
tweedledum       Ok (50319024)
WARNING: tweedledum has lost 2.67% diskspace)
tweedledum       Ok (48976392)
WARNING: tweedledum has lost 1.65% diskspace)
tweedledum       Ok (48166292)
tweedledum       Ok (48166292)
tweedledum       Ok (48166292)
tweedledum       Ok (48166292)

清单 11. 示例 snmpd.conf 文件
                

syslocation  serverroom
proc  imapd 20 10
disk  / 100000
load  5 10 10


中文原文:http://www.ibm.com/developerworks/cn/aix/library/au-satsnmp/
英文原文:http://www-128.ibm.com/developerworks/aix/library/au-satsnmp/?S_TACT=105AGX52&S_CMP=content













分类: Net-snmp2011-01-07 11:57 1549人阅读 评论(0) 收藏 举报

参考官方说明http://www.net-snmp.org/docs/man/snmpd.conf.html

 

snmpd.conf用来配置代理和管理端通信时的参数

该文件中用到了4条指令:com2sec, group, view, access

 

1. com2sec

    命令格式一:com2sec   [-Cn context]   sec.name   source   community

    功能: map an SNMPv1 or SNMPv2c community string to a security name,即将实体(community)字符串映射为安全的

              名字,v1 和v2版本都是明文密码,也就无所谓安全性了。v3中增加了安全性。

    参数说明:-Cn context:可选的,在v3版本中使用

                   sec.name: 内部映射的名字,字符串,后面用到

                   community:实体字符串,外部使用的名字

                   source:可以访问的ip地址范围,默认值"default”,即任何ip都可以访问。

                                 也可以限制ip范围,有两种方式:IP/MASK和IP/BITS

                                  IP/MASK:10.10.10.0/255.255.255.0

                                  IP/BITS :10.10.10.0/24:只有ip地址在10.10.10.0

                                                                          mask为24个1,即255.255.255.0

     命令格式二:com2sec6  [-Cn context] sec.name source community

                        针对ipv6,其他和com2sec相同

     命令格式三:com2secunix [-Cn context] sec.name sockpath community

                       只限本地socket可以访问

 

2. group

    命令格式:group   groupName   securityModel   sec.name

    功能:将sec.name映射到一个group中,组中具有相同的存取权限。组中至少有两个

             sec.name,如果只有一个sec.name,也会被解释为两个。即有两个相同的

    参数说明:groupName:组名

                   securityModel:v1、v2c、usm、tsm、ksm其一

 

3. view

    命令格式:view viewName type oid[mask]

    功能:定义一个view,表示整个OID树的子树,同一个子树可以定义多个view

    参数说明:viewName:view名字

                   type:有两个值:include 和 exclude

                   oid:可以访问的oid

                   [mask]:对oid的mask

                   例如:view all include 1.3.6.1.2.1.4  0xf0

                   0xf0:1111 0000,即访问的oid的前4位必须是1.3.6.1,否则不能访问,即

                   可以访问1.3.6.1下所有的子oid

4. access

     命令格式:access groupName context model level prefx read write notify

     功能:设置访问某一个view的存取权限

     参数说明:groupName:控制存取权限的组名

                    context:v1和v2c版本,context必须设置为""

                    model:v1、v2c、usm、tsm、ksm

                                 最后3中是v3版本的授权模式,usm(User-Based Security

                                 Model)是默认授权模式,tsm用于SSH or DTLS,ksm用于支持

                                  Kerberos

                    level:可以去3种值:noauth、auth、priv

                               noauth:允许无权限访问(v1,v2c使用)

                               auth:必须有权限才能访问

                               priv:强制加密访问

                   prefx:exact or prefix

                   read、write、notify:指明某一个view的权限是否可以GET*, SET*、

                                                   TRAP/INFORM,如果该view不能read,则置none

  评论这张
 
阅读(678)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018