Seite wählen

NETWAYS Blog

Migration auf die Icinga DB gewünscht?

In 2022 wurde die Icinga DB erfolgreich veröffentlicht und für die produktive Nutzung freigegeben. Wir haben hierzu bereits ein Webinar mit dem Titel „Was ist die Icinga DB?“ durchführt, in welchem wir die Architektur im Detail erläutert haben.

Dabei sind wir auf

  • das neue Datenbank-Backend
  • den Redis als Cache
  • und die Kommunikation zwischen Core und Web

eingegangen.

Der Vorteil der Icinga DB

Die Icinga DB bietet neben einer vollständig neuen Architektur ein neues Webfrontend, welches völlig neu gestaltet ist. Damit sind einzelne Elemente nun deutlich besser ersichtlich und erlauben einen noch schnelleren Überblick, wie beispielsweise der Status der aktuellen Check-Ausführung ist, in welchem Intervall geprüft und wann dieser ausgeführt wird.

Installation und Konfiguration

Eine ausführliche Anleitung für die Installation findet man in der offiziellen Dokumentation auf icinga.com. Wir möchten hierfür jedoch einen Schritt weitergehen und werden unsere aktuelle Demo-Umgebung, welche wir in einer Icinga Webinar-Reihe aufgebaut haben, in einem Webinar Live auf die Icinga DB umstellen.

Das Webinar findet am

15. März 2023 um 10:30 Uhr

statt. Hierfür könnt Ihr einfach unseren YouTube-Kanal abonnieren und einen Reminder für das Icinga DB Webinar setzen.

Wir freuen uns auf eure Teilnahme! Wenn Ihr im Vorfeld Unterstützung bei der Migration auf die Icinga DB benötigt, nehmt doch gerne Kontakt mit uns auf. Wir bieten euch gerne Dienstleistungen und Beratungen dazu an.

Christian Stein
Christian Stein
Manager Sales

Christian kommt ursprünglich aus der Personalberatungsbranche, wo er aber schon immer auf den IT Bereich spezialisiert war. Bei NETWAYS arbeitet er als Manager Sales und berät unsere Kunden in der vertrieblichen Phase rund um das Thema Monitoring. Gemeinsam mit Georg hat er sich Mitte 2012 auch an unserem Hardware-Shop "vergangen".

FAQs zur Icinga DB

Nachfolgend möchte ich auf einige Fragen zur Icinga DB eingehen, die uns derzeit bei unseren Kunden begegnen:

Was ist die Icinga DB?

Icinga DB ist eigentlich ein Sammelbegriff für verschiedene Komponenten der Monitoringlösung Icinga. Vorwiegend bezieht sich Icinga DB aber auf das Datenbankbackend als Nachfolger der IDO. Damit einher geht auch auch ein neues Modul für Icinga Web das mit diesem neuen Backend sprechen kann.

Was haben Icinga DB und IDO gemeinsam?

Beide Komponenten stellen einen persistenten Speicher für Icinga zur Verfügung, dieser basiert auf einer relationalen Datenbank. Es wird sowohl MySQL bzw. MariaDB als auch PostgreSQL unterstützt.

Was ist der Unterschied zwischen Icinga DB und IDO?

Während das Datenbankschema der IDO historisch gewachsen ist wurde das Datenbankschema der Icinga DB von Grund auf neu designed. Zusätzlich zum persistenten Speicher bringt die Icinga DB mit Redis auch einen In-Memory-Datenspeicher mit. Damit wird effizienter und insgesamt weniger in den persistenten Speicher geschrieben, was sich positiv auf die Gesamtperformance des Systems auswirkt.

Wie konfiguriere ich den Icinga Core für Icinga DB als Backend?

Aktuelle Icinga-Versionen bringen die Unterstützung für Icinga DB bereits mit. Die Komponenten der Icinga DB stehen als zusätzliche Pakete zur Verfügung. Sobald diese installiert sind, die persistente Datenbank erstellt ist und die beiden Dienste der Icinga DB für Redis und Datenbank ordnungsgemäß laufen, verbindet man den Icinga Core über ein integriertes Feature mit dem Redis Service der Icinga DB.

Wie konfiguriere ich das Webfrontend für Icinga DB?

