ReaR mal anders

Bereits vor ein paar Jahren habe ich einen Blogpost zur Disaster Recovery Lösung Relax-and-Recover (kurz: ReaR) geschrieben. Vor Kurzem hatte ich ein Anwendungsbeispiel, in dem ich ebenfalls auf die in vielen Fällen bewährte Lösung zugreifen wollte: Ziel war es, unsere Schulungsnotebooks auch außerhalb des Headquarters nach erfolgtem Training möglichst automatisch auch für nichttechnische Anwender auf den Auslieferungszustand zurück zu setzen. Bisher werden die Notebooks mittels Foreman jedes Mal neu provisoniert, was v.a. einiges an unnötiger Zeit frisst.

Demzufolge lag der Ansatz nahe, das mit ReaR zu lösen. Da ich auf zusätzliche Medien wie USB-Sticks verzichten wollte und das Ganze auch offline funktionieren soll, bleibt nur die lokal verbaute Platte als Speicherort für Rescueimage und Backupdateien übrig. Zudem sollte noch ein Booteintrag für die Rücksetzung erstellt werden. Die ReaR-Konfiguration in “/etc/rear/local.conf” dazu sieht so aus:

OUTPUT=ISO
OUTPUT_URL=file:///backupshare
BACKUP=NETFS
BACKUP_URL=file:///backupshare
GRUB_RESCUE=1

Problem dabei ist, dass die Backupdateien als Archiv (backup.tar.gz) in einer der Partitionen auf der Festplatte (/dev/sdaX) liegen. Beim Wiederherstellungsvorgang löscht ReaR leider standardmäßig alle Laufwerksinformationen und erstellt diese neu, sodass die Backupdateien in dem Fall verloren gehen. Mit dem Parameter PRE_RECOVERY_SCRIPT kann man den Backupshare zumindest mounten und das Backuparchiv in das Filesystem des Rescueimages kopieren.

Ein anderer Ansatz ist die Backupdateien direkt im IOS-Image des Rescuesystems abzulegen, das geht mit folgender Konfiguration:

OUTPUT=ISO
OUTPUT_URL=file:///backupshare
BACKUP=NETFS
BACKUP_URL=iso://backup
GRUB_RESCUE=1

Auch hier zeigen sich allerdings in der Praxis Probleme. Je nach Größe der Backupdateien wächst das ISO-Image dadurch natürlich entsprechend an. Außerdem verwendet das von uns auf den Schulungsnotebooks eingesetzte Betriebssystem, CentOS 7, zum Erstellen des ISO’s in der Standardinstallation genisoimage. Hier besteht eine feste Grenze von 4GB pro Image. Diese lässt sich zwar mit ISO_MAX_SIZE bei ReaR fix konfigurieren, führt aber dazu, dass die Backupdateien im Rescueimage aufgrund des Abbruchs eben nicht vollständig enthalten sind. Indem man genisoimage gegen das nachzuinstallierende xorriso austauscht und den symbolischen Link für mkisofs anpasst, lässt sich die Begrenzung jedoch umgehen. Je nach Größe der Backupdateien macht das allerdings oft nur bedingt Sinn.

In unserem Fall hat sich gezeigt, dass ReaR für das spezielle Anwendungsszenario der lokalen Wiederherstellung von Notebooks leider nicht die ideale Wahl ist, da die Software ursprünglich für andere Anwendungszwecke konzipiert wurde. Die Suche nach der optimalen Lösung dauert daher aktuell noch an…

Markus Waldmüller

Autor: Markus Waldmüller

Markus war bereits mehrere Jahre als Sysadmin in Neumarkt i.d.OPf. und Regensburg tätig. Nach Technikerschule und Selbständigkeit ist er nun Anfang 2013 bei NETWAYS als Lead Senior Consultant gelandet. Wenn er nicht gerade die Welt bereist, ist der sportbegeisterte Neumarkter mit an Sicherheit grenzender Wahrscheinlichkeit auf dem Mountainbike oder am Baggersee zu finden.

Noch mehr Inhalte für unser Graphing Training

Nachdem wir in den ersten Monaten des Jahres mit unseren Trainings etwas zurückhaltend waren, geht’s nun wieder voll los. Neben vielen anderen Schulungen, startet

in knapp zwei Wochen auch das Graphite + Grafana Training in die neue Saison. Gerade in dem Bereich gibt es allerlei Neuigkeiten und so war es für uns natürlich klar diesen Fortschritt auch in die Schulungsunterlagen einfließen zu lassen.

Zuerst stand natürlich Versionspflege an: Die Graphite Version in Folien und Trainingsumgebung wurde auf 1.1.2 angehoben, die große Änderung seit 1.1.x ist der sog. Tag Support.

Die wohl größte Aufmerksamkeit gilt aber Grafana in der neuen Version 5. Dashboards, Erscheinungsbild, Einstellungen und Themes wurden komplett überarbeitet. Außerdem können Dashboards zu Verzeichnissen zusammengefasst werden, was große Vorteile und Erleichterungen bei der Vergabe von Berechtigungen bringt. In dem Zuge besteht nun auch die Möglichkeit Benutzer in Teams zu strukturieren.

Grafana v5

Das InfluxDB-Kapitel wurde auf die aktuelle Version 1.5 angehoben. Neben InfluxDB werfen wir in der Schulung auch einen kurzen Blick auf die anderen Komponenten des TICK-Stacks bestehend aus Telegraf, Chronograf und Kapacitor.

Auch die Integrationen haben wir gehörig überarbeitet: Der eingesetzte Icinga 2 Core und Icinga Web 2 wurden jeweils auf die aktuellen Versionen angehoben. Neben dem Grafana-Modul kann nun auch das kürzlich releaste Graphite-Modul für Icinga Web 2 behandelt werden. Der Logstash-Teil ist einer Kombination aus Icingabeat und Elasticsearch gewichen, sodass eine anschauliche Übung für Annotations in Grafana Platz findet.

Zusätzliche Slides stellen mögliche Alternativen zu den Standard Carbon-Komponenten vor und erklären dessen Vor- und Nachteile. Weiterhin geben wir Performancetipps und Hinweise auf mögliche Optimierungen der Graphite-Umgebung. In diesem Zusammenhang gehen wir insbesondere auf Bottlenecks und entsprechende Admin- und Benchmarktools ein.

Um die Darstellung der Folien und v.a. der Handouts zu verbessern, setzen wir auf eine neue Showoff-Version (0.19). Dazu wurde das CSS-Layout einer kompletten Überarbeitung unterzogen. Die eingesetzten VirtualBox-Images werden nun von Grund auf mit Vagrant provisioniert, wohingegen die Installation und Konfiguration der Notebooks nach wie vor mit Foreman und Puppet stattfindet.

Der Umfang des Trainings ist mit zwei Tagen gleich geblieben. Die neuen Inhalte werden in wenigen Tagen ebenso wie die Vagrantfiles auch auf dem GitHub-Repository zur Schulung verfügbar sein. Und auch danach geben wir uns größte Mühe mit unseren Trainings so nah wie möglich am “Puls der Zeit” zu sein.

Markus Waldmüller

Autor: Markus Waldmüller

Markus war bereits mehrere Jahre als Sysadmin in Neumarkt i.d.OPf. und Regensburg tätig. Nach Technikerschule und Selbständigkeit ist er nun Anfang 2013 bei NETWAYS als Lead Senior Consultant gelandet. Wenn er nicht gerade die Welt bereist, ist der sportbegeisterte Neumarkter mit an Sicherheit grenzender Wahrscheinlichkeit auf dem Mountainbike oder am Baggersee zu finden.

Annotations in Grafana

Im Zuge der diesjährigen Open Source Monitoring Conference durfte ich mit Timeseries & Analysis with Graphite and Grafana einen der Workshops am Vortag der eigentlichen Konferenz halten. Wie man dem Titel unschwer entnehmen kann spielte dabei auch Grafana eine besondere Rolle. Grafana ist vielen als schöneres Dashboard für Graphite bekannt und unterstützt mit Elasticsearch, CloudWatch, InfluxDB, OpenTSDB, Prometheus, MySQL als auch Postgres in der aktuellen Version 4.6.2 allerdings noch eine ganze Reihe weiterer Datensourcen nativ. Zusätzlich können diese herkömmlichen Datensourcen auch noch durch Community Plugins ergänzt werden.

Ganz besonders hilfreich ist es wenn man die Informationen aus verschiedenen Datensourcen miteinander vereint. So lassen sich beispielsweise Zusammenhänge besser erkennen und Rückschlüsse auf bestimmte Ereignisse ziehen, die ansonsten vielleicht unentdeckt blieben. Metriken, die z.B. aus Graphite stammen, können bei Grafana nun durch sogenannte Annotations um zusätzliche Informationen angereichert werden. Neben Annotations aus den unterstützten Datensourcen können solche Events seit v4.6 übrigens auch direkt in der eigenen Grafana-Datenbank gespeichert werden, ob man das wiederum möchte ist allerdings eine ganz andere Frage…

