OSDC 2015: Bernd Erk | Why favour Icinga over Nagios

Post on 15-Jul-2015

111 views 0 download

Transcript of OSDC 2015: Bernd Erk | Why favour Icinga over Nagios

www.icinga.org

Why favour Icinga over Nagios

OSDC Berlin - 23th April 2015

• Bernd Erk

• Working @NETWAYS

• Icinga Co-Founder

• @gethash

THE ICINGA PROJECT

Open Source Enterprise Monitoring

Icinga is a scalable and extensible monitoring system

which checks the availability of your resources, notifies

users of outages and provides extensive BI data.

• Originally forked from Nagios in 2009

• Independent version Icinga 2 since 2014

You?

Icinga Core

C-based source

MySQL, PostgreSQL, Oracle

Icinga Quality, Testing and Community Support

Website and Open Source Ticketing System

Icinga Reports

based on Jasper

Reports

Icinga Doc

based on

Markdown

3rd Party Tools Icinga Web based on PHP using ExtJS, Agavi MVC

IDOUTILS

Icinga Web 2 Based on PHP / responsive design

Icinga 2

C++-based source with

multiple components

IDO Livestatus Cluster …

ICINGA 2 - INTRODUCTION

• Monitors everything

• In a regular interval

• Gathering status

• Collect performance data

• Notifies using any channel

• Detects dependencies

• Handles events in configured way

• Forwards logs to Logstash and Graylog

• Passes performance data to Graphite,

OpenTSDB or InfluxDB

• Based on C++ and Boost

• Supports MySQL and PostgreSQL

• Includes a extensive template library

• Version 2.3.4 is out since a couple of days

• Puppet, Chef and Ansible support

• Packages and Vagrant Box available

WHY NAGIOS™ IS GOOD?

• Monitoring things is very easy

• Very simple software stack

• No complex external dependencies

• Active checks are powerful

• Gathering performance data

• Huge community

• Thousands of Plugins

OK, BUT WHY ICINGA THEN?

NAGIOS DOES NOT SCALE

• It is just a single loop

• Limitations using external interfaces

• Icinga 2 is a multithreaded C++ Core

• Load is distributed automatically

• Ability to monitor thousands of devices in

second interval

ADDING MODULES IS HARD

# tar xzvf mk-livestatus-1.2.4.tar.gz

# cd mk-livestatus-1.2.4

# ./configure --prefix=/usr/local/icinga

--exec-prefix=/usr/local/icinga

# make

# cp src/livestatus.o /usr/local/icinga/bin

define module {

module_name mklivestatus

path /usr/local/icinga/bin/livestatus.o

module_type neb

args /usr/local/icinga/var/rw/live

}

Checker

Notify

Gelf

Perfdata Graphite

IDO

Compat

Livestatus

• We have a powerful CLI

• Adding new features is easy

• You can really really do sophisticated setups

… but you don’t have too

# icinga2 feature enable livestatus

# icinga2 feature enable ido-mysql

DEMO

NO CLUSTERING AND DISTRIBUTION

• There is no integrated failover mechanism

• Configuration is not distributed

• No shared monitoring information

• Zones for multitenancy environments

• Support for logic splits in the config

• Availability and scaling zones

• Automatic redistribution of checks

IDO

Config

Checker

Livestatus Checker

IDO

Checker

Perfdata GELF

SECURITY IS A MESS

• NSCA works, but not in a good way

• NRPE has a couple of security issues

• You can make it secure … by hand

• Bidirectional communication using SSL

• “binlog” like retention for events

• Distributed features throughout the cluster

CONFIGURATION LIMITS

define service{

host_name linux1,linux2,linux3,...,linux9

service_description ssh-check

other service directives ...

}

apply Service "ssh" {

import "generic-service”

check_command = "ssh”

assign where host.address && host.vars.os == "Linux”

}

apply Service "ssh" {

import "generic-service”

check_command = "ssh”

assign where host.address && host.vars.os == "Linux”

ignore where host.vars.test == true

}

define hostgroup{

hostgroup_name linux-servers

alias Linux Servers

members linux1,linux2,linux3

}

object Host “mysql-server1" {

address = "10.0.0.1“

check_command = "hostalive“

}

object HostGroup "mysql-server" {

display_name = "MySQL Server“

assign where match("*mysql*", host.name)

}

ONE MORE THING …

object Service ”webservice" {

import "generic-service”

check_command = ”load”

host_name = “a really great server”

vars.load_wload1 = {{

if (get_time_period(“9to5”).is_inside) {

return 40

} else {

return 60

}

}}

}

• Different config format

• Won’t miss the old config!

• It is really time for change

• You will love it!

WHAT YOU SEE IS WHAT YOU

GET

HOPEFULLY NOT!

• Parsing status.dat is not really cool

• Executing commands is hard

• Very inflexible architecture

• Limitations in current Icinga interfaces

• Really hard to extend and integrate

• No unified interface so far

• Easy to extend and embed

• Multiple authentication providers

• Support for db and livestatus

• Responsive

Web 2

Monitoring Docs

BP Graphite PNP

Demo

THE COMMUNITY

You?

Portland 2015

October 10th

Kuala Lumpur 2015

June 9th

CONCLUSION

• Download Icinga 2

• Rethink you configuration

• Install Icinga Web 2 and play with it

• Give us feedback

#icinga

THANK YOU!

www.icinga.org

dev.icinga.org

git.icinga.org

@icinga

/icinga

+icinga