delphi snmp 读取系统参数、SQLSERVER参数

原创 2009年06月11日 18:57:00

A要开发SNMP读取参数的模块

     a. 首先安装SNMP 协议。

         在xp系统里, 开始-->设置-->控制面板-->添加/删除WINDOWS组件-->管理监视工具 ,把里面的

         两个协议全部安装

 

     b.  安装Sqlserver(以下内容是摘抄其他网友的帖子,实在懒得写,不好意思)

       b1.安装SNMP FOR SQL SERVER
          如果你安装SQL SERVER的时候,已经安装了SNMP服务,那么SQL SERVER会自动安装SNMP的代

          理扩展。如果在执行安装程序时没有在计算机上安装 SNMP,则不会启用 SQL Server 对 SNMP 的

          支持。

          对于安装SQL SERVER时候没有安装SNMP服务的,需要手工添加扩展代理方法如下,注意区分大小

          写的匹配:

          b12. 添加扩展代理注册信息
                找到HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/SNMP/Parameter/
                ExtensionAgents新增如下字符串值:格式为:名称、类型、数值
                 REG_SZ : SOFTWARE/Microsoft/Microsoft SQL Server/SNMP/CurrentVersion
      
       b2. 安装SQL Server SNMP扩展代理程序 (Sqlsnmp.dll)
               转到HKEY_LOCAL_MACHINE/SOFTWARE
               创建主键:Microsoft/MSSQLServer/SNMP/CurrentVersion

               新增字符串值:Pathname:REG_EXPAND_SZ(注意,我第一次安装的时候就是因为没注意这

              个串值类型,导致没有安装成功。这个REG_EXPAND_SZ是“可扩充字符串值”)

              :D:/Program Files/Microsoft SQL Server/MSSQL/BINN/sqlsnmp.dll

    c.安装成功后,就可以使用SNMP了
       首先需要知道SQL SERVER的MIB,这个MIB默认放在D:/Program Files/Microsoft

        SQLServer/MSSQL/Binn/Mssql.mib
        我使用GETIF浏览MIB,那么就把Mssql.mib文件复制到Getif 2.3.1/Mibs/下改名字为
        mssql.txt。然后打开.index文件添加MSSQLSERVER-MIB mssql.txt到末尾保存。

   备注:我按照b项做没有成功,调试了很久都不行,也许是我运气差?一气之下找了台电脑,先安装SNMP协议再安装SQLSERVER,呵呵就搞定了。

 

B 我的代码

 取数据的函数,GetSnmpInfo 取一条数据, GetSnmpList取多条数据

  

 

 

  c.定时器

    我设定,每一分钟读取信息一次,然后把这些信息写到XML结构中去。

     ipList是一个TList的结构队列,其中的结构是p.ip是IP地址,p.pcType表示该pc是否装数据库。

在初始化时,使用AddIPList函数,增加所有查询的PC.

 

    d. 读取系统参数以及Sqlserver的参数

    d1.代码

 

 

 以上代码稍微有点复杂但只要明白了算法就很简单了下面讲述协议,以下是存储器类型

 d21 存储器类型 1.3.6.1.2.1.25.2.1

 

hrStorageTypes :1.3.6.1.2.1.25.2.1
hrStorageOther 1.3.6.1.2.1.25.2.1.1
hrStorageRam  1.3.6.1.2.1.25.2.1.2
hrStorageVirtualMemory 1.3.6.1.2.1.25.2.1.3
hrStorageFixedDisk 1.3.6.1.2.1.25.2.1.4
hrStorageRemovableDisk 1.3.6.1.2.1.25.2.1.5
hrStorageFloppyDisk 1.3.6.1.2.1.25.2.1.6
hrStorageCompactDisc 1.3.6.1.2.1.25.2.1.7
hrStorageRamDisk 1.3.6.1.2.1.25.2.1.8

hrStorageRam 表示内存, hrStorageFixedDisk 表示硬盘, hrStorageVirtualMemory 表示虚拟内存, hrStorageCompactDisc 表示光盘 ,用工具软件查看1.3.6.1.2.1.25.2.1 ,就会得到上面的数据。

 

d22  区分各个磁盘/分区的类型 1.3.6.1.2.1.25.2.3.1.2

 

