We are using a variety of tools to ensure that our applications do not leak memory, suffer from performance issues or actually trigger unwanted behavior. This tool stack changes over time, and it is also different for web, script and binary applications. Next to the Icinga bits I am responsible for the LConf Backend and other Perl foo here at NETWAYS – I’ve already written about profiling Perl. During Icinga 1.x and 2.x development we’ve come around a couple of tools for profiling memory consumption with Massif or using the Google perftools.

One of our specialties at NETWAYS Development is further that we’re capable of identifying and resolving issues directly – be it performance, memory, locking, race conditions, etc. aside from the code we’re developing and running at customers.

The perfect code vs performance

While the perfect code does not exist, it’s always interesting and also required to refactor your own code parts based on current conditions and requirements. The code in 2.2.4 had one function interface being called, namely AddObject(). This function is merely doing the following for ‘repository add’ and ‘node update-config':

  • Get all the object names from `repository.d` and checking if the added object already exists
  • Create a new object by attributes and run it against the Icinga 2’s config validation
  • Check if the change already exists by reading the `changes` directory
  • Add the change to the changelog (for calling ‘commit’ later on)

This is perfectly fine for keeping the same functionality shared among several occasions where this code is used. But we’ve run into severe performance issues with like 20000 calls to AddObject() inside one ‘node update-config’ run.

How to tackle the problem

Valgrind provides a tool named callgrind which tracks the function calls and time of a specific binary being run. While this is a bit slower than the Google perftools, it provides more detailed data. The ‘callgring.out.PID’ file can then be visualized in KCacheGrind.

Install Valgrind alongside with KcacheGrind. I’m using Fedora 21, other distributions use similar package names.

# yum install valgrind kcachegrind graphviz

In order to profile Icinga 2 with all debug symbols included, I’m compiling Icinga 2 with debug symbols enabled: -DCMAKE_BUILD_TYPE=Debug (Note: Using Icinga 2 packages you’ll get a separate package).

Valgrind requires a bunch of parameters which are easier being modified in a small script. I’m also running the direct debug build binaries instead of the installed binary here. Generating some sort of huge debug config inside the Icinga 2 cluster and node inventory is left to the reader’s imagination ;-) (I’ll write a different blog post for that sooner or later).

# vim callgrind_icinga2

#!/bin/bash

valgrind \
-v \
--trace-children=yes \
--tool=callgrind \
--simulate-cache=yes \
--collect-jumps=yes \
--dump-instr=yes \
--dump-line=yes \
/home/michi/coding/icinga/icinga2/debug/Bin/Debug/icinga2 node update-config

# sudo ./callgrind_icinga2

If you want to enforce a manual dump before the program ends, you can invoke the following command:

# callgrind_control -d

 

Visualize and analyze the bottlenecks

Opening the callgrind.out file(s)

$ sudo kcachegrind callgrind.out.16903

unveiled that there were certain unnecessary calls to generic functions.

  • Getting objects/changes on each AddObject() call is useless
  • ‘node update-config’ would cause AddObject() to validate each object. But we know already we’re right not parsing user’s input from the cli arguments.

Solve the problem

Refactoring the code and allowing to pass one-time collected objects/changes as well as suppressing configuration validation solved the problem in the end. Still it unveiled that you should sometimes stop feature development and profile your own application :-)

Michael Friedrich

Autor: Michael Friedrich

Michael ist Icinga-Core-Developer und im Rahmen des Icinga-Projekts schon viele Jahre mit NETWAYS in Kontakt. Im Dezember 2012 hat er das schöne Wien verlassen und ist nun bei uns in den Bereichen Development und Consulting im Einsatz. Durch seine unglaubliche Aktivität im Monitoring-Portal und auf diversen Mailinglisten ist Michael in den vergangenen Jahren für ca. 20% des österreichischen Webtraffics verantwortlich.

lconf_logoWe’ve recently released LConf 1.4.3 and the first beta of 1.5.0 including performance improvements. This time, we’ve come around a couple of bugs with the Icinga 2 export and therefore release 1.4.4.