Mit einem zusätzlichen Modul für Icinga Web ist dieses in der Lage die Daten der Icinga DB aus Redis und persistenten Speicher anzuzeigen, beide Teile werden konfiguriert und angesprochen. Auch der sog. Command Transport muss für Icinga DB entsprechend konfiguriert werden um z.B. Aktionen wie die Neuausführung von Checks via Icinga Web an den Icinga Core weiter zu geben.

Ist ein Parallelbetrieb der Backends von Icinga DB und IDO möglich?

Ja. Da beide vom Icinga Core als Features angesprochen werden, können diese auch parallel laufen. Natürlich führt das dann in beiden persistenten Speichern auch zu doppelter Datenhaltung. Daher empfehlen wir das nur temporär.

Ist ein Parallelbetrieb des Webfrontends für Icinga DB und IDO möglich?

Ja. Sobald Icinga Web das Monitoring Modul und auch das Icinga DB Modul aktiviert und konfiguriert hat, ist ein Zugriff auf beide Backends möglich. Mittels Berechtigungen lässt sich allerdings einschränken wer überhaupt das herkömmliche Monitoring bzw. Icinga DB sehen und benutzen darf. Sind die Berechtigungen für beide Module erteilt, gibt es beim sog. „Dualview“ in vielen Ansichten eine Auswahlmöglichkeit zwischen Daten aus der Icinga DB oder der IDO. Die Unterstützung der Backends variiert jedoch v.a. bei Community Modulen noch etwas.

Wie sieht eine Migration von IDO auf Icinga DB aus?

Das letzte Release der Icinga DB liefert auch ein Migrationsskript. Damit kann die gesamte Historie aus der IDO in den persistenten Speicher der Icinga DB übernommen werden. Alternativ kann aber auch der Zeitraum der zu migrierenden Daten eingeschränkt werden. Eigene Dashboards in Icinga Web müssen auf Icinga DB angepasst werden und auch bestehende Reports sind für Icinga DB mit dem neuen Backend abzuspeichern. Da sich die Ansichten des Webmoduls für Icinga DB von dem für IDO (Monitoring) teilweise unterscheiden, ist jedoch eine Übergangszeit mit einem Parallelbetrieb beider Backends ratsam um v.a. auch die Nutzer daran zu gewöhnen.

Sollten alle auf Icinga DB umsteigen?

Ja, v.a. mittel- bis langfristig! Denn Icinga DB gilt als Nachfolger bzw. Ersatz der IDO. Auch wenn der genaue Zeitpunkt derzeit noch nicht feststeht, wird der Support für IDO früher oder später eingestellt werden. Schon jetzt ist absehbar das neue Features v.a. bei Icinga Web Modulen nur noch für Icinga DB kommen und man profitiert ab sofort von der verbesserten Performance.

Natürlich beraten und unterstützen wir gerne bei der Neuinstallation von Icinga oder beim Umstieg auf Icinga DB. Kommt einfach ganz unverbindlich auf uns zu!

Markus Waldmüller
Markus Waldmüller
Head of Strategic Projects

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 Senior Manager Services gelandet. Seit September 2023 kümmert er sich bei der NETWAYS Gruppe um strategische Projekte. Wenn er nicht gerade die Welt bereist, ist der sportbegeisterte Neumarkter mit an Sicherheit grenzender Wahrscheinlichkeit auf dem Mountainbike oder am Baggersee zu finden.

Encoding „leicht gemacht“ mit PostgreSQL

In der Urzeit der Computerei passierte das alles in den USA. Und die Vereinigten Amerikaner haben seinerzeit wie üblich nicht über den Tellerrand geschaut, sondern ihren Zeichensatz an ihre Sprache angepasst (ASCII). Irgendwann „durften“ dann auch die Alliierten ran, und die Probleme kamen auf… dieser Zeit verdanken wir ISO-8859-1, WIN-1252 und wie sie alle heißen. Mittlerweile gibt es aber ja seit 30 Jahren Unicode, die Probleme sind also doch Schnee von gestern. Richtig?

PostgreSQL ist – aus guten Gründen – ein beliebtes Ziel für Migrationen. Und PostgreSQL ist von vorne bis hinten auf UTF-8 aufgestellt. Leider hat man es aber oft mit Altsystemen, Altdaten und Gammelcode zu tun, die irgendwie übernommen werden müssen.

