DEV stories: Icinga Core trainees in the making

DEV stories: Icinga Core trainees in the making

When my dev leads approached me with the idea to guide a trainee in the Icinga core topic, I was like … wow, sounds interesting and finally a chance to share my knowledge.

But where should I start and how can it be organized with my ongoing projects?


Prepare for the unexpected

My view on the code and how things are organized changed quite a bit since then. You cannot expect things, nor should you throw everything you know into the pool. While working on Icinga 2.11, I’ve collected ideas and issues for moving Henrik into these topics. In addition to that, we’ve improved on ticket and documentation quality, including technical concepts and much more.

My colleagues know me as the “Where is the test protocol?” PR reviewer. Also, reliable configuration and steps on reproducing the issues and problems are highly encouraged. Why? The past has proven that little to zero content in ticket makes debugging and problem analysis really hard. Knowledge transfer is an investment in the future of both NETWAYS and Icinga.

Some say, that documentation would replace their job. My mission is to document everything for my colleagues to make their life easier. Later on, they contribute to fixing bugs and implement new features while I’m moving into project management, architecture and future trainees. They learn what I know, especially “fresh” trainees can be challenged to learn new things and don’t necessarily need to change habits.


Clear instructions?

At the beginning, yes. Henrik started with the C++ basics, a really old book from my studies in 2002. C++11 is a thing here, still, the real “old fashioned” basics with short examples and feedback workshops prove the rule. Later on, we went for an online course and our own requirements.

Since Icinga 2 is a complex tool with an even more complex source code, I decided to not immediately throw Henrik into it. Instead, we had the chance to work with the Tinkerforge weather station. This follows the evaluation from our Startupdays and new product inside the NETWAYS shop. The instructions were simple, but not so detailed:

  • Put the components together and learn about the main functionality. This is where the “learn by playing” feeling helps a lot.
  • Explore the online documentation and learn how to use the API bindings to program the Tinkerforge bricks and sensors.
  • Use the existing check_tinkerforge plugin written in Python to see how it works
  • Write C++ code which talks to the API and fetches sensor data

Documentation, a blog post and keeping sales updated in an RT ticket was also part of the project. Having learned about the requirements, totally new environment and communication with multiple teams, this paves the way for future development projects.



In order to debug and analyse problems or implement new features, we need to first understand the overall functionality. Starting a new project allows for own code, experiences, feedback, refactoring and what not. Icinga 2 as core has grown since early 2012, so it is key to understand the components and how everything is put together.

Where to start? Yep, visit the official Icinga trainings for a sound base. Then start with some Icinga cluster scenarios, with just pointing to the docs. This takes a while to understand, so Henrik was granted two weeks to fully install, test and prepare his findings.

With the freedom provided, and the lessons learned about documentation and feedback, I was surprised with a Powerpoint presentation on the Icinga cluster exercises. Essentially we discussed everything in the main area in our new NETWAYS office. A big flat screen and the chance that colleagues stop by and listen or even add to the discussion. Henrik was so inspired to write a blogpost on TLS.


Focus on knowledge

In the latest session, I decided to prove things and did throw a lot of Icinga DSL exercises at Henrik, also with the main question – what’s a DSL anyways?

Many things in the Icinga DSL are hidden gems, with the base parts documented, but missing the bits on how to build them together. From my experience, you cannot explain them in one shot, specific user and customer questions or debugging sessions enforce you to put them together. At the point when lambda functions with callbacks were on the horizon, a 5 hour drive through the DSL ended. Can you explain the following snippet? 😘

object HostGroup "hg1" { assign where host.check_command == "dummy" }
object HostGroup "hg2" {
  assign where true
//  assign where in Cities

object Host "runtime" {
  check_command = "dummy"
  check_interval = 5s
  retry_interval = 5s