Additionally we’re working on getting things straightened up for the final 1.5.0 release. To get things going aside from performance improvements, there’s a new deployment script capable of Icinga 2 zones.d as well as additional schema changes (icon_image). Keep your fingers crossed, 1.5.0 is scheduled end of Q1. This time it’s 1.5.0-rc1 time.icinga_logo_200x69

Grab them while they’re hot and let us know how much better 1.5.x scales!

 

Michael Friedrich

Autor: Michael Friedrich

Michael ist Icinga-Core-Developer und im Rahmen des Icinga-Projekts schon viele Jahre mit NETWAYS in Kontakt. Im Dezember 2012 hat er das schöne Wien verlassen und ist nun bei uns in den Bereichen Development und Consulting im Einsatz. Durch seine unglaubliche Aktivität im Monitoring-Portal und auf diversen Mailinglisten ist Michael in den vergangenen Jahren für ca. 20% des österreichischen Webtraffics verantwortlich.

Anfang letzter Woche haben wir wie jedes Jahr unser Jahresmeeting gemacht. Neben einem Rückblick auf Vergangenes (es ist gut das manche Bilder nicht den Weg auf Facebook und YouTube finden), geht es vor allem um die Strategie und Ausrichtung der kommenden Monate. Da wir in Summe mehr als 40 Kolleginnen und Kollegen sind, ist das zunehmend auch eine unternehmerische Herausforderung alle auf dem Laufenden zu halten.

Persönlich ist es für mich ein Privileg mit den Menschen hier zusammenzuarbeiten und vermutlich rührt meine Abneigung gegen das Home-Office in der Hauptsache daher, dass ich hier mit ihnen zusammen sein will, schimpfen möchte wenn in der Kaffeemaschine mal wieder kein Wasser ist oder auch die leere Flasche in den vollen Kasten zurückgestellt wird. Das macht es für mich aus.

Besonders gefreut haben sich Julian und ich, dass wir auch noch beschenkt wurden. Und damit ich nichts vergesse, hier die Aufzählung:

  1. Aus irgendeinem Grund ist man unsere In-N-Out Burger Leidenschaft auf die Schliche gekommen; fragt mich nicht warum. Dafür haben wir gleich die entsprechende Büroausstattung bekommen. Da die Strassenschilder gut zu lesen sind, habe ich bereits die Location des Bildes identifiziert und ich gelobe feierlich mir dort baldmöglichst einen Double-Double reinzuziehen.
  2. Es kommt vor, das wir hier im Büro einen trinken (es muss nicht zwingend Alkohol sein, aber es wäre auch verlogen die Wahrheit zu verbiegen) und G&T hat sich in den letzten Jahren zu einer sehr beliebten Kombi bei NETWAYS entwickelt. Neben Not-Ouzo gehört er also zum festen Bestandteil jeder NETWAYS-Veranstaltung und mit unseren beiden neuen Gläsern sind wir bestens für alles Kommende ausgestattet.
  3. Wir wurden aber nicht mit den Gläsern alleine gelassen, sondern kommen auch noch in den unglaublichen Genuss einer Gin&Tonic-Verkostung. Hier können wir ein paar (ich nehme an so 175) Sorten Gin probieren und wissen hoffentlich worauf es ankommt. Und jetzt das Beste: Da dank Social Media alle super informiert sind, findet die Verkostung einen Tag nach dem Helene Fischer Konzert statt. Besser geht es doch nicht, oder?!
  4. Angeblich soll es passiert sein, dass ich die ein oder andere Veranstaltung mit meiner Musik beschallt habe. So manchen Kollegen (die Kolleginnen tanzen zumindest immer) rollt es die Zehennägel nach oben und es wurde auch schon offen über Meuterei gesprochen, aber aus irgendeinem Grund (ggf. gibt es einen Zusammenhang mit 2) läuft spätestens nach einer Stunden trotzdem wieder Mickie Krause. Damit ich das nicht vorhandene DJ-Wissen noch besser zur Geltung bringen kann, bin ich nun stolzer Besitzer eines iDJ Live. Das Ding kann man mit seinem iPad oder iPhone verbinden, Zugriff auf Spotify aktiveren und los gehts. Ich gebe zu die Musik wird nicht besser aber jetzt kann ich die Lieder so professionell ineinander übergehen lassen, dass man glaub es wäre nur ein langes schlechtes Lied.