Als Praxisbeispiel habe ich für meinen Workshop im Rahmen der OSMC überraschenderweise Icinga gewählt. Hier ist es möglich über die Icinga 2 API verschiedene Daten wie Checkergebnisse, Statusänderungen, Benachrichtigungen, Bestätigungen, Kommentare oder auch Downtimes mit dem Icingabeat direkt an Elasticsearch oder wenn man möchte alternativ auch an Logstash zu senden. Über das Annotation-Feature von Grafana lassen sich so die Benachrichtigungen aus Icinga über die Elasticsearch Datasource passend zu den jeweiligen Statusänderungen der Host- oder Serivcechecks einblenden:

Wer dazu mehr erfahren möchte dem kann ich unsere Graphite + Grafana Schulung ans Herz legen, neben vielen anderen Themen werden dort auch Grafana und Annotations in aller Ausführlichkeit behandelt. Und wer’s nicht schafft, für den findet sich vielleicht der ein oder andere passende Workshop im Rahmen unserer Konferenzen.

Markus Waldmüller

Autor: Markus Waldmüller

Markus war bereits mehrere Jahre als Sysadmin in Neumarkt i.d.OPf. und Regensburg tätig. Nach Technikerschule und Selbständigkeit ist er nun Anfang 2013 bei NETWAYS als Lead Senior Consultant gelandet. Wenn er nicht gerade die Welt bereist, ist der sportbegeisterte Neumarkter mit an Sicherheit grenzender Wahrscheinlichkeit auf dem Mountainbike oder am Baggersee zu finden.

Trick 17 mit dem Director

Möchte man die Schnittmenge aus mehreren Importquellen im Icinga Director vereinen, so gibt es dafür einen Lösungsweg der bislang vielen noch nicht bekannt ist.

Beispielhaft dienen folgende zwei SQL-Tabellen als Ausgangslage, testhost03 ist dabei nur in der Tabelle “hosts01” enthalten:

MariaDB [cmdb]> SELECT * FROM cmdb.hosts01;
+----+------------+----------+---------+
| id | hostname   | address  | os      |
+----+------------+----------+---------+
|  1 | testhost01 | 10.0.0.1 | Windows |
|  2 | testhost02 | 10.0.0.2 | Linux   |
|  3 | testhost03 | 10.0.0.3 | Windows |
+----+------------+----------+---------+

MariaDB [cmdb]> SELECT * FROM cmdb.hosts02;
+----+------------+----------+---------+
| id | hostname   | address  | os      |
+----+------------+----------+---------+
|  1 | testhost01 | 10.0.0.1 | Windows |
|  2 | testhost02 | 10.0.0.2 | Linux   |
+----+------------+----------+---------+

Um nun die Daten aus beiden Quellen abzugleichen ohne gleich Objekte im Director zu erzeugen, behilft man sich mit einer Datenliste als Zwischenschritt. Die ID der neu erstellten Datenliste wird später benötigt und kann über die Director-Datenbank herausgefunden werden:

MariaDB [director]> SELECT * FROM director.director_datalist WHERE list_name = "Hosts from 2nd import source";
+----+------------------------------+-------------+
| id | list_name                    | owner       |
+----+------------------------------+-------------+
|  2 | Hosts from 2nd import source | icingaadmin |
+----+------------------------------+-------------+

Wie dem Namen der Liste unschwer zu entnehmen ist sollen dort die Hosts aus der 2ten Importquelle, also von “hosts02”, zwischengespeichert werden.

Mit diesen Informationen kann die entsprechende Sync Rule für die Synchronisation der Hosts aus der 2ten Quelle in die Datenliste erstellt werden. Neben der ID als jeweilige “list_id” (hier “2”) werden die Felder “entry_name” und “entry_value” definiert:

Nach dem Syncvorgang erhält die Datenliste die entsprechenden Einträge. Im Beispiel sind das testhost01 und testhost02. In der Import Source für die erste Datenquelle werden deren Einträge nun anhand des “Map”-Modifiers mit den Einträgen aus der Datenliste abgeglichen:

Damit ergibt sich folgende Vorschau der Import Source:

In der darauf aufbauenden Sync Rule ist es wichtig eine entsprechende Filter expression zu setzen:

Ist sie negiert, wie im vorangegangenen Beispiel, werden die Hosts die in beiden Datenquellen vorkommen erzeugt. Im Beispiel wären das testhost01 und testhost02. Liegt keine Negierung vor (z.B. “map=”), so werden nur die Hosts erzeugt die in der zweiten Datenquelle nicht vorkommen. Also beispielhaft testhost03. Damit der Filter greift, muss der Bezeichner (hier “map”) allerdings auch als Eigenschaft der Sync Rule vorkommen.

