Released: Icinga Core 1.0.1 & Web 0.9.1 beta *NOW*

Icinga marches on with the release version 1.0.1 and a heap of improvements to boot:

Core 1.0.1: If you haven’t been keeping up with Michael F’s updates, the Core team has been making a whole heap of improvements in IDOUtils with optimized indexes and housekeeping, oracle enhancements and two fantastic new features from the community – cheers to Vitali Voroth, DECOIT GmbH for his escalation condition patch and Bill McGonigle for his service_check_timeout_state suggestions! The list goes on, so check out the changelog for more info.

Docs 1.0.1: The Docs team has kept up to speed with new help topics on escalation conditions, using Oracle as the RDBM and of course how to upgrade it for Icinga Core 1.0.1.

Web 0.9.1 beta: As previously hinted, the Web team has developed a bunch of new features including compound commands, status icons, built in persistence and even more flexible user settings.

So click on that download button on the right to check it out for yourself – and don’t forget to give us your feedback in the comments or issues lists!

  • Share/Bookmark

Icinga introduces… Michael Friedrich (Icinga Core and IDOUtils)

Day job: I am working at the Vienna University Computer Center at the Internet Domain Administration department.  My daily work consists of administrating and monitoring DNS services for *.at and the Vienna University. Furthermore I am in charge of several (DNS) Monitoring projects. One of them is the database backend for Icinga Core, named IDOUtils and supporting Oracle/Postgresql.

Which part of Icinga could you put your name on?
Especially IDOUtils and all 3 RDBMS (MySQL, Postgres, Oracle). Regarding the core I am at a fast growing learning stage, but my main focus is on IDOUtils. And if you wanna know, the Postgres and Oracle implementation was running through my fingers and always will be ;-)

What are you currently working on?
Having finished improved Oracle implementation for IDOUtils and finishing the threaded housekeeper from Hendrik, I am currently working on getting the last patches and enhancements into the Core and IDOUtils. I will be in charge of doing the release 1.0.1 on the technical point of view.

Afterwards, Icinga will get deployed onto a productive environment. Other things next to Icinga are kept confidential, but regarding Icinga IDOUtils there might be the chance to improve Postgresql just like I did with Oracle. And on the core side of life I want to see more community patches being applied :)

What attracted you to Icinga?
In the first time the only plan was to get former and now closed NDOUtils Oracle project back to the upstream. In April 2009 I got into that project and I also read about the fork and the ongoing development (and also about the discussions about dead Nagios development).It was a wise and logical decision to catch up with Icinga and to offer IDOUtils Oracle.

In the meantime – after several philosophical sessions with Hendrik – I started coding then and back in August 2009 initial Postgres support has been done. For my work schedule it was only a small step into Oracle direction, but imho a real nice community output :)

What do you enjoy about working on the project?
Getting the Oracle stuff done was a bit harder to keep up with but getting my time alone and several weekends with too much coffee and good music … Anyhow, I really enjoy coding and listening to Tiesto or Armin van Buuren. Most of my initial inspiration and motivation for coding sessions comes from there.

But hey .. I also like to get in touch with the others, looking over their stuff and commits (and to be honest icinga web is a black hole for me). And I like that community feeling… if something is wrong or fresh ideas pop up – No negative auras or words at all. Just like a positive flow and regarding the results – what the heck were we doing in our spare time?

What was one big challenge or memorable moment while on the Icinga team?
Big Challenge: Release of Icinga Core 1.0RC1 and Web 0.9.0-alpha during OSMC. Pure chaos but I liked it … not always the coding stuff but also getting things together and “play” project release manager. The toughest one was the upload of the web – at night after the evening event nobody was online and I was able to upload it to SF.net at 5 a.m. ;-)
Other Challenges were coding with Antibiotika and getting Postgres as a result. And finally Oracle of course.

Memorable moment: Since I am the only one from Vienna, Austria the only thing we had to communicate was Skype and Emails. I got ill the week before the Icinga Weekend and so meeting all Icinga members after arriving somewhere in Nuremberg was a real pleasure. It was like never seen before but we were behaving like old friends getting together after a long time. Such memories keep me running and afterall we will meet again and get our ideas together :-)

Outside of Icinga, what are some of your other pet projects?
Some internal projects concerning DNS in general, based on C and Perl. And the usual work stuff – setting up nameservers and administrating dns related stuff. My work is not really related to my former studies except coding C (but not on hardware anymore).

What would you bet to be the next big thing in the open source or IT world?
Difficult to say. What I can tell – definitely not inserting dollars for a bundled monitoring toolkit and getting a new webinterface and reporting. Not the way the open source thoughts should spread the word.

I am hoping more people will recognize Icinga. Everyone who ever wanted their patches in the upstream is very welcome to contribute. Or even support the team with active development. Remember – it’s free and a community project…