So bestehen unfassbare Mengen an altem Perl-, Python-, PHP-, VBA-, … Code, der für frühe Access-, MySQL-, MS-SQL-, Oracle-, Sybase oder was auch immer für Datenbanken geschrieben wurde und mit Unicode nichts am Hut hat. (Einige dieser Systeme sind bis heute nicht wirklich gut darin…)

Gerne sind wir auch gezwungen, „Pseudo-CSV“ aus M$ Excel zu importieren (warum ist es „normal“, comma separated values mit Semikolon zu separieren?!?), und Microsoft tut sich bis heute immer noch schwer mit UTF-8.


~$ file importtest.win-1252.csv
importtest.win-1252.csv: ISO-8859 text, with CRLF line terminators

Betreiber solcher Software haben sich üblicherweise aus der Affäre gezogen, indem sie die Datenbank, auch bei Updates, immer wieder im alten, überholten Encoding betrieben haben. Jetzt steht also die Umstellung auf PostgreSQL an, und beim ersten Testimport von Altdaten kommt diese Meldung:


blog=# \COPY csvimport FROM importtest.win-1252.csv WITH (DELIMITER ';', FORMAT CSV);
ERROR: invalid byte sequence for encoding "UTF8": 0xfc
CONTEXT: COPY csvimport, line 1
blog=#

Viele Entwickler*innen werden jetzt reflexhaft ihre bewährte Methode benutzen wollen, und ja, ich kann, auch wenn mein DB-Cluster anders initialisiert wurde, genau das auch tun:


blog=# \h CREATE DATABASE
Command: CREATE DATABASE
Description: create a new database
Syntax:
CREATE DATABASE name
[ [ WITH ] [ OWNER [=] user_name ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]
[ LOCALE [=] locale ]
[ LC_COLLATE [=] lc_collate ]
[ LC_CTYPE [=] lc_ctype ]
[ TABLESPACE [=] tablespace_name ]
[ ALLOW_CONNECTIONS [=] allowconn ]
[ CONNECTION LIMIT [=] connlimit ]
[ IS_TEMPLATE [=] istemplate ] ]

siehe auch hier.

Ah, da ist es ja, [ ENCODING [=] encoding ] als „Weg des geringsten Widerstands“. Dann ist das doch normal, oder nicht?! Ja, kann man so machen, ist dann nur kacke und man hat eine Top-Gelegenheit verpasst! Besser ist es, die Gelegenheit zu nutzen und hier und jetzt den Weg auf UTF-8 einzuleiten. Dafür reicht es, das client_encoding für den Import anzupassen:


blog=# SHOW client_encoding ;
client_encoding
-----------------
UTF8
(1 row)
blog=# SET client_encoding TO 'win-1252';
blog=# \COPY csvimport FROM importtest.win-1252.csv WITH (DELIMITER ';', FORMAT CSV);
blog=#

Gut! Das hat schonmal geklappt. Dann schauen wir doch mal, wie das in der Tabelle aussieht:


blog=# SELECT * FROM csvimport ;
id | spalte1 | spalte2
----+-----------------------------+----------------------------
1 | Dies ist eine ▒bliche Datei | [NULL]
2 | mit M▒ll von M$ Excel | [NULL]
3 | [NULL] | und leeren Spalten (w▒rg).
(3 rows)

Pfui bah! Genau das wollten wir doch vermeiden!!!

Alles ist gut, unser client_encoding ist ja noch kaputt:


blog=# RESET client_encoding;
blog=# SELECT * FROM csvimport ;
id | spalte1 | spalte2
----+-----------------------------+----------------------------
1 | Dies ist eine übliche Datei | [NULL]
2 | mit Müll von M$ Excel | [NULL]
3 | [NULL] | und leeren Spalten (würg).
(3 rows)

Und wenn das Refakturieren aller beteiligten Komponenten gerade nicht opportun ist, kann das client_encoding z.B. per Rolle (User) gesetzt werden:


blog=# CREATE ROLE legacy_import LOGIN;
blog=# ALTER ROLE legacy_import SET client_encoding TO 'win-1252';

Alles, was von dieser Rolle nun geschrieben wird, verarbeitet PostgreSQL nun intern zu UTF-8. Alles, was die Rolle liest, wird in WIN-1252 umgewandelt. Alle modernen Clients können aber mit Unicode arbeiten, so dass einer Transition statt einer reinen Migration jetzt „nur noch“ Code im Wege steht, keine Daten mehr.

P.S.: Es gibt natürlich noch weitere Möglichkeiten, das Encoding pro Client festzulegen, z.B. die Umgebungsvariable PGCLIENTENCODING.

 

Über den Autor:

Gunnar “Nick” Bluth hat seine Liebe zu relationalen Datenbanken Ende des letzten Jahrtausends entdeckt. Über MS Access und MySQL 3.x landete er sehr schnell bei PostgreSQL und hat nie zurückgeschaut, zumindest nie ohne Schmerzen. Er verdient seine Brötchen seit beinahe 20 Jahren mit FOSS (Administration, Schulungen, Linux, PostgreSQL). Gelegentlich taucht er auch tiefer in die Programmierung ein, so als SQL-Programmierer bei der Commerzbank oder in App-Nebenprojekten.
Lennart Betz
Lennart Betz
Senior Consultant

Der diplomierte Mathematiker arbeitet bei NETWAYS im Bereich Consulting und bereichert seine Kunden mit seinem Wissen zu Icinga, Nagios und anderen Open Source Administrationstools. Im Büro erleuchtet Lennart seine Kollegen mit fundierten geschichtlichen Vorträgen die seinesgleichen suchen.

Migration von GitLab mit Upgrade auf EE

Wer GitLab CE produktiv im Einsatz hat und mit den zusätzlichen Features der EE Version liebäugelt, der wird sich beim Umstieg zwangsläufig mit den Migrationsschritten auseinandersetzen, sofern der GitLab Server nicht von einem Hoster betreut wird. In diesem Post zeige ich, wie der Wechsel inklusive Migration auf einen anderen Server gelingen kann und beziehe mich dabei auf die Omnibus Version basierend auf Ubuntu 18.04. Der Ablauf ist gar nicht so kompliziert. Bügelt man die EE-Version einfach über die aktuelle CE Version, dann hat man nur zwei Schritte zu beachten. Wenn man allerdings einen EE Server parallel hochzieht, um dann auf diesen zu migrieren, so kommen ein paar mehr Schritte hinzu.
Deshalb zeige ich im Folgenden wie man per Backup und Restore auch zum Ziel kommt. Die ersten Schritte sind ziemlich identisch mit dem, was GitLab vorgibt.

  1. Zuerst erstellt man sich ein Backup:
    gitlab-rake gitlab:backup:create STRATEGY=copy

    Einfach um sich den aktuellen Stand vor der Migration zu sichern.
    Hier kann nicht viel schief gehen. Man sollte aber darauf achten, dass genügend Speicherplatz unter /var/opt/gitlab/backups zur Verfügung steht. Es sollten mindestens noch zwei Drittel des Speicherplatzes frei sein. Das resultierende Tar-Archiv sollte man sich anschließend weg kopieren, da im weiteren Verlauf ein weitere Backup erstellt wird.

  2.  Nun führt man das Script von GitLab aus, das die apt-Sourcen hinzufügt und ein paar benötigte Pakete vorinstalliert:
    curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
  3. Jetzt checkt man noch kurz welche Versionsnummer von GitLab CE momentan installiert ist:
    dpkg -l |grep gitlab-ce
  4. Danach installiert man die GitLab EE Version. Dabei wird die CE Version gelöscht und eine Migration durchgeführt. Um den Versionsstand kompatibel zu halten, verwendet man die gleiche Versionsnummer wie aus dem vorherigen Schritt. Lediglich der teil ‚ce‘ wird zu ‚ee‘ abgeändert:
    apt-get update && sudo apt-get install gitlab-ee=12.1.6-ee.0
  5. Nun erstellt man erneut ein Backup:
    gitlab-rake gitlab:backup:create STRATEGY=copy
  6. Das neu erstellte Backup transferiert man einschließlich der Dateien /etc/gitlab/gitlab-secrets.json und /etc/gitlab/gitlab.rb auf den EE Server. Das lässt sich z.B. per scp bewerkstelligen:
    scp /var/opt/gitlab/backups/*ee_gitlab_backup.tar ziel-server:./
    scp /etc/gitlab/gitlab-secrets.json ziel-server:./
    scp /etc/gitlab/gitlab.rb ziel-server:./
  7. Auf dem Zielserver sollte man natürlich GitLab EE in der entsprechenden Version installieren. Hier hält man sich am besten an die offizielle Anleitung. Nicht vergessen bei der Installation die Versionsnummer anzugeben.
  8. Jetzt verschiebt man die Dateien die man per scp transferiert hat und setzt die Dateiberechtigungen:
    mv ~/*ee_gitlab_backup.tar /var/opt/gitlab/backups
    mv ~/gitlab-secrets.json ~/gitlab.rb /etc/gitlab/
    chown root:root /etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab.rb
    chown git:git /var/opt/gitlab/backups/*ee_gitlab_backup.tar
  9. Dann startet man den Restore:
    gitlab-rake gitlab:backup:restore

    Man quittiert die einzelnen Abfragen mit ‚yes‘. Hat sich die URL für den neuen EE Server geändert, dann sollte man das in der /etc/gitlab.rb anpassen. In diesem Fall sind auch Änderungen an den GitLab Runnern vorzunehmen. Es reicht dann allerdings wenn man auf dem jeweiligen Runner in der Datei config.toml die URL in der [[runners]] Sektion anpasst, da der Token gleich bleibt.

Troubleshooting:

Es ist allerdings auch möglich, dass es zu Problemen mit den Runnern kommt. Dies zeigt sich z.B. dadurch, dass der Runner in seinen Logs 500er-Fehler beim Verbindungsversuch zum GitLab meldet. In diesem Fall sollte man zuerst versuchen den Runner neu zu registrieren. Falls die Fehler bestehen bleiben, ist es möglich, dass diese durch einen CI-Job verursacht werden, der während der Migration noch lief. So war es zumindest bei mir der Fall. Mit Hilfe der Anleitung zum Troubleshooting und den Infos aus diesem Issue kam ich dann zum Ziel:

gitlab-rails dbconsole
UPDATE ci_builds SET token_encrypted = NULL WHERE status in ('created', 'pending');

Wenn man sich das alles sparen möchte, dann lohnt es sich einen Blick auf unsere GitLab EE Angebote der NETWAYS Web Services zu werfen.

Gabriel Hartmann
Gabriel Hartmann
Senior Systems Engineer

Gabriel hat 2016 als Auszubildender Fachinformatiker für Systemintegrator bei NETWAYS angefangen und 2019 die Ausbildung abgeschlossen. Als Mitglied des Web Services Teams kümmert er sich seither um viele technische Themen, die mit den NETWAYS Web Services und der Weiterentwicklung der Plattform zu tun haben. Aber auch im Support engagiert er sich, um den Kunden von NWS bei Fragen und Problemen zur Seite zu stehen.

Microsoft and GitHub – merge conflict?

For some time it has become clear that Microsoft is going to take over GitHub. As far as official sources can be trusted, GitHub will stay independent although a new CEO (Nat Friedman) will be introduced after the Microsoft takeover.

This question over GitHub’s future independence has raised a lot of skepticism within the developer community and many are considering moving their projects away from GitHub to a different location.
One alternative in this case could be GitLab. GitLab does not only have an online platform but it can as well be installed on your own hardware. Furthermore, it is an extremely solid piece of Open Source software you can fully rely on. This is also shown by the makers of GitLab themselves as they release updates each month – rolling out bug fixes, security updates and many recommendations regarding the use and configuration of your instance.
For those who would like to have their own GitLab instance, NETWAYS offers two options:
First one is available on our NETWAYS Web Services platform where we offer user-managed, hosted GitLab instances as Community or Enterprise Edition. The user does not need to take care of anything regarding installation or maintenance of his GitLab, but can directly go into production in no time with only a few steps needed. You as a customer are also free to decide for how long you would like to run your instances as any app is monthly callable. Furthermore, we regularly update these container based apps and monitor their health  for you. As a customer, you can register on NWS and try all the apps we offer 30 days for free.
The second product we offer is done by NETWAYS Managed Services which is exactly what it is called: With managed hosting you can get a virtual machine in our cloud or rented hardware running a full GitLab, either as Community or Enterprise Edition. You can choose the underlying ressources and we will do the rest for you, like installation with individual parameters and health monitoring. With managed hosting, our customers also have the choice to go full 24/7 support with „emergency“ calls.