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
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 - 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
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
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',
'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:
- Level0 - Immediately when event occurs
- Level1 - After 5 minutes if not resolved
- Level2 - After 15 minutes if not resolved
- 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 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:
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
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
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