OSMC 2014: OpenNMS 14 | Tarus Balog

32
OpenNMS 14 and Beyond OSMC 2014 20 November 2014 Tarus Balog [email protected]

description

This talk gives an overview about the new features in OpenNMS 14. There is a new topology UI to navigate through your network. For NOCs there is a functionality added to present information on wallboards and a operators panel. There is also some new technology developed for persisting time series data in a Cassandra based time series database called NewTS.

Transcript of OSMC 2014: OpenNMS 14 | Tarus Balog

Page 1: OSMC 2014: OpenNMS 14 | Tarus Balog

OpenNMS 14 and Beyond

OSMC 2014 – 20 November 2014

Tarus Balog

[email protected]

Page 2: OSMC 2014: OpenNMS 14 | Tarus Balog

#MonitoringSucks

http://www.adventuresinoss.com

Page 3: OSMC 2014: OpenNMS 14 | Tarus Balog

Agenda

•OpenNMS Overview

– History

– Main Feature Areas

– Organization

•OpenNMS 14

– Topology (demo)

– Wall Boards

– Ops Panel

•Automation Demo

•Questions and Answers

Page 4: OSMC 2014: OpenNMS 14 | Tarus Balog

OpenNMS is the world's first

enterprise-grade network

management application

platform developed under the

open source model.

Page 5: OSMC 2014: OpenNMS 14 | Tarus Balog

“world's first”

•NetSaint 2000-01-10 1323

•OpenNMS 2000-03-29 4141

•Zabbix 2001-03-23 23494

•Nagios 2001-05-03 26589

•RRDTool 2003-01-13 71544

•ZenOSS 2006-03-20 163126

•Icinga 2009-04-21

Page 6: OSMC 2014: OpenNMS 14 | Tarus Balog

“enterprise-grade”

• Nearly 63,000 Devices on a One Instance (Swisscom)

• 1.2 Million Data Points Every Five Minutes (New Edge)

• 320,000 Interfaces per Device (Wind)

• 2000 events/sec (SRNS)

• 4000 Remote Monitors (Papa Johns)

Page 7: OSMC 2014: OpenNMS 14 | Tarus Balog

“network management application platform”

The Architecture of OpenNMS has been

designed to allow for easy integration of

other tools, both proprietary and open.

Page 8: OSMC 2014: OpenNMS 14 | Tarus Balog

“open source model”

OpenNMS is published under the AGPLv3

and all components are licensed under an

OSI-qualified free software license.

Page 9: OSMC 2014: OpenNMS 14 | Tarus Balog
Page 10: OSMC 2014: OpenNMS 14 | Tarus Balog

•Event Management: including custom events, SNMP traps,

syslog, event translation, automations and correlation.

•Provisioning: Both automated and directed discovery. Fully

supported via ReST.

•Performance Data Collection: SNMP, HTTP, XML, JDBC,

JMX, WMI

•Service Assurance: Service Checks with Outage Models

The Four Main Areas of OpenNMS

Page 11: OSMC 2014: OpenNMS 14 | Tarus Balog
Page 12: OSMC 2014: OpenNMS 14 | Tarus Balog

opennms.org

Page 13: OSMC 2014: OpenNMS 14 | Tarus Balog

opennms.com

• Home of The OpenNMS Group, Inc.

• Provides Services:

– Support

– Consulting

– Custom Development

– Training

– Licensing

Page 14: OSMC 2014: OpenNMS 14 | Tarus Balog

opennms.eu

Page 15: OSMC 2014: OpenNMS 14 | Tarus Balog

OpenNMS Versions (old)

• Stable (Production) Versions Have an Even Number:

– 1.8

– 1.10

– 1.12

• Unstable (Development) Versions Have an Odd Number:

– 1.7

– 1.9

– 1.11

Page 16: OSMC 2014: OpenNMS 14 | Tarus Balog

OpenNMS 14

• Reflects 10+ years of development

• More frequent releases

• Best Release to Date:

– Numerous bug fixes big and small

– Graphical Improvements

Page 17: OSMC 2014: OpenNMS 14 | Tarus Balog

Maps! We have Maps! (demo)

Page 18: OSMC 2014: OpenNMS 14 | Tarus Balog

Ops Panel and Wall Board

Page 19: OSMC 2014: OpenNMS 14 | Tarus Balog

Alarms and Automations

• Alarms exist to

– Reduce similar events

– Perform correlation

• Automations consist of

– Trigger (optional)

– Action

– Event (optional)

• Automations operate mainly on alarms but can access

the whole database

• Used for correlation

Page 20: OSMC 2014: OpenNMS 14 | Tarus Balog

Automations Example: Did a script run?

External Script

Script Started

Script Finished

Script Error

Port 5817

O

p

e

n

N

M

S

Page 21: OSMC 2014: OpenNMS 14 | Tarus Balog

Step 1: Create a Tracker Alarm

• Trigger: See if a ScriptFinished alarms exists without a

tracker alarm

• Action: NOP

• Event: Create a new event that will generate the

tracker alarm

<automation name="generateTracker" interval="30000" active="true" trigger-name="selectFinishedScriptsNoTracker" action-name="doNothingAction" action-event="createTrackerAlarm" />

Page 22: OSMC 2014: OpenNMS 14 | Tarus Balog

selectFinishedScriptsNoTracker

