The Secret Diary of Han, Aged 0x29

Archive for January 2006

Cycle 15 deployed and tagged

Cycle 15 deployment was completed last night.

I checked the cycle 15 code by doing a virgin checkout and build. Two projects don’t build, but both are SSM related and not deployed. Therefore the build was considered OK.

I tagged the cycle 15 branch with the following branch:


Any modifications to cycle 15 code, bugfixes, etc, should go on this branch. Cycle 16 work goes on the head.


Written by Han

January 25, 2006 at 14:49

Posted in Tools

OID mapping web service

I whipped together a simple webservice that provides access to the mapping between OIDS and classes / measurement types. Try this:




The URL has the following format





All parameters are optional. If all are omitted, all OID records are returned. The service does a reverse partial match, so that searching for a complete OID will find generic OIDs that omit the instance part. In addition, OIDs can be either numeric or symbolic.

Written by Han

January 24, 2006 at 18:13

Posted in Tools

For an Alteon SSLVPN an ifIndex is not an ifIndex

The ifTable in Mib-2 is indexed by ifIndex. ifIndex itself is also first column of the ifTable, so you would expect the values of this column to always be the same as the index in the table. And up to know this has proven true for all devices discovered. Today, however, when I tried to discover the interfaces for an Alteon SSL-VPN device for a customer, this law of nature was broken:

bash-2.05# snmpwalk -v2c -cpublic ifIndex
RFC1213-MIB::ifIndex.1 = INTEGER: 5
RFC1213-MIB::ifIndex.2 = INTEGER: 4
RFC1213-MIB::ifIndex.3 = INTEGER: 2
RFC1213-MIB::ifIndex.4 = INTEGER: 3

I had to change the discovery of interfaces from “dynamic” to “index” to cope with this. In “dynamic” it takes the value from the table column, whereas using index, it just uses the table index, which is what we want in this case.

Written by Han

January 24, 2006 at 15:49

Posted in General

Wordpress installed

I just installed WordPress on mgmt1. It’s using Apache / MySQL / PHP on a Windows 2003 server. Isn’t this sick? xampp makes it real easy though.
What remains to be done is to figure out how to support multiple blogs (one for each member) and how to import stuff from a random unsupported partially broken blogging tool

[update] Created a small utility to export all projectweb entries of a user. To support multiple blogs I simply by copied the WordPress installation to multiple directories. This has the advantage that everyone can modify their layouts independently. All reuse the same database though, to facilitate management and backup. 

Written by Han

January 23, 2006 at 18:58

Posted in General

Filtering in

2-level instance filtering was introduced in the provisioner application.

1. Generic instance filter in ClassInstanceMapping.conf. Every instance of a class that is found will always be matched against the filter, which is a regexp. Only in case of a match, or if the filter is absent, will the instance be included. This function is also available from the webinterface usinga filter=[regexp] URL parameter

2. Specific instance filter in server specification configuration file. The actual filename of this file is passed on the command line to the tool, since its contents will be different for each discovery. In this file, for a specific IP address, a filter can be set. This allows setting a filter for a specific server or device.

For example. When configuring discovery of bandwidth management, a general instance filter is used to filter out the half of the policies based on conventions for port numbers for outgoing and incoming traffic. Discovery of bandwidth for a single company can be filtered using a specific instance filter consisting of the company name.

Written by Han

January 11, 2006 at 21:13

Posted in Uncategorized

Provisioner configuration

1. <name>.conf

variable server configuration file. Name can be passed on command line. It tells the provisioner which servers or other devices should be discovered.

The file has the following format:

ip: <ip>

collgroup: <name>

pollgroup: <name>

filter: <filter text>


	- <profile1>

	- <profile2>


	- <profileN>


ip: <ip2>


Servers records are separated by lines containing —

profiles: contains a list of values. The list is specified by indenting and starting each list value with –

The filter is a regular expression. Any instances found are checked against this regex, and only included if they match

2. classesByProfiles.conf

tells the provisioner which classes are associated with each profile. If a server or device has a certain profile, then the provisioner will try to discover instances for the classes of that profile.



  - <class1>

  - <class2>


  - <classN>


  - <class1>


Each profile is followed by a list of class names. The classes are on a separate line, indented to the same level, and prepended with

a “-”

A class name can be followed by a :<agentname>:<port>. If so, discovery will use the named agent, and the specified port. This is useful for discovering instances on servers with multiple SNMP agents. For example, temperature monitoring on HP servers is specified as follows:


    - temperature:ima:2024

this means that for servers that have the profile “hp”, instances will be discovered for class temperature, using an agent named “ima” on port 2024

3. measurementTypesByClass

Tells the provisioner which measurements should be generated for each discovered instance, based on the class of that instance.



  - <measurementtype1>

  - <measurementtype2>


  - <measurementtypeN>


  - <measurementtype1>


Each class name is followed by a list of measurement types. The measurement types are on separate lines, indented to the same level, and preceded by a –

4. profilesByMeasurementType.conf

Associates profiles with each measurement type. Sometimes it is not appropriate for all measurement types that are associated with a class to be provisioned. For example, both a server and a network device have a “system” class. But a server, through the SSM agent, supports measurements like “LoadAvg1″ or “ProcessCount” that a network device usually doesn’t support.

By associating a profile with a measurement type, you can limit the measurements to be provisioned for a class to those measurements that have the same profile as the server or device. If a measurement type has no profiles, then it will be always be provisioned.



  - <profile1>

  - <profile2>


  - <profileN>


  - <profile1>


5. Other

The provisioner application makes use of the InstanceMapper library. This library reads another couple of configuration files. The most important one of these is ClassInstanceMapping.conf. This is described in the documentation for the instance mapper.


The provisioner application creates two output files. One is an xml file that can be used as input for a separate RRD creation and database record provisioning application. This app creates the necessary records for components, dependencies, and datastreams in the database. It also creates the RRD files for the graphs that are provisioned. The second file is a partial Measurements.conf configuration file for the SNMP poller. It can be appended to the existing Measurements.conf to instruct the poller to retrieve performance data for the newly provisioned graphs. Note that the poller needs a HUP signal in order to read the new configuration.

Written by Han

January 10, 2006 at 22:43

Posted in Uncategorized