1.3.6.1.2.1.25.2.3.1.2.1 = hrStorageFixedDisk //硬盘
1.3.6.1.2.1.25.2.3.1.2.2 = hrStorageFixedDisk //硬盘
1.3.6.1.2.1.25.2.3.1.2.3 = hrStorageFixedDisk //硬盘
1.3.6.1.2.1.25.2.3.1.2.4 = hrStorageFixedDisk //硬盘
1.3.6.1.2.1.25.2.3.1.2.5 = hrStorageCompactDisc //光盘
1.3.6.1.2.1.25.2.3.1.2.6 = hrStorageCompactDisc //光盘
1.3.6.1.2.1.25.2.3.1.2.7 = hrStorageVirtualMemory//虚拟内存
1.3.6.1.2.1.25.2.3.1.2.8 = hrStorageRam //物理内存

 

 

通过以上描述可以知道你有几个硬盘、光盘等,那个区是什么类型的存储介质

 

d23  分区名称  1.3.6.1.2.1.25.2.3.1.3


1.3.6.1.2.1.25.2.3.1.3.1 = "C:/ Label: Serial Number dc26ea33" [Octets]
1.3.6.1.2.1.25.2.3.1.3.2 = "D:/ Label:test Serial Number 9629f314" [Octets]
1.3.6.1.2.1.25.2.3.1.3.3 = "E:/ Label:test_backup Serial Number 94389268" [Octets]
1.3.6.1.2.1.25.2.3.1.3.4 = "F:/ Label:others Serial Number 5c4002e8" [Octets]
1.3.6.1.2.1.25.2.3.1.3.5 = "G:/" [Octets]
1.3.6.1.2.1.25.2.3.1.3.6 = "H:/ Label:Oracle10g Serial Number b1c04dbe" [Octets]
1.3.6.1.2.1.25.2.3.1.3.7 = "Virtual Memory" [Octets]
1.3.6.1.2.1.25.2.3.1.3.8 = "Physical Memory" [Octets]

 

通过以上描述你可以知道具体的每个分区或者光盘、软盘、内存的名称或描述

 

d24   每个分区块的容量 1.3.6.1.2.1.25.2.3.1.4


1.3.6.1.2.1.25.2.3.1.4.1 = 512 [Integer]
1.3.6.1.2.1.25.2.3.1.4.2 = 4096 [Integer]
1.3.6.1.2.1.25.2.3.1.4.3 = 4096 [Integer]
1.3.6.1.2.1.25.2.3.1.4.4 = 4096 [Integer]
1.3.6.1.2.1.25.2.3.1.4.5 = 0 [Integer]
1.3.6.1.2.1.25.2.3.1.4.6 = 2048 [Integer]
1.3.6.1.2.1.25.2.3.1.4.7 = 65536 [Integer]
1.3.6.1.2.1.25.2.3.1.4.8 = 65536 [Integer]

从上面可以分析出 C盘有可能是FAT格式,它的块容量只有 512,其他区是4096

 

d25  各个分区有多少块个数  1.3.6.1.2.1.25.2.3.1.5

1.3.6.1.2.1.25.2.3.1.5.1 = 25157789 [Integer]
1.3.6.1.2.1.25.2.3.1.5.2 = 2815383 [Integer]
1.3.6.1.2.1.25.2.3.1.5.3 = 4096567 [Integer]
1.3.6.1.2.1.25.2.3.1.5.4 = 11006525 [Integer]
1.3.6.1.2.1.25.2.3.1.5.5 = 0 [Integer]
1.3.6.1.2.1.25.2.3.1.5.6 = 317298 [Integer]
1.3.6.1.2.1.25.2.3.1.5.7 = 63101 [Integer]
1.3.6.1.2.1.25.2.3.1.5.8 = 32754 [Integer]

 

d26 各个分区使用了多少块 1.3.6.1.2.1.25.2.3.1.6


1.3.6.1.2.1.25.2.3.1.6.1 = 7427924 [Integer]
1.3.6.1.2.1.25.2.3.1.6.2 = 861039 [Integer]
1.3.6.1.2.1.25.2.3.1.6.3 = 16820 [Integer]
1.3.6.1.2.1.25.2.3.1.6.4 = 5788717 [Integer]
1.3.6.1.2.1.25.2.3.1.6.5 = 0 [Integer]
1.3.6.1.2.1.25.2.3.1.6.6 = 317298 [Integer]
1.3.6.1.2.1.25.2.3.1.6.7 = 12172 [Integer]
1.3.6.1.2.1.25.2.3.1.6.8 = 13270 [Integer]

 

d27 各个分区分配失败的块  1.3.6.1.2.1.25.2.3.1.7

1.3.6.1.2.1.25.2.3.1.7.1 = 0 [Counter32]
1.3.6.1.2.1.25.2.3.1.7.2 = 0 [Counter32]
1.3.6.1.2.1.25.2.3.1.7.3 = 0 [Counter32]
1.3.6.1.2.1.25.2.3.1.7.4 = 0 [Counter32]
1.3.6.1.2.1.25.2.3.1.7.5 = 0 [Counter32]
1.3.6.1.2.1.25.2.3.1.7.6 = 0 [Counter32]
1.3.6.1.2.1.25.2.3.1.7.7 = 0 [Counter32]
1.3.6.1.2.1.25.2.3.1.7.8 = 0 [Counter32]

 

 

在这个例子中
可以看到的盘符是C: D: E: F:; 同时可以得到虚拟内存信息,物理内存的信息
C: 盘大小为512× 25157789= 12880787968bytes or 12GB
C: 盘以用空间512×7427924= 3803097088bytes or 3.54GB
C:盘使用率为3.54/12*100% = 29.5%
C: 盘空间分配错误512×0 = 0 bytes

硬盘总的大小为512*25157789 + 4096*2815383 + 4096*4096567+ 4096*11006525 =  80G
磁盘使用大小为512*7427924 + 4096*861039 + 4096*16820 + 4096*5788717 = 29G
整个硬盘的使用率 29/80 *100% = 36.2%

物理内存

Total RAM 65536*32754 = 2096256 KB, 2047.125M about 2G 这个数字和

1.3.6.1.2.1.25.2.2.0结果差不多

Used RAM 65536*13270 = 829M
内存使用率 829/2048 * 100% = 40.4%

看了这个例子,再看我的代码,是否觉得就明白了?

 

下面是我的用XML导出的结果

 

 

  <?xml version="1.0" encoding="GB2312" ?>
- <root>
  <PcCount>1</PcCount>
- <PC0>
  <IP>192.168.2.225</IP>
  <pcType>1</pcType>
  <PcName>ZXB</PcName>
  <CpuUsePer>9</CpuUsePer>
  <MemorySize>2.1</MemorySize>
- <Disk>
  <CDiskSize>24.4</CDiskSize>
  <DDiskSize>73.4</DDiskSize>
  <EDiskSize>122.5</EDiskSize>
  <FDiskSize>77.8</FDiskSize>
  <CDiskUseSize>10.4</CDiskUseSize>
  <DDiskUseSize>13.3</DDiskUseSize>
  <EDiskUseSize>46.8</EDiskUseSize>
  <FDiskUseSize>0.7</FDiskUseSize>
  </Disk>
- <SqlServer>
  <ServerName>ZXB</ServerName>
  <ServerVision>8.00.194</ServerVision>
  <ServerStatus>Start</ServerStatus>
  <ServerLastStartTime>2009-06-11 10:13:23.123</ServerLastStartTime>
  <DBName>sfems</DBName>
  <DBCreateTime>06 3 2009</DBCreateTime>
  <DBInfoOwner>ZXB/Administrator</DBInfoOwner>
  <DBInfoSize>26440</DBInfoSize>
  <DBUnAlllocatedSpace>0</DBUnAlllocatedSpace>
  <DBReservedSpace>27928</DBReservedSpace>
  </SqlServer>
  </PC0>
  </root>

 

 

 


 

 

 

 

 

 

 

 

        

      

    

     

 

 

    a.  GetSnmpInfo  返回一条记录

    b.  GetSnmpList  返回多条记录

相关文章推荐

IDSNMP 的详细说明

SNMP简介SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进行管理。随后,人们对SGMP进行了很...
  • xjwy
  • xjwy
  • 2009年07月12日 22:19
  • 1448

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi中的线程类 [转帖,写的很详细值得一看]

转贴于 华夏黑客同盟 http://www.77169.org Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几...
  • xjwy
  • xjwy
  • 2009年07月06日 10:56
  • 437

最近要写 发短信的代码,哈哈一点心得,大家共享

1 以前以为只要掌握网管的api就可以免费收发短信了,实际是不可能的,不管是电信的小灵通还是移动 联通,接口都好找(api),但是你想过没 ,你的代码如果不放到电信或移动的网络中心 给你分配权限,你的...
  • xjwy
  • xjwy
  • 2007年04月10日 10:14
  • 4236

android读取系统参数工程

  • 2017年10月09日 09:40
  • 1.81MB
  • 下载

SNMP配置:view配置中mask参数的详解

在SNMP中,可以通过配置view来起到对某些subtree访问的控制,view的配置格式如下 #    name           incl/excl   subtree           ma...

SqlServer参数化查询与存储过程

突然把参数化查询和存储过程联系到一起了,大家如果不知道的话,一起来看看吧。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:delphi snmp 读取系统参数、SQLSERVER参数
举报原因:
原因补充:

(最多只允许输入30个字)