<trigger name="selectFinishedScriptsNoTracker" operator="&gt;=" row-count="1" > <statement> SELECT alarmid AS _alarmid, nodeid AS _nodeid, eventuei AS _eventuei, lasteventtime AS _ts, substring(eventparms from '.*name=(\w+).*') AS _parmname FROM alarms WHERE eventuei='uei.opennms.org/scripts/scriptFinished' AND substring(reductionkey from 'uei.opennms.org/scripts/scriptFinished:(.*)') NOT IN (SELECT substring(reductionkey from '.*scriptTracker:.*:(.*)') FROM alarms WHERE eventuei='uei.opennms.org/scripts/scriptTracker') </statement> </trigger>

Page 23: OSMC 2014: OpenNMS 14 | Tarus Balog

doNothingAction

<action name="doNothingAction" > <statement> UPDATE node SET nodeid = -1 WHERE nodeid = -1 </statement> </action>

Page 24: OSMC 2014: OpenNMS 14 | Tarus Balog

createTrackerAlarm

<action-event name="createTrackerAlarm" for-each-result="true" > <assignment type="field" name="uei" value="uei.opennms.org/scripts/scriptTracker" /> <assignment type="field" name="nodeid" value="${_nodeid}" /> <assignment type="parameter" name="name" value="${_parmname}" /> <assignment type="parameter" name="alarmId" value="${_alarmid}" /> <assignment type="parameter" name="alarmEventUei" value="${_eventUei}" /> </action-event>

Page 25: OSMC 2014: OpenNMS 14 | Tarus Balog

Step 2: Create a Tracker Alarm

• Trigger: See if a new ScriptFinished has arrived

• Action: Update the last event time for the Tracker

• Event: none

<automation name="updateTracker" interval="30000" active="true" trigger-name="selectFinishedScripts" action-name="updateTrackerAlarms" />

Page 26: OSMC 2014: OpenNMS 14 | Tarus Balog

selectFinishedScripts

<trigger name="selectFinishedScripts" operator="&gt;=" row-count="1" >

<statement> SELECT alarmid AS _alarmid, nodeid AS _nodeid, lasteventtime AS _lasteventtime, substring(eventparms from '.*name=(\w+).*') AS _parmname, now() AS _ts FROM alarms WHERE eventuei='uei.opennms.org/scripts/scriptFinished' </statement> </trigger>

Page 27: OSMC 2014: OpenNMS 14 | Tarus Balog

updateTrackerAlarms

<action name="updateTrackerAlarms" > <statement> UPDATE alarms SET firstautomationtime = COALESCE(firstautomationtime, ${_ts}), lastautomationtime = ${_ts}, lasteventtime = ${_lasteventtime} WHERE eventuei = 'uei.opennms.org/scripts/scriptTracker' AND substring(reductionkey from 'uei.opennms.org/scripts/scriptTracker:(.*)') = ${_nodeid}||':'||${_parmname} </statement> </action>

Page 28: OSMC 2014: OpenNMS 14 | Tarus Balog

Step 3: See if the Tracker Alarm is

Updated • Trigger: Select all of the open Tracker alarms and

check if they have been updated.

• Action: NOP

• Event: Create a new event that will generate the

“script did not run” alarm

<automation name="generateScriptDidNotRun" interval="30000" active="true" trigger-name="selectTrackerAlarms" action-name="doNothingAction" action-event="createScriptDidNotRunAlarm" />

Page 29: OSMC 2014: OpenNMS 14 | Tarus Balog

selectTrackerAlarms

<trigger name="selectTrackerAlarms" operator="&gt;=" row-count="1" > <statement> SELECT alarmid AS _alarmid, nodeid AS _nodeid, eventuei AS _eventuei, lasteventtime AS _lasteventtime, now() as _ts, substring(eventparms from '.*name=(\w+).*') AS _parmname FROM alarms WHERE eventuei='uei.opennms.org/scripts/scriptTracker' AND lasteventtime &lt; now() - interval '3 minutes' AND substring(reductionkey from 'uei.opennms.org/scripts/scriptTracker:(.*)') NOT IN (select substring(reductionkey from '.*scriptNotRunning:(.*)') FROM alarms WHERE eventuei='uei.opennms.org/scripts/scriptNotRunning') </statement> </trigger>

Page 30: OSMC 2014: OpenNMS 14 | Tarus Balog

doNothingAction

<action name="doNothingAction" > <statement> UPDATE node SET nodeid = -1 WHERE nodeid = -1 </statement> </action>

Page 31: OSMC 2014: OpenNMS 14 | Tarus Balog

createScriptDidNotRun

<action-event name="createScriptDidNotRunAlarm" for-each-result="true" > <assignment type="field" name="uei" value="uei.opennms.org/scripts/scriptNotRunning" /> <assignment type="field" name="nodeid" value="${_nodeid}" /> <assignment type="parameter" name="name" value="${_parmname}" /> <assignment type="parameter" name="alarmId" value="${_alarmid}" /> <assignment type="parameter" name="alarmEventUei" value="${_eventUei}" /> </action-event>

Page 32: OSMC 2014: OpenNMS 14 | Tarus Balog

Looking To the Future: IoT

• Newts: New Time Series Database

• Minion/Dominion:

https://github.com/OpenNMS/smnnepo