Having a reasonably large personal server environment of at least 10 key production VMs along with many other non-critical, but still important machines, a good monitoring system is key.
I currently use a trio of popular open source applications: Nagios (for service & host alerting), Munin (for resource graphing) and Smokeping (for latency response graphs).
Smokeping and Nagios are particularly popular, it’s rare to find a network or *NIX orientated organization that doesn’t have one or both of these utilities installed.
There are other programs around that offer more “combined” UI experiences, such as Zabbix, OpenNMS and others, but I personally find that having the 3 applications that do each specific task really well, is better than having one maybe not-so-good application. But then again I’m a great believer in the UNIX philosophy. :-)
The downside of having these independent applications is that there’s not a lot of integration between them. Whilst it’s possible to link programs such as Munin & Nagios or Nagios & Smokeping to share some data from the probes & tests they make, there’s no integration of configuration between the components.
This means in order to add a new host to the monitoring, I need to add it to Nagios, then to Munin and then to Smokeping – and to remember to sync any changes across all 3 applications.
So this weekend I decided to write a new program called Smokegios.
This little utility checks the Nagios configuration for any changes on a regular cron-controlled basis. If any of the configuration has changed, it will parse the configuration and generate a suitable Smokeping configuration from it using the hostgroup structures and then reload Smokeping.
This allows fully autonomous management of the Smokeping configuration and no more issues about the Smokeping configuration getting neglected when administrators make changes to Nagios. :-D
Currently it’s quite a simplistic application in that it only handles ICMP ping tests for hosts, however I’m intended to expand in future with support for reading service & service group information for services such as DNS, HTTP, SMTP, LDAP and more to generate service latency graphs.
This is a brand new application, I’ve run a number of tests against my Nagios & Smokeping packages, but always possible your environment will have some way to break it – if you find any issues, please let me know, keen to make this a useful tool for others.
To get started with Smokegios, visit the project page for all the details including installation instructions and links to the RPM repos.
If you’re using RHEL 5/6/derivatives, I have RPM pages for Smokegios as well as Smokeping 2.4 and 2.6 series on amberdms-custom and amberdms-os repositories.
It’s written in Perl5, not my most favorite language, but it’s certainly well suited for this configuration file manipulation type tasks and there was a handy Nagios-Object module courtesy of Duncan Ferguson that saved writing a Nagios parser.
Let me know if you find it useful! :-)
I have an installation of Icinga, which configuration was generated through check_mk and I tried to use smokegios to generate smokeping configuration for my hostgorups, but I receiving the following error:
Can’t locate object method “” via package “NOTIFY_HOSTADDRESS=’$HOSTADDRESS$” (perhaps you forgot to load “NOTIFY_HOSTADDRESS=’$HOSTADDRESS$”?) at /usr/share/perl5/Nagios/Object/Config.pm line 541.
and I can’t figure how to solve
Sounds like it’s probably due to some differences between the Nagios and Icinga configuration files breaking the Perl Nagios::Object module, which is used to extract all the configuration needed. I’ve had a quick look but can’t find any particular modules or details around reading the Icinga configuration using Nagios::Object, so I will need to run some tests against an install and either patch Nagios::Object to work, or write a feature into Smokegios natively.
I’ll have a go in a week or so’s time, I’ve been meaning to have a play with Icinga anyway. :-)
It seems I’m bumping a quite old post however I have a little issue here.
I just setup your script on an Ubuntu system and all good except it say.
2014/04/17 17:26:19 (line 239) SMOKEGIOS START
2014/04/17 17:26:19 (line 257) Configurations up-to-date, nothing todo
2014/04/17 17:26:19 (line 258) Terminated
but we are talking about a new, empty smoke ping setup with no host added and a nagios setup with many hosts added. I tried to add the servers into host groups but no luck.
Any advise here?
OK let me answer my own question. Upon taking a look at the script (quite well documented congrat!) it seems it checks nagios config whether its newer than some ping or not. Since I installed smoke ping later its newer than the nagios config hence the script considered as up to date.
Here is another question. I use multiple smoking slaves. I added them manually now to smoke ping master. How is your script? Will it cause any issues? If I add a new host to nagios I guess your script will add it to smoke ping without any slaves right? Any solution?