How do you like to spend your time away from the keyboard and monitor?
Uhm there is? Well at this stage 50 hours or more a week are enough, you are right. I really enjoy spending time with friends, enjoying a glass of good  whiskey and sitting back, doing nothing work related of course. If I’ll need to get into my own world, I’m reading Perry Rhodan books. And I really like to watch series like How I met Your Mother, The Big Bang Theory, Two and A Half Men, and so on :) Sometimes a good movie, or going out together. But I’m kind of a workaholic, that’s true ;-)

What’s your two cents on Icinga?
1 cent: Best thing ever happened to me at work. Will continue developing and deploying it at work.

1 cent: Spread the word for all addon and plugin developers and also the community out there to join forces :-)

All together like we thought on OSMC 2009 right before the presentation of Icinga: “If we were not here in this place, working on and enjoying Icinga, others would have done it too.”

  • Share/Bookmark

Icinga meets Nabaztag!

Now for most of us we would not know what a Nabaztag is right? (yes!) Well a Nabaztag is a robotic rabbit that interfaces into your WiFi network and can be used for a range of clever things! to explain this rabbit better you can see the introductory clip here

Hans Moser has set up his cleaver little rabbit to announce his Icinga notifications using PHP.  Here is a short clip on how he went about it and what this little rabbit is capable of…

You can find the full details on Hans’s blog post here also Hans has expanded further on this to also include Icinga status messages, the details can be viewed here

A rather nice alternative to an E-mail or SMS !!!

  • Share/Bookmark

Icinga IDOUtils – More Improvements Part III

One last shot this time for upcoming Icinga 1.0.1 and IDOUtils:

After getting several core patches into the master and also fixing duplicated service/hoststatus updates being sent to the neb module (thanks to Matthieu Kermagoret) there will be more improvements for IDOUtils.

Since the threaded housekeeper is doing fine, it is possible to periodically clean more tables. By popular demand, the following options have been added to ido2db.cfg

They can be used for your likings, by default they are not set.

If you want to help us test for the upcoming release, you are very welcome to do so!

To help you with GIT, we now have a quite detailed tutorial how to use GIT based on Icinga in our Developer Wiki =)

  • Share/Bookmark

Coming soon: Icinga Web 0.9.1 beta new features

With just a few days till release, everything on the Icinga Web timeline is going to plan. To whet your appetite we have a few new features as promised:

Compound commands: Simply check the tick boxes for whichever hosts, services or groups you would like to simultaneously send a command to.

Persistence: Views and filters are automatically saved to reappear when you return and can be renamed for future reference.

Extra flexible user settings: Above and beyond the classic contact group restriction, confine who can access custom variables, initiate commands, view specific host and service groups. Even categorise cronks and views for specific user groups.

Status icons:
See at a glance if checks, notifications and event handlers have been enabled / disabled, if hosts are in downtime or acknowledged.

Hope you are looking forward to them as much as we do. As always, your views and feedback are welcome.

  • Share/Bookmark

Icinga introduces…

…the team! Over the coming weeks the Icinga team will be making themselves a little better known. They’ll share a bit on what they do for Icinga, what keeps them busy 9 to 5, their offline alter egos and more. So stay tuned!

  • Share/Bookmark

Icinga Core – More Enhancements

First of all – many thanks to Vitali Voroth and DECOIT GmbH and also Bill McGonigle for providing such great stuff and improving Icinga.

So what it’s all about?

As you might know, we are “monitoring” the Nagios world too and recently on the developer mailing list, an interesting patch popped up:

Currently the Icinga core sets state to CRITICAL if a service check times out. This is the default and can only be changed by recompiling the code. For several reasons you might want to define that yourself – and also, what does CRITICAL mean in this context? If the load on the monitoring box is too high, a service check may generate a timeout, not only a connection loss or similar.

We’ve been asking Bill McGonigle if we can take his patch for Icinga (it’s not applied in current Nagios CVS where it was built against), test it and in case apply it to give it back to the community. It’s a great idea to add the service_check_timeout_state to icinga.cfg and let the user decide upon his demands what state will be set in case of emergency. Bill suggested a new approach for Icinga too – changing the default state from CRITICAL to UNKNOWN. We think this is a great idea and so will it be in upcoming Icinga 1.0.1 :-)

That’s not all, folks …

Vitali Voroth on behalf of DECOIT GmbH sent a rather huge and exclusive improvement for Icinga core: escalation conditions.

Better to describe with an excerpt of the docs:

Using a patch it is now possible to define an escalation_condition (similar to escalation_options [w,u,c,r]). An escalation with a defined condition will only be escalated if the current state of a particular host/service fits the condition. One possible example of use for this could be the following scenario:

Think of two different escalations for the same service foo. One of them should only escalate when service bar is OK, the other should escalate if bar is CRITICAL or WARNING. Now think about foo being the main service offered by a company and the admin has to react immediately if it is down. bar could be a service indicating if the admin is in the office or at home and the escalation would react as following:

* If the admin is in the office, send an email first, after 5 minutes send an SMS
* If the admin is at home, send an SMS first and after 30 minutes a second SMS to the admin and the head of department

A really nice patch and Team Icinga is very happy about this core related enhancement! :-)

And as you will expect – Icinga Core provides the enhancements, while the documentation will be updated too for Icinga 1.0.1 =)

