When we had the Icinga 2 REST API released with v2.4 we thought about possible demo cases. One of the many ideas was to create a simple dashboard based on Dashing. There is a variety of Dashing implementations already around, either using DB IDO, Livestatus or the CGI JSON export. None of them expose all the core runtime data you will get using the Icinga 2 API.

And so Dashing with Icinga 2 began as a fun demo project for Icinga Camp talks. We wrote about Dashing earlier this year already and you probably know that it is fully integrated into the icinga2x Vagrant box. What we did not expect was the community feedback and patches we received over the past months. Overwhelming!

Right before OSMC we decided to add more features, and tag a first release. The announcement didn’t happen yet and some more changes also have been implemented during the OSMC hackathon.

Layout and Widgets

Finding the best widget isn’t easy. Therefore the Icinga 2 dashboard now adds some more widgets than just numbers.

The meter widget illustrates host and service problem counts in a more visible way. It also has been patched to dynamically adjust the maximum value, e.g. if you create a new host object at runtime without restarting anything.

The list widget is used to present check statistics per minute as well as listing the services by severity. That algorithm is the same as used inside Icinga Web 2.

In addition to the simplemon widget which just presents problem counts with a different background color there also is the iframe widget which embeds Icinga Web 2. The latter supports &showFullscreen&showCompact as URL parameter which is used for the important problem listing here.

 

Configuration and Library

One of the things which did not work well was missing configuration file support. Now you can specify the Icinga 2 API host and credentials inside the config/icinga2.json file.

Previously the entire job consisted of one big function. This has been split into a dedicated library in the lib/ directory. The icinga2 class now provides attributes and methods required for the stats updates. Big thanks to Bodo Schulz for the patches.

Another addition is the ability to call the functions getHostObjects() and getServiceObjects() with filter, attrs and joins just as known from the Icinga 2 API documentation. A small test runner has been added in the test/ directory to allow simple tests with the class instead of fiddling with the job scheduler.

 

Development and Modifications

One of the things users probably struggle with – Dashing isn’t easy to start with. And it gets worse when you’ll look into existing code mixed with HTML, Ruby, Coffeescript and need to understand how widgets, jobs and dashboards play together. I for myself had a hard time finding out, but I really love the examples others put on the web.

Aside from the revamped code basis and new widgets we have another Xmas present for you: A first version of a development documentation for Dashing to get things going with the existing library, jobs, widgets and dashboards.

 

Conclusion

Dashing with Icinga 2 isn’t a fun demo anymore but used in production already. Our community made it happen and I am proud to say that it is an official Icinga integration similar to the Vagrant boxes. We’re doing our best to support anything in the Icinga ecosystem, join us and share your findings. Fork the repository and send PRs all the way! Grab the latest v1.1.0 release while it is hot :)

Merry Xmas from team Icinga!

PS: Watch out for Icinga Camp Berlin on 7th of March 2017. There might be a chance for new Dashing enhancements :-)