Building your own Icinga Module sounds like a big challenge, but is it really that hard? A look behind the scenes reveals that it’s actually not as complicated as it sounds. But first things first: Why would you even want to create your own Module?
It’s fairly easy to extend the monitoring functionality of Icinga by using and building plugins. We even collect many of them on our platform Icinga Exchange. However, certain functionalities can not be covered by plugins. This is where Icinga Modules come into play. Many of the functionality that you find in Icinga Web is realized with Modules. Icinga Web is a framework that provides basic functionality: Connecting to databases, Visualizing data, handling user permissions and some other “basic” functions. Modules use the functions provided by Icinga Web to create actual features. Here’s an example: Visualizing the data stored by Icinga 2 is done through the “monitoring” module, which is included by default when you install Icinga Web.
Separating Icinga Web, which provides many basic functions and hooks, and Modules that are built on top of that has many advantages for us. Working this way allows us to separate code, which makes maintenance work easier. Additionally, developers can work in parallel on different modules and provide updates independently. The most important advantage however is that we can add certain features separately from time to time. Which brings me to my actual point: You can do the same and build your own Icinga Modules!
Popular Community Modules
The Icinga community is pretty active regarding Icinga Modules. I believe that the best inspiration to create your own Icinga Module is by showing what others created. This is not a full list of all available modules from our community, I just want to give you a glimpse of what is possible.
Maps Module by nbuchwitz
This module displays host objects as markers by using openstreetmap. Markers are configured through custom variables. The visual maps are embedded directly into Icinga Web. Learn more about the Maps Module on GitHub.
Grafana Module by mikesch-mp
This modules allows you to map graphs (panels) created in Grafana directly into Icinga Web. The module comes with a lot of different options to make the integrations as flexible as possible. Check out the Grafana Module on GitHub.
Azure Import by credativ
Yes, creating your custom Import Source for Icinga Director is also possible! Credativ did so and open sourced this module to automatically import data from your Azure infrastructure into Icinga. Learn more about the Azure Director Import on GitHub.
Netbox Import by Sol1
Our partner Sol1 from Australia created this module to equip Icinga Director with a new Import Source to import data directly from Netbox. Check out the Netbox Director Import on GitHub.
Get Started with your own Icinga Module
We provide a comprehensive training course to boost your first steps with Icinga Modules. Of course, it doesn’t hurt to know the basics of web development. This way or the other – Icinga Web allows you to write your own modules with or without in-depth PHP/HTML/CSS knowledge.
Check out the Icinga Modules Training Course on GitHub.
Developer Guide in Process
The guide we already have is definitely a good starting point, but we want to push this further. We started collecting feedback to create a complete Icinga Web Development Guide.
We want to invite you to participate and tell us what you need to be more successful with your Icinga Modules. Join the discussion on GitHub!