Ich habe mich riesig gefreut und an dieser Stelle nochmals DANKE an die Besten der Besten der Besten -> NETWAYS!

Unsere Playlisten sind natürlich (Open Source, ist doch klar) public und können hier bei Spotify gehört werden. Natürlich unter Ausschluss jeder juristischen Verantwortung bei Scheidung oder Kündigung.

*** Nachtrag ***

Der Austria-Pop lässt sich natürlich auch nicht vermeiden. Danke Michi!

Bernd Erk

Autor: Bernd Erk

Bernd ist einer der Geschäftsführer der NETWAYS Gruppe und verantwortet das Tagesgeschäft. Da er in einem früheren Leben mit Java und Oracle Datenbanken gearbeitet hat, kümmert er sich immer noch gerne um das Thema Reporting - sowohl bei NETWAYS, als auch im Icinga Team. In seiner knappen Freizeit streitet er sich mit seinem Sohn, wer das iPad gerade benutzen darf und widmet sich der Weiterverbreitung der gehobenen Schaschlik-Kultur.

Continuous Delivery with Docker von und mit Tobias Schwab.

OSDC? Noch nie gehört…

Das ist aber schade und fast schon ein unentschuldbares Versäumnis!
Aber wir holen das nach:

Die Open Source Data Center Conference (kurz OSDC) ist unsere internationale Konferenz zum Thema Open Source Software in Rechenzentren und großen IT-Umgebungen. 2015 findet sie zum siebten Mal statt und bietet mit dem Schwerpunktthema Agile Infrastructures ganz besonders erfahrenen Administratoren und Architekten ein Forum zum Austausch und die Gelegenheit zur Aneignung des aktuellsten Know-Hows für die tägliche Praxis. Diesmal treffen wir uns dafür in Berlin!
Workshops am Vortag der Konferenz und das im Anschluss an die Veranstaltung stattfindende Puppet Camp komplettieren dabei das Rundum-sorglos-Paket für Teilnehmer, die gar nicht genug Wissen in sich aufsaugen können.

Eva Häusler

Autor: Eva Häusler

Eva ist bei NETWAYS für das Marketing zuständig. Gerüchten zufolge wurde sie vor etwa einem Jahrzehnt in einer Kiste Braunschweiger Honigkuchen von Niedersachsen nach Franken geschmuggelt und wird seitdem hier in Geiselhaft gehalten. Nach einem Germanistikstudium mit begleitenden Ausflügen in die Nürnberger Literaturszene, hat sie bei NETWAYS in der Eventabteilung angefangen. Inzwischen kommt ihre geballte Wortgewalt im Marketing nutzbringend zum Einsatz.

1) Ihre Hosts mit Paragraphen benennen:

object Host "§1 testserver" {
  import "generic-host"
  address = "127.0.0.1"
}

object Host "§2 prodserver" {
  import "generic-host"
  address = "127.0.0.2"
}

3things_i2cfg_1

2) Sprechende Namen für Templates verwenden:

template Service "Kaffeemaschinen-/Kuchen-/Cookie-Monitoring Template; Bei beschwerden: dev@null.com" {
  import "generic-service"
  max_check_attempts = 3
  check_interval = 1m
  retry_interval = 30s
  check_command = "check_coffee_cookie"
}

3) Unicode-Zeichen für Services verwenden:

apply Service "Liegt Schnee? ☃" {
  import "generic-service"
  check_command = "check_snow"
  assign where host.name == "§1 testserver"
}

3things_i2cfg_3

Tobias Redel

Autor: Tobias Redel

Tobias hat nach seiner Ausbildung als Fachinformatiker bei der Deutschen Telekom bei T-Systems gearbeitet. Anfangs als Systemengineer für UNIX, später als Research & Development Engineer. Seit August 2008 ist er bei NETWAYS, wo er als Managing Consultant Kunden in Sachen Open Source und Monitoring unterstützt. Insgeheim arbeitet er jedoch an seiner dritten Millionen Euro (aus den ersten beiden ist nix geworden) und versucht die Weltherrschaft an sich zu reißen.

Page 1 of 5171234...10...>>