Der Icinga Director hält noch wesentlich mehr Funktionen für verschiedenste Anwendungsbereiche bereit. Das vorangegangene Beispiel dient lediglich dazu die Fähigkeiten dieses mächtigen Tools etwas zu veranschaulichen. Bei weiteren Fragen rund um den Director oder auch Icinga 2 stehen wir bei NETWAYS natürlich gerne zur Verfügung.

Markus Waldmüller

Autor: Markus Waldmüller

Markus war bereits mehrere Jahre als Sysadmin in Neumarkt i.d.OPf. und Regensburg tätig. Nach Technikerschule und Selbständigkeit ist er nun Anfang 2013 bei NETWAYS als Lead Senior Consultant gelandet. Wenn er nicht gerade die Welt bereist, ist der sportbegeisterte Neumarkter mit an Sicherheit grenzender Wahrscheinlichkeit auf dem Mountainbike oder am Baggersee zu finden.

Incredible Icinga Camp Bangalore

Anfang Mai war es so weit: Für mich ging’s ab nach Indien – genauer gesagt nach Bangalore, das eigentlich seit 2014 Bengaluru heißt und das IT-Zentrum des Landes darstellt. Dort fand im Rahmen der diesjährigen rootconf das erste Icinga Camp überhaupt in Indien statt.

Bereits bei Gesprächen mit Teilnehmern auf der zweitägigen rootconf zeichnete sich reges Interesse an Icinga und natürlich insbesondere Icinga 2 ab. Nicht zuletzt trug auch Bernd mit seinem Vortrag “State of the open source monitoring landscape” im Premiumslot direkt nach der Begrüßung im Hauptsaal der rootconf einen großen Teil dazu bei.

Am 13. Mai, Samstag dem Tag nach der rootconf, war es nun an der Zeit für das zusammen mit HasGeek veranstaltete Icinga Camp in der Thought Factory der Axis Bank. Obowohl (oder vielleicht auch “weil”) der Samstag in Indien eigentlich ein Arbeitstag ist, hatten es viele Interessierte auf das Camp geschafft. Nach Begrüßung und einer kurzen Einführung in den aktuellen Entwicklungsstand von Icinga durch Bernd übernahm Aditya Raj von Snapdeal, einem sehr großen Onlineshopbetreiber in Indien, und gab einen Einblick wie der Einsatz von Icinga 2 dort mittels SaltStack automatisiert wurde.

Nach einer kurzen Kaffepause verdeutlichte Hariram Hari von Fortidm Technologies die Erwartungshaltung aus Großunternehmenssicht an eine Monitoringlösung wie Icinga, bevor dann Toshaan Bharvani von VanTosh detailliert drauf einging wie Icinga 2 mit Ansible provisioniert werden kann. Es folgte zur Stärkung die Mittagspause und dann war auch meine Vortragspremiere gekommen. Mit vielen Slides zeigte ich die vielen Integrations- bzw. Erweiterungsmöglichkeiten von Icinga 2 mit anderen Tools auf.

Roy Peter von Bluejeans Network referierte über die Einsatzmöglichkeiten der Icinga 2 API und zeigte hier insbesondere die automatische Aufnahme neuer AWS Nodes in das Monitoringsystem. Im anschließenden Vortrag ging Bernd noch genauer auf den Director ein, bevor das Camp durch eine offene Runde mit sehr viel Beteiligung einen würdigen Abschluss fand.

Insgesamt bestätigte das Icinga Camp und v.a. die vielen Wortmeldungen nach den Vorträgen (mal wieder) die Verbreitung und das Potenzial von Icinga auch außerhalb der sonst gewohnten Kundschaft von NETWAYS.

Für mich war Bangalore als sog. “Silicon Valley” von Indien eine Chance die ich gerne wahr genommen habe und persönliches Highlight, an das ich mich sicher lange erinnern werde.

PS: Natürlich sind in gewohnter Manier auch wieder Slides und Bilder des Icinga Camps online verfügbar.

Markus Waldmüller

Autor: Markus Waldmüller

Markus war bereits mehrere Jahre als Sysadmin in Neumarkt i.d.OPf. und Regensburg tätig. Nach Technikerschule und Selbständigkeit ist er nun Anfang 2013 bei NETWAYS als Lead Senior Consultant gelandet. Wenn er nicht gerade die Welt bereist, ist der sportbegeisterte Neumarkter mit an Sicherheit grenzender Wahrscheinlichkeit auf dem Mountainbike oder am Baggersee zu finden.