why favour icinga over nagios @ osdc 2015
TRANSCRIPT
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.
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 …
• Version 2.3.4 is out since a couple of days
• Puppet, Chef and Ansible support • Packages and Vagrant Box available
• Icinga 2 is a multithreaded C++ Core
• Load is distributed automatically
• Ability to monitor thousands of devices in second interval
# 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
}
• We have a powerful CLI
• Adding new features is easy
• You can really really do sophisticated setups … but you don’t have too
• 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
• 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
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
}
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)
}
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!
• 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
• Download Icinga 2
• Rethink you configuration
• Install Icinga Web 2 and play with it
• Give us feedback
#icinga