10 März 2015

Icinga 2.3 veröffentlicht

Das Icinga Team hat heute Icinga 2.3 veröffentlicht. Dieses Release stellt einen weiteren Meilenstein in der noch recht jungen Geschichte von Icinga2 dar. Dieses Release enthält eine Reihe von neuen Funktionen und eine Vielzahl von Bugfixes. Parallel zum Release wurden mit Unterstützung der credativ Pakete für Debian Unstable, Ubuntu und dem Debmon Projekt bereitgestellt. Alle Interessierten können also sofort damit beginnen die neuen Funktionen auszuprobieren. Icinga 2.3 wird selbstverständlich von dem Open Source Support Center der credativ GmbH mit einen umfassenden technischen Support unterstützt.

Neue Features:

  • Neue Kommandodefinition für IPMI, VMWare, webinject und interface_table_v3t
  • Beinhaltet die Möglichkeit vom Windows Agenten Tests durch einen lokalen NSClient++ Agenten durchzuführen
  • Unterstützung für „for“ and „while“ Schleifen
  • Unterstützung für bedingte Anweisungen (if/else)
  • Unterstützung für benutzerdefinierte Funktionen
  • Unterstützung für globale und lokale Variablen (über die Schlüsselwörter global/local)
  • Bei der Zuweisung von eigenen Attributen (custom attributes) können nun Funktionen benutzt werden
  • Der Zugriff auf andere Objekte und ihre Attribute ist nun innerhalb von Funktionen möglich
  • eine Icinga Konsole wurde hinzugefügt um Funktionen und Ausdrücke testen zu können
  • Das „icinga2 troubleshoot“ Kommando ermöglicht es dem Icinga Team und Supportern Informationen zur Fehlersuche über ein Icinga Instanz zukommen zulassen
  • Unterstützung für den Export vom Performanzdaten in OpenTSDB
  • Erweiterung der Livestatus Schnittstelle um die Tabellen hostsbygroup, servicesbygroup und servicesbyhostgroup

Verbesserungen:

  • Diverse Geschwindigkeitsoptimierungen
  • Verbesserung der Dokumentation
  • Optimierungen und Stabilitätsverbesserungen bei der Clusterkommunikation
  • Crash Reports beinhalten und GDB Backtraces
  • Verbesserungen beim Konfigurationsparser

Wichtige Änderungen:

  • Variablennamen dürfen keine Bindestriche (dash) mehr beinhalten, diese sollten durch Unterstriche oder ähnliches ersetzt werden
  • Bei der Verwendung von IDO muss das Datenbankschema auf die Version 1.13.0 aktualisiert werden
  • Verwendung von Escapezeichen (\) führt die Verwendung von nicht unterstützten Escapesequenzen nun zu einem Fehler. So führt zum Beispiel der String \‘  nun zu einer Fehlermeldung. Unterstützte Escapesequenzen sind in der Dokumentation zu Stringliteralen aufgeführt.

Beispiele für neue Sprachfeatures

Bedingte Anweisungen:

durch die Verwendung von bedingten Anweisungen ist es nun Konfigurationen noch kompakter zu beschreiben. Bisher war es zum Beispiel nicht möglich Optionen abhängig von Variablen zu einem Objekt oder einer apply Regel hinzuzufügen. Das ist nun möglich und versetzt uns uns in die Lage noch kompaktere Regeln zu erzeugen:

apply Service "apt" {
  import "generic-service"
 
  check_command = "apt"
  if (host.vars.remote_client) {
        command_endpoint = host.vars.remote_client
  }
 
  assign where host.vars.distribution == "Debian"
}

 

 

Funktionen, for Schleifen und anderes

Mit Hilfe der neuen Sprachfeatures ist es jetzt auch möglich innerhalb von Icinga2 eine eigene Logik zu implementieren. Ein Klassiker ist hier ein Clustercheck, wo der virtuelle Clusterhost nur auf Critical geht wenn die Anzahl der Knoten unter eine bestimmte Grenze gefallen ist.

 

object CheckCommand "clustercheck" {
  import "plugin-check-command"
  command = {{
    var cmd = [ PluginDir + "/check_dummy" ]
    var cluster_nodes = macro("$cluster_nodes$")
    var host_failed = [ ]
    for (cluster_node in cluster_nodes) {
        log("Check state of " + cluster_node)
        /* get host state from node */
        var host = get_host(cluster_node)
        /* wenn der Host kritisch ist zählen wir den Fehlerwert hoch
           und speichern den kritischen Host in einer Variable */
        if (host.state_raw != 0 && host.state_raw != 1) {
          log(cluster_node + " failed")
          host_failed += [ cluster_node ]
        }
    }
    if (len(host_failed) >= number(macro("$cluster_critical$"))) {
        cmd += [ "2", "Cluster ist in einem kritischen Zustand. Kritische Hosts: " + host_failed.join(",") ]
    } else {
        if (len(host_failed) >= 1) {
          cmd += [ "0", "Cluster hat Probleme. Kritische Hosts: " + host_failed.join(",") ]
        } else {
          cmd += [0, "Cluster ist OK"]
        }
    }
    return cmd
  }}
}
object Host "node1" {
  import "generic-host"
  address = "127.0.0.1"
}
object Host "node2" {
  import "generic-host"
  address = "127.0.0.1"
}
object Host "node3" {
  import "generic-host"
  address = "192.100.213.2"
}
object Host "cluster" {
  import "generic-host"
  check_command = "clustercheck"
  /* unser cluster ist kritisch wenn mehr als 2 Hosts weg sind */
  vars.cluster_critical = "2"
  vars.cluster_nodes = [
    "node1",
    "node2",
    "node3"
  ]
  check_interval = 10s
}

 

Kategorien: Aktuelles
Tags: Icinga Monitoring

über den Autor

Alexander Wirt

Senior Berater

zur Person

Alexander ist seit 1996 in der Open Source-Welt unterwegs und hat bei verschiedensten Open Source-Projekten mitgewirkt. Aktuell ist er im Debian- und GRML-Projekt aktiv. Auch bei credativ zählt er seit 2004 zu den Urgesteinen. Hier bei ist er derzeit als Projekt- und Teamleiter unterwegs und versucht die Kunden mit kreativen Lösungen für schwierige Probleme zu unterstützen.

Beiträge ansehen


Beitrag teilen: