Skip to main content

Overview

NMIS provides organizational configuration for:
  • Locations - Physical site definitions with geocoding
  • Contacts - Notification recipients and schedules
  • Business Services - Service-level tracking and priorities
  • Escalation Policies - Tiered notification rules

Locations

Locations.nmis

Define physical sites where equipment is located. From Locations.nmis:30:
%hash = (
  'default' => {
    'Location' => 'default',
    'Address1' => '',
    'Address2' => '',
    'City' => '',
    'State' => '',
    'Country' => '',
    'Postcode' => '',
    'Geocode' => 'Brisbane, Australia',
    'Latitude' => '-27.44979',
    'Longitude' => '152.929688'
  }
);

Location Properties

  • Location - Unique location identifier
  • Address1/Address2 - Street address lines
  • City - City name
  • State - State/province
  • Country - Country name
  • Postcode - ZIP/postal code
  • Suburb - Suburb/neighborhood
  • Floor - Building floor
  • Room - Room number
  • Geocode - Human-readable location
  • Latitude - GPS latitude coordinate
  • Longitude - GPS longitude coordinate

Location Examples

From Locations.nmis:46:

Data Center Location

'DataCenter' => {
  'Location' => 'DataCenter',
  'Address1' => '123 Server Drive',
  'City' => 'Lenoir',
  'State' => 'NC',
  'Country' => 'USA',
  'Postcode' => '28645',
  'Geocode' => 'Lenoir, NC',
  'Latitude' => '35.914635',
  'Longitude' => '-81.526108'
}

Head Office Location

'HeadOffice' => {
  'Location' => 'HeadOffice',
  'City' => 'Charlotte',
  'State' => 'NC',
  'Geocode' => 'Charlotte, NC',
  'Latitude' => '35.215215',
  'Longitude' => '-80.840213'
}

Cloud Location

'Cloud' => {
  'Location' => 'Cloud',
  'Geocode' => 'St Louis, Missouri',
  'Latitude' => '38.612469',
  'Longitude' => '-90.198830'
}

Using Locations

Assign locations to nodes:
/usr/local/nmis9/admin/node_admin.pl \
  act=set \
  node=router1 \
  entry.configuration.location=DataCenter

Location Mapping

Locations enable:
  • Geographic map views - Visual node placement
  • Location-based reports - Site-specific metrics
  • Proximity analysis - Nearby device grouping

Contacts

Contacts.nmis

Define notification recipients for events and alerts. From Contacts.nmis:1:
%hash = (
  'contact1' => {
    'Contact' => 'Contact1',
    'Email' => 'nobody@localhost',
    'Mobile' => '5555551234',
    'Phone' => '',
    'Pager' => '',
    'DutyTime' => '06:20:MonTueWedThuFri',
    'TimeZone' => '0',
    'Level' => '(Fatal|Critical|Major|Minor|Warning|Normal)',
    'Location' => 'default'
  }
);

Contact Properties

  • Contact - Unique contact identifier
  • Email - Email address for notifications
  • Mobile - Mobile phone number
  • Phone - Office phone number
  • Pager - Pager number (if used)
  • DutyTime - When contact is available
  • TimeZone - Timezone offset (hours from GMT)
  • Level - Event severity levels to receive
  • Location - Associated location

Duty Time Format

From Contacts.nmis:5:
'DutyTime' => '06:20:MonTueWedThuFri'
Format: StartHour:EndHour:DayList Examples:
  • 06:18:MonTueWedThuFri - Weekdays 6am-6pm
  • 00:24:MonTueWedThuFriSatSun - 24/7 all week
  • 08:17:MonTueWed - Mon-Wed 8am-5pm
  • 18:06:SatSun - Weekends 6pm-6am (night shift)

Event Level Filtering

From Contacts.nmis:6:
'Level' => '(Fatal|Critical|Major|Minor|Warning|Normal)'
Receive only matching severities:
  • (Fatal|Critical) - Critical events only
  • (Major|Minor|Warning) - Medium severity
  • (Warning|Normal) - Informational
  • (Fatal|Critical|Major|Minor|Warning|Normal) - All events

Contact Examples

Operations Team

'ops_team' => {
  'Contact' => 'ops_team',
  'Email' => '[email protected]',
  'Mobile' => '5551234567',
  'DutyTime' => '00:24:MonTueWedThuFriSatSun',  # 24/7
  'TimeZone' => '0',
  'Level' => '(Fatal|Critical|Major)',
  'Location' => 'default'
}

Business Hours Contact

'business_hours' => {
  'Contact' => 'business_hours',
  'Email' => '[email protected]',
  'DutyTime' => '08:17:MonTueWedThuFri',  # 8am-5pm weekdays
  'TimeZone' => '-5',  # EST
  'Level' => '(Minor|Warning)',
  'Location' => 'HeadOffice'
}

On-Call Engineer

'oncall' => {
  'Contact' => 'oncall',
  'Email' => '[email protected]',
  'Mobile' => '5559876543',
  'DutyTime' => '17:09:MonTueWedThuFri',  # After hours
  'TimeZone' => '0',
  'Level' => '(Fatal|Critical)',
  'Location' => 'default'
}

Business Services

BusinessServices.nmis

Define business-critical services for tracking and prioritization. From BusinessServices.nmis:35:
%hash = (
  'Core Network' => {
    'businessService' => 'Core Network',
    'businessUnit' => 'Shared',
    'serviceType' => 'Revenue Generating',
    'businessPriority' => '10'
  }
);

Business Service Properties

  • businessService - Service name (unique identifier)
  • businessUnit - Owning business unit/department
  • serviceType - Service classification
  • businessPriority - Priority level (1-10, 10=highest)

Service Types

Common classifications:
  • Revenue Generating - Direct revenue impact
  • Business Critical - Essential operations
  • Business Supporting - Support functions
  • Non-Critical - Low impact services

Service Examples

From BusinessServices.nmis:

E-Commerce Service

'eCommerce' => {
  'businessService' => 'eCommerce',
  'businessUnit' => 'Sales',
  'serviceType' => 'Revenue Generating',
  'businessPriority' => '10'
}

Email Service

'eMail' => {
  'businessService' => 'eMail',
  'businessUnit' => 'Shared',
  'serviceType' => 'Business Critical',
  'businessPriority' => '6'
}

Web Page Service

'Web Page' => {
  'businessService' => 'Web Page',
  'businessUnit' => 'Marketing',
  'serviceType' => 'Business Critical',
  'businessPriority' => '7'
}

Assigning Business Services

Assign services to nodes:
/usr/local/nmis9/admin/node_admin.pl \
  act=set \
  node=webserver1 \
  entry.configuration.businessService="eCommerce"

Escalation Policies

Escalations.nmis

Define tiered notification rules for events. From Escalations.nmis:1:
%hash = (
  'default_core_default_default__' => {
    'Event' => 'default',
    'Event_Node' => '',
    'Event_Element' => '',
    'Group' => 'default',
    'Role' => 'core',
    'Type' => 'default',
    'Level0' => 'email:Contact1',
    'Level1' => '',
    'Level2' => 'email:Contact1',
    'Level3' => '',
    'UpNotify' => 'true'
  }
);

Escalation Properties

  • Event - Event name pattern (or ‘default’)
  • Event_Node - Node name pattern
  • Event_Element - Element identifier pattern
  • Group - Node group
  • Role - Node role type
  • Type - Node type
  • Level0-Level10 - Escalation tiers
  • UpNotify - Send recovery notifications

Escalation Levels

From Config.nmis:376:
'escalation' => {
  'escalate0' => '0',      # Immediate
  'escalate1' => '300',    # 5 minutes
  'escalate2' => '900',    # 15 minutes
  'escalate3' => '1800',   # 30 minutes
  'escalate4' => '2400',   # 40 minutes
  'escalate5' => '3600',   # 1 hour
  'escalate6' => '7200',   # 2 hours
  'escalate7' => '10800',  # 3 hours
  'escalate8' => '21600',  # 6 hours
  'escalate9' => '43200',  # 12 hours
  'escalate10' => '86400'  # 24 hours
}
Notifications are sent:
  1. Level0 - Immediately when event occurs
  2. Level1 - After 5 minutes if not resolved
  3. Level2 - After 15 minutes if not resolved
  4. Continue through levels until resolved

Notification Methods

From escalation level syntax: Email notification:
'Level0' => 'email:Contact1'           # Single contact
'Level1' => 'email:Contact1,Contact2'  # Multiple contacts
No notification:
'Level3' => ''  # Skip this level

Escalation Examples

Core Router Escalation

From Escalations.nmis:22:
'default_core_default_default__' => {
  'Event' => 'default',
  'Group' => 'default',
  'Role' => 'core',
  'Type' => 'default',
  'Level0' => 'email:ops_team',      # Immediate
  'Level1' => '',                     # Skip
  'Level2' => 'email:ops_manager',   # 15 min
  'Level3' => '',
  'UpNotify' => 'true'
}

Distribution Switch Escalation

'default_distribution_default_default__' => {
  'Event' => 'default',
  'Group' => 'default',
  'Role' => 'distribution',
  'Type' => 'default',
  'Level0' => 'email:ops_team',
  'Level1' => '',
  'Level2' => '',
  'Level3' => 'email:ops_manager',   # 30 min
  'UpNotify' => 'true'
}

Access Switch Escalation

From Escalations.nmis:42:
'default_access_default_default__' => {
  'Event' => 'default',
  'Group' => 'default',
  'Role' => 'access',
  'Type' => 'default',
  'Level0' => '',                     # No immediate
  'Level1' => 'email:helpdesk',      # 5 min
  'Level2' => '',
  'Level3' => '',
  'Level4' => 'email:ops_team',      # 40 min
  'UpNotify' => 'true'
}

Escalation Key Format

Escalation keys follow the pattern:
Event_Role_Type_Group_Node_Element
Use default for wildcard matching:
  • default_core_default_default__ - All core role events
  • Node Down_default_router_network__ - Router down in network group
  • default_default_default_default__ - Catch-all fallback

Recovery Notifications

From Escalations.nmis:20:
'UpNotify' => 'true'
When true, sends notification when:
  • Event is resolved
  • Device comes back up
  • Condition clears
Escalation policies are evaluated in order. Ensure more specific rules are listed before generic catch-all rules.

Email Configuration

From Config.nmis:262:

SMTP Settings

'email' => {
  'mail_server' => '127.0.0.1',
  'mail_server_port' => '25',
  'mail_from' => '[email protected]',
  'mail_from_reports' => '[email protected]',
  'mail_domain' => 'yourdomain.com',
  'mail_use_tls' => 'false',
  'mail_user' => '',
  'mail_password' => '',
  'mail_combine' => 'true'
}

Email Batching

'mail_combine' => 'true'  # Combine multiple events into single email

Configuration Management

Edit Locations

cp /usr/local/nmis9/conf-default/Locations.nmis \
   /usr/local/nmis9/conf/Locations.nmis
vim /usr/local/nmis9/conf/Locations.nmis

Edit Contacts

cp /usr/local/nmis9/conf-default/Contacts.nmis \
   /usr/local/nmis9/conf/Contacts.nmis
vim /usr/local/nmis9/conf/Contacts.nmis

Edit Business Services

cp /usr/local/nmis9/conf-default/BusinessServices.nmis \
   /usr/local/nmis9/conf/BusinessServices.nmis
vim /usr/local/nmis9/conf/BusinessServices.nmis

Edit Escalations

cp /usr/local/nmis9/conf-default/Escalations.nmis \
   /usr/local/nmis9/conf/Escalations.nmis
vim /usr/local/nmis9/conf/Escalations.nmis
After editing configuration files, validate syntax:
perl -c /usr/local/nmis9/conf/Contacts.nmis

Testing Notifications

Test Email Configuration

/usr/local/nmis9/bin/nmis-cli \
  act=test-email \
  [email protected]

Trigger Test Event

# Create test event
/usr/local/nmis9/bin/nmis-cli \
  act=event \
  event="Test Event" \
  node=router1 \
  level=Warning

Check Escalation Logs

tail -f /usr/local/nmis9/logs/event.log

Best Practices

1. Use Descriptive Names

Clear, meaningful identifiers:
  • Locations: DC1_FloorA, HeadOffice_B2
  • Contacts: ops_primary, mgr_network
  • Services: CustomerPortal, InternalHR

2. Document Duty Times

Maintain duty schedules externally for reference.

3. Test Escalations

Regularly verify notification delivery:
  • Send test events
  • Confirm email receipt
  • Validate escalation timing

4. Set Realistic Priorities

Use priority levels consistently:
  • 9-10: Critical revenue impact
  • 6-8: Business critical
  • 3-5: Important but not critical
  • 1-2: Informational

5. Maintain Contact Currency

Regularly review and update:
  • Email addresses
  • Phone numbers
  • Duty schedules
  • Departed staff

Build docs developers (and LLMs) love