  vars.dummy_text = {{
    var mygroup = "hg2"
    var mylog = "henrik"
  //  var nodes = get_objects(Host).filter(node => mygroup in node.groups)

    f = function (node) use(mygroup, mylog) {
      log(LogCritical, "Filterfunc", )
      return mygroup in node.groups
    var nodes = get_objects(Host).filter(f)

    var nodenames = =>
    return nodenames.join(",")
   // return Json.encode( =>


We also did some live coding in the DSL, this is now a new howto on the Icinga community channels: “DSL: Count check plugin usage from service checks“. Maybe we’ll offer an Icinga DSL workshop in the future. This is where I want our trainees become an active part, since it also involves programming knowledge and building the Icinga architecture.



Henrik’s first PR was an isolated request by myself, with executing a check in-memory instead of forking a plugin process. We had drawn lots of pictures already how check execution generally works, including the macro resolver. The first PR approved and merged. What a feeling.

We didn’t stop there – our NETWAYS trainees are working together with creating PRs all over the Icinga project. Henrik had the chance to review a PR from Alex, and also merge it. Slowly granting responsibility and trust is key.

Thanks to trainees asking about this, Icinga 2 now also got a style guide. This includes modern programming techniques such as “auto”, lambda functions and function doc headers shown below.

 * Main interface for notification type to string representation.
 * @param type Notification type enum (int)
 * @return Type as string. Returns empty if not found.
String Notification::NotificationTypeToString(NotificationType type)
	auto typeMap = Notification::m_TypeFilterMap;

	auto it = std::find_if(typeMap.begin(), typeMap.end(),
		[&type](const std::pair<String, int>& p) {
			return p.second == type;

	if (it == typeMap.end())
		return Empty;

	return it->first;



Learn and improve

There are many more things in Icinga: The config compiler itself with AST expressions, the newly written network stack including the REST API parts, feature integration with Graphite or Elastic and even more. We’ll cover these topics with future exercises and workshops.

While Henrik is in school, I’m working on Icinga 2.11 with our core team. Thus far, the new release offers improved docs for future trainees and developers:

This also includes evaluating new technologies, writing unit tests and planning code rewrites and/or improvements. Here’s some ideas for future pair programming sessions:

  • Boost.DateTime instead of using C-ish APIs for date and time manipulation. This blocks other ideas with timezones for TimePeriods, etc.
  • DSL methods to print values and retrieve external data
  • Metric enhancements and status endpoints


Trainees rock your world

Treat them as colleagues, listen to their questions and see them “grow up”. I admit it, I am sometimes really tired in the evening after talking all day long. On the other day, it makes me smile to see a ready-to-merge pull request or a presentation with own ideas inspired by an old senior dev. This makes me a better person, every day.

I’m looking forward to September with our two new DEV trainees joining our adventure. We are always searching for passionate developers, so why not immediately dive into the above with us? 🙂 Promise, it will be fun with #lifeatnetways and #drageekeksi ❤️

Michael Friedrich
Michael Friedrich
Senior Developer

Michael ist seit vielen Jahren Icinga-Entwickler und hat sich Ende 2012 in das Abenteuer NETWAYS gewagt. Ein Umzug von Wien nach Nürnberg mit der Vorliebe, österreichische Köstlichkeiten zu importieren - so mancher Kollege verzweifelt an den süchtig machenden Dragee-Keksi und der Linzer Torte. Oder schlicht am österreichischen Dialekt der gerne mit Thomas im Büro intensiviert wird ("Jo eh."). Wenn sich Michael mal nicht in der Community helfend meldet, arbeitet er am nächsten LEGO-Projekt oder geniesst...

Sommerhitze & Powershell 3 kleine Tipps

Hallo Netways Follower,

Ich melde mich dies mal mit einem kurzen aber meist vergessenen Thema nämlich wie kriegt man unter Windows diese vermaledeiten Powershell Skripts korrekt zum laufen.

Wenn man bei einem normalen Icinga2 Windows Agenten diese in ‘Betrieb’ nehmen will benötigt es etwas Handarbeit und Schweiß bei diesen Sommertagen um dies zu bewerkstelligen.

Trotzdem hier ein paar Tipps:

1) Tipp “Powershell Skripte sollten ausführbar sein”

Nachdem der Windows Agent installiert und funktional ist sollte man sich auf der Windows Maschine wo man das Powershell Skript ausführen möchte in die Powershell (nicht vergessen mit Administrativer Berechtigung) begeben.

Um Powershell Skripts ausführen zu können muss dies erst aktiviert werden dazu gibt es das folgende Kommando

Set-ExecutionPolicy Unrestricted
Set-ExecutionPolicy RemoteSigned
Set-ExecutionPolicy Restricted

Hier sollte zumeist RemoteSigned ausreichend sein, aber es kommt wie immer auf den Anwendungsfall an. More Info here.

Nach der Aktivierung kann man nun überprüfen ob man Powershell Skripts ausführen kann.
Hierzu verwende ich meist das Notepad um folgendes zu schreiben um anschließend zu prüfen ob das oben aktivierte auch klappt.

Also ein leeres Windows Notepad mit dem folgenden befüllen:

Write-Host "Ash nazg durbatulûk, ash nazg gimbatul, ash nazg thrakatulûk agh burzum-ishi krimpatul. "

Das ganze dann als ‘test.ps1’ speichern.

Nun wieder in die Powershell zurück und an dem Platz wo man das Powershell Skript gespeichert hat es mit dem folgenden Kommando aufrufen.
PS C:\Users\dave\Desktop> & .\test.ps1
Ash nazg durbatulûk, ash nazg gimbatul, ash nazg thrakatulûk agh burzum-ishi krimpatul.

Sollte als Ergebnis angezeigt werden damit Powershell Skripts ausführbar sind.

2) Tipp “Das Icinga2 Agent Plugin Verzeichnis”

In der Windows Version unseres Icinga2 Agents ist das standard Plugin Verzeichnis folgendes:
PS C:\Program Files\ICINGA2\sbin>

Hier liegen auch die Windows Check Executables.. und ‘.ps1’ Skripte welche auf dem Host ausgeführt werden sollten/müssen auch hier liegen.

3) Tipp “Powershell 32Bit & 64Bit”

Wenn ein Skript relevante 64Bit Sachen erledigen muss kann auch die 64er Version explizit verwendet werden in den Check aufrufen.

Das heißt wenn man den object CheckCommand “Mein Toller Check” definiert kann man in dem Setting:

command = [ "C:\\Windows\\sysnative\\WindowsPowerShell\\v1.0\\powershell.exe" ] //als 64 Bit angeben und
command = [ "C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe" ] // als 32Bit.

Hoffe die drei kleinen Tipps erleichtern das Windows Monitoring mit Powershell Skripts.
Wenn hierzu noch Fragen aufkommen kann ich unser Community Forum empfehlen und den ‘kleinen’ Guide von unserem Kollegen Michael. Icinga Community Forums

Ich sag Ciao bis zum nächsten Mal.

David Okon
David Okon
Senior Consultant

Weltenbummler David hat aus Berlin fast den direkten Weg zu uns nach Nürnberg genommen. Bevor er hier anheuerte, gab es einen kleinen Schlenker nach Irland, England, Frankreich und in die Niederlande. Alles nur, damit er sein Know How als IHK Geprüfter DOSenöffner so sehr vertiefen konnte, dass er vom Apple Consultant den Sprung in unser Professional Services-Team wagen konnte. Er ist stolzer Papa eines Sohnemanns und bei uns mit der Mission unterwegs, unsere Kunden zu...

Get your Early Bird Tickets for Milan!

What is the most fashionable way to travel to Milan this year? Join the Icinga Camp in Italy!

Together with their Italian partner Würth Phoenix Icinga is for the first time organizing an Icinga Camp in Italy.
And the good thing: You can still get an Early Bird Ticket until the end of this week! Be fast and register now!


The first confirmed Speakers


Bernd Erk State of Icinga
Michele Santuari

NetEye 4 based on Icinga 2

Simone Mainardi

Integrating Icinga 2 and ntopng

Rocco Pezzani

Discover the real user experience with Alyvix

Blerim Sheqa

Challenges of Monitoring Big Infrastructure


Icinga Camps are dedicated to Icinga – best practices, add-ons, tools, and the projects continuous development. The Camps offer the perfect platform to learn about new techniques and monitoring updates and of course to exchange views and establish new ties with other monitoring professionals. Icinga developers, community and enterprise users come together to discuss the latest trends and share knowledge, experiences and stories.

Sounds interesting? Register now!

Julia Hornung
Julia Hornung
Marketing Manager

Julia ist seit Juni 2018 Mitglied der NETWAYS Family. Vor ihrer Zeit in unserem Marketing Team hat sie als Journalistin und in der freien Theaterszene gearbeitet. Ihre Leidenschaft gilt gutem Storytelling, klarer Sprache und ausgefeilten Texten. Privat widmet sie sich dem Klettern und ihrer Ausbildung zur Yogalehrerin.

Meine erste Reise bei NETWAYS!

Letzte Woche war es soweit ich durfte meine erste Dienstreise antreten. Zwar handelte es sich hierbei nur um eine Schulung, aber immerhin. Es ging nach München für die Icinga 2 Fundamentals Schulung.

Mit Lennart als Trainer, ging es Montag Nachmittag los. Zwei Stunden später waren wir angekommen. Natürlich mussten wir noch den Schulungsraum auf Vordermann bringen. Tische zurecht rücken, mit Notebooks bestücken, Unterlagen verteilen, Stromanschluss bereitstellen und so weiter. Der Aufbau nahm schon etwas Zeit in Anspruch, aber zu zweit ging das ganze doch schneller als erwartet. Ab aufs Zimmer um für den nächsten Tag fit zu sein, denn um neun Uhr geht es los. Themen der Icinga 2 Fundamentals Schulung? Wie der Name schon erwarten lässt, Grundkentnisse und Grundlagen zu Icinga2. Doch wer Lennart kennt, weiß dass er in den gegebenen Tagen meist mehr schafft als geplant.

Also eine erholsame Nacht im Hotel später wurden die Schulungsteilnehmer in Empfang genommen. Um acht Uhr trafen die ersten bereits ein um ihre Plätze einzunehmen. Nach einer kleinen Vorstellungsrunde bei der sich Lennart mit dem derzeitigen Wissenstand der Teilnehmer auseinandersetzte sind wir auch schon gleich mit Icinga2 eingestiegen. Egal ob Icinga selbst, einfache Plugins oder der Icinga Director es wurde alles abgedeckt.

Selbstverständlich gab es reichlich Pausen, sowie Getränke und Essen zu genüge. Auf leeren Magen lässt es sich schlecht lernen und die Worte NETWAYS und leerer Magen sind nicht miteinander vereinbar. Am zweiten Schulungstag wurde es gegen Abend mal Zeit für einen Tapetenwechsel und wir machten uns auf dem Weg zum Augustiner Klosterwirt. In geselliger Atmosphäre in diesem rauen Etablissement wurde der Abend ausgeklungen und nach einem deftigen Abendessen auch das ein oder andere Bier getrunken.

Die vier Tage gingen schnell vorüber. Für mich als zukünftigen Consultant war es praktisch zu sehen, wie Lennart den Schulungsteilnehmern individuell zur Seite stehen konnte und noch während der Schulung Auskunft gegeben konnte über die Anwendung in den entsprechenden Umgebungen der Kunden. Es waren vier sehr intensive Tage vollgestopft mit sehr viel Informationen. Seit Freitag bin ich wieder in Nürnberg und jetzt heißt es erst einmal sacken lassen. Wird bestimmt nicht lange dauern bis ich mein erstes Icinga-Projekt bekomme.

Um ehrlich zu sein, war ich schon ein bisschen nervös. Vor der ersten richtigen Dienstreise, aber jetzt kann ich die nächste kaum erwarten.

Tobias Bauriedel
Tobias Bauriedel
Junior Consultant

Tobias ist ein offener und gelassener Mensch, dem vor allem der Spaß an der Arbeit wichtig ist. Bei uns macht er zurzeit seine Ausbildung zum Fachinformatiker. In seiner Freizeit ist er viel unterwegs und unternimmt gern etwas mit Freunden.
Icinga Camps in Stockholm, Mailand und Zürich

Icinga Camps in Stockholm, Mailand und Zürich

Die Icinga Camps die von Icinga in Kooperation mit seinen Partnern organisiert werden sind eine Klasse für sich: Diese Events bieten eine Platform für Experten im Bereich Monitoring und sind gleichzeitig einen guter Einstieg für Beginner. Bei jeder Veranstaltung gibt es beeindruckende Geschichten von langjährigen Usern und Entwicklern zu hören. Es ist aber auch ein Ort an dem aktiv mit gleichgesinnten über die eigenen Herausforderungen und Erfolge diskutiert wird. An jedem Icinga Camp bekommt man die letzten Neuigkeiten aus dem Icinga Universum: Direkt vom Icinga Team und auch aus der Community.

Icinga hat den Call for Papers und die Registrierung für die kommenden Icinga Camps in Stockholm, Mailand und Zürich eröffnet!

Gesucht werden Präsentationen über außergewöhnliche Erfolge, besondere Erfahrungen und natürlich auch die Herausforderungen die beim Betrieb in Produktion auftreten. Hier sind einige Beispiele worüber sich dein Talk drehen könnte:

  • Best Practices – Viele Wege führen nach Rom, aber welcher ist der beste?
  • Experience – Jedes Monitoring Setup ist besonders, erzähl uns etwas über deines!
  • Monitoring Culture – Oft erfordert Monitoring auch Veränderungen in der Organisation
  • Integrations – Welche der Zahlreichen Integrationen kommen bei euch zum Einsatz, und in welcher Kombination?

Talk Einreichen

Blerim Sheqa
Blerim Sheqa
Product Manager

Blerim ist seit 2013 bei NETWAYS und seitdem schon viel in der Firma rum gekommen. Neben dem Support und diversen internen Projekten hat er auch im Team Infrastruktur tatkräftig mitgewirkt. Hin und wieder lässt er sich auch den ein oder anderen Consulting Termin nicht entgehen. Inzwischen ist Blerim als Product Manager für Icinga tätig und kümmert sich dort auch um die Partner.

Einstieg in Icinga mit dem NETWAYS Icinga Starterpaket

Icinga überwacht alles, ist offen, sehr gut dokumentiert und für jede Umgebung anpassbar. Und damit der Start in das eigene Monitoringsystem oder der Umstieg von Nagios oder Icinga 1.x reibungslos funktioniert, haben wir das Icinga Starterpaket geschnürt. In 4 Tagen Workshop vor Ort beim Kunden stellen wir zusammen mit euch die Basis für eine Open Source Überwachungsumgebung für eure Server, Netzwerkhardware, Anwendungen, Datenbanken und Betriebssysteme auf die Beine und führen euch in Icinga ein.

Was können wir in 4 Tagen Workshop leisten?

  • Installation von Icinga 2 mit Icinga Web 2 und Datenbankanbindung
  • Installation einer Graphing Lösung zur Darstellung von Performancedaten
  • Installation des Business Process Addons
  • Beispielhafte Überwachung von Linux Servern
  • Beispielhafte Überwachung von Windows Servern
  • Beispielhafte Überwachung einer Datenbank (MSSQL, Oracle, DB2, MaxDB, MySQL, ..)
  • Beispielhafte Überwachung von Netzwerkkomponenten per SNMP (MIBs müssen vorhanden sein)
  • Beispielhafte Überwachung deiner Anwendungen
  • Einrichtung von E-Mail Benachrichtigungen

Wir empfehlen vor der Buchung des Icinga Starterpakets Standard den Besuch unserer Icinga Fundamentals Schulung. Diese Schulung könnt ihr auch als Modul zu diesem Starterpaket hinzubuchen.

Natürlich passen wir unser Workshopangebot auch komplett an eure Anforderungen an. Wir freuen uns auf eure Anfrage.

Martin Krodel
Martin Krodel
Head of Sales

Der studierte Volljurist leitet bei NETWAYS die Sales Abteilung und berät unsere Kunden bei ihren Monitoring- und Hosting-Projekten. Privat reist er gerne durch die Weltgeschichte und widmet sich seinem ständig wachsenden Fuhrpark an Apple Hardware.