第六十五章 使用 SNMP 监控 IRIS - 用户定义的 SNMP 监视器类示例
本节介绍如何定义可通过 SNMP
查询的用户应用程序监视器类的示例。应用程序监视器仅包括 SNMP
数据中具有 %Monitor
数据类型的属性。
Example Sample Class
以下是此示例的示例类:
Class SNMP.Example Extends %Monitor.Adaptor { /// Give the application a name. This allows you to group different /// classes together under the same application level in the SNMP MIB. /// The default is the same as the Package name. Parameter APPLICATION = "MyApp"; /// This groups a set of properties together at the "table" level of the /// SNMP MIB hierarchy. The default is the Class name. Parameter GROUPNAME = "MyTable"; /// An integer metric counter Property Counter1 As %Monitor.Integer; /// Another integer metric counter Property Counter2 As %Monitor.Integer; /// A status indicator as a string data type Property Status As %Monitor.String; /// The method is REQUIRED. It is where the Application Monitor /// calls to collect data samples, which then get picked up by the /// ^SNMP server process when requested. Method GetSample() As %Status { set ..Counter1=$r(200) set ..Counter2=200+$r(100) set n=$r(4) set ..Status=$s(n=1:"Crashed",n=2:"Warning",n=3:"Error",1:"Normal") Quit $$$OK } }
在用户命名空间中编译此类之前, IRIS
必须将支持类加载到命名空间中;需要这些类来存储 SNMP
的数据样本。
要加载这些类,请运行 ^%SYSMONMGR
,如本指南“使用系统监视器”一章中使用 ^%SYSMONMGR
管理应用程序监视器中所述,并执行以下操作:
- 选择选项
2
,管理监视器类。 - 选择选项
3
,Register Monitor System Classes
。
编译示例类时,它会创建 SNMP.Sample.Example
类来存储示例数据。
重要提示:不要明确删除生成的示例类;如果同时选择删除应用监控和生成的示例类,虽然删除了监控类例程,但示例类例程仍然存在,这会导致错误。为确保正确删除所有示例类例程,只删除生成它的应用程序监视器类;当您删除监视器类时,监视器类和生成的示例类以及这两个类的相关例程都会被删除。例如,要删除示例类(例如 SNMP.Sample.Example
),请使用管理门户删除生成它的监视器类(即 SNMP.Example
)。
运行 ^%SYSMONMGR
以激活示例类并启动应用程序监视器以收集示例:
- 选择选项 2,管理监视器类。
- 选择选项 1,激活/停用监视器类。
- 要查看已注册监视器类的编号列表,请输入
?
。 - 输入要激活的监控类的数量;例如,要激活名为
SNMP.Example
的用户定义类,请在类名旁边输入数字。 - 选择选项 6,
Exit
(返回到Application Monitor
主菜单)。 - 选择选项 1,管理应用程序监视器。
- 选择选项 1,启动应用程序监视器。
- 选择选项 5,
Exit
(返回到Application Monitor
主菜单)。
- 选择选项 6,
Exit
(退出Application Monitor
主菜单)。
注意:有关配置和使用应用程序监视器的信息,请参阅本指南“使用系统监视器”一章中的应用程序监视器。
Example of Creating a User MIB
要创建 SNMP MIB,请从 %SYS
命名空间运行 MonitorTools.SNMP:CreateMIB
方法
该方法的输入参数类似于以下内容:
CreateMIB("MyApp","USER",99990,1,"mycorp","myapp","mc","MC-MYAPP","Unknown",1)
重要提示:请勿使用 99990
作为生产企业 ID
;每个组织都应向 IANA
注册自己的 ID
。
USER>set $namespace = "%SYS" %SYS>Do ##class(MonitorTools.SNMP).CreateMIB("MyApp","USER",99990,1,"mycorp", "myapp","mc","MC-MYAPP","Unknown",1) Create SNMP structure for Application - MyApp Group - MyTable Counter1 = Integer Counter2 = Integer Status = String Create MIB file for MyApp Generate table MyTable Add object Counter1 Add object Counter2 Add object Status %SYS>
这会在默认目录 (install-dir\mgr\User
) 中创建 MC-MYAPP.MIB
文件,可以将其加载到 SNMP 管理应用程序中。
注意:可能需要在系统上重新启动 SNMP
主代理和 IRIS ^SNMP
服务,然后才能识别此 MIB
。
-- -- MIB file generated for mcMyApp product. -- -- Sep 16, 2008 -- MC-MYAPP DEFINITIONS ::= BEGIN IMPORTS MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE, Counter32, Gauge32, Integer32 FROM SNMPv2-SMI DisplayString FROM SNMPv2-TC enterprises FROM RFC1155-SMI cacheSysIndex FROM ISC-IRIS; mcMyApp MODULE-IDENTITY LAST-UPDATED "200809161700Z" ORGANIZATION "mycorp" CONTACT-INFO " Unknown" DESCRIPTION "" ::= { mycorp 1 } mycorp OBJECT IDENTIFIER ::= { enterprises 16563 } myappObjects OBJECT IDENTIFIER ::= { mcMyApp 1 } -- -- Begin tables -- -- Table myappMyTable myappMyTable OBJECT-TYPE SYNTAX SEQUENCE OF myappMyTableR MAX-ACCESS not-accessible STATUS current DESCRIPTION "" ::= { myappObjects 1 } myappMyTableR OBJECT-TYPE SYNTAX myappMyTableR MAX-ACCESS not-accessible STATUS current DESCRIPTION "Conceptual row for MyTable table." INDEX { cacheSysIndex } ::= { myappMyTable 1 } myappMyTableR ::= SEQUENCE { myappCounter1 Integer32 myappCounter2 Integer32 myappStatus DisplayString } myappCounter1 OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "" ::= { myappMyTableR 1 } myappCounter2 OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "" ::= { myappMyTableR 2 } myappStatus OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "Status" ::= { myappMyTableR 3 } -- End of MyTable table myappTraps OBJECT IDENTIFIER ::= { mcMyApp 2 } ------------------------------------------------------------- END