You want more?

If YOU ever wanted your ideas and patches within Nagios/Icinga, do not hesitate to contact us. And even if you want to contribute and develop Icinga, you are very welcome to do so!

Spread the word and show love for Icinga :-)

  • Share/Bookmark

Icinga chose ocilib as Oracle db layer

Just to let you know:

Based on my finished Oracle implementation and the last blog post, I’ve dropped Vincent Rogier, developer of ocilib a few lines about my work experience with ocilib.

http://orclib.sourceforge.net/2010/02/icinga-chose-ocilib-as-oracle-db-layer/

This small diary entry describes the way how Icinga and ocilib happened :-)

  • Share/Bookmark

Icinga IDOUtils – More Improvements Part II

As mentioned in the last post, there are other improvements for Icinga and IDOUtils.

This time, I want to give you a deeper look onto database performance and the housekeeping stuff.

As you might know, selecting, updating or even deleting a row from a table heavily depends on the row count. If table size grows bigger e.g. in the historical tables from IDOUtils, those queries will be slower and hold back the main process. Current approach of IDOUtils is one forked child of ido2db for one idomod connection – working sequentially on the gotten data.

So even one select taking longer will slow down the data processing and worst case the socket will get blocking and idomod complains about writing to data sink.

But how to resolve those issues?

First of all there were several approaches originally found in mysql-mods.sql – setting indexes on table columns which are being used within the WHERE clause. Regarding the fact that ido2db is not just an insert application, but also deletes historical data on demand (table trimming options), selects objects for caching and furthermore updates existing rows (service/hoststatus e.g.) we decided to apply most useful indexes on the table creation statements. It does slow down an insert a bit, but the overall benefit is much bigger than that :-)

Also the upcoming Icinga Web benefits from that – e.g. the logentries tables select performs a lot faster when using the API and a RDBMS.

But that’s not all – indexes are only one approach of improvement. In the last few months, Hendrik, Christoph and myself discussed a lot about the periodic housekeeping. The basic approach was to remove housekeeping function from the main data processing. Simply because historical deletes on large tables will take even longer and prevent new data being written to the database.

There have been discussions about a cronjob and seperated forked processes for housekeeping, but we wanted something within ido2db and simple to use. So Hendrik came up with the idea to create an own thread within each ido2db child which runs completely seperated from the main data processing flow – the so-called threaded housekeeper.

The thread just waits for the appropriate instance getting connected and then performs the periodic housekeeping – independant from the main flow. And it does not interfere with the normal data processing. So to speak it resolves a big performance issue within IDOUtils.

Basically, this is the way it performs:

  • sleep a while after creation and intialization
  • idle wait for database connection and connected instance from main process
  • perform periodic maintenance not interferring with main process
  • will be terminated when ido2db shuts down

Best thing so far – it has been implemented and tested and improved quite a while. Mostly done in our own git branches, but the final solution is within current git master and will be one of the outstanding new features for Icinga IDOUtils in the upcoming Icinga 1.0.1 release.

Stay tuned for more updates!

… and prepare for Icinga 1.0.1! =)

  • Share/Bookmark

Icinga IDOUtils – More improvements Part I

It’s been a while since I made several changes to the initial Oracle implementation in Icinga IDOUtils. Code has been split, first start of using prepared statements and binded params with ocilib and some other changes to the code.

In the last few weeks I have been investigating a lot on how to implement more improvements and optimize the critical path of data input from Icinga Core.

I want to start with IDOUtils Oracle, more information on other improvements for Icinga and IDOUtils will follow :)

Oracle implementation splits up into several parts taken care of:

  • Rewrite all queries to prepared statements and bind params at runtime
  • Add dynamic procedures for DELETE statements
  • Drop autoincrement emulation by one sequence and insert triggers
  • Add sequences for each table and use INSERT INTO … (id, …) VALUES (seq_name.nextval, …)
  • Add RETURNING id INTO :id for INSERT statements to save one round trip
  • MERGE does not support returning INTO, added SELECT seq_name.currval query instead for fetching last inserted id
  • Rewrite selecting cached objects from DB

The rewritten queries are divided as follows:

  • 1x SELECT latest data time as is (called only at startup)
  • dynamic procedure for DELETE on table by instance_id called at startup for cleaning config/status
  • dynamic procedure for DELETE on tably by instance_id, field compared to time called during periodic cleanup
  • all other queries are prepared with their own statement handler
    • 4x DELETE
    • 52x MERGE
    • 9x INSERT
    • 9x UPDATE
    • 5x SELECT

This summarizes into about 8000 lines (+) and 2000 lines (-) of code modifications :-)

Furthermore I have been thinking on how to provide an upgrade path for all existing IDOUtils Oracle users. Importing data using the newly applied sequences might lead into errors regarding currval of each sequence. A basic upgrade procedure has been provided already – if you want to try, get the latest GIT master.

Stay tuned for more interesting stories to tell :)

… and watch out for Icinga 1.0.1 and fresh IDOUtils Oracle!

  • Share/Bookmark