Seit der Version 2.2 unterstützt Icinga Arrays und Dictionaries in Custom-Attributen. Zusammen mit apply lassen sich diese wunderbar verwenden, um z.B. für einen Host mehrere HTTP-Vhosts zu definieren und diese jeweils durch einen einen einzelnen Service checken zu lassen.

Mit der Version 2.3, die planmäßig am 10. März erscheinen soll, wird es zusätzlich die Möglichkeit geben, für Custom-Attribute Funktionen zu verwenden:

object CheckCommand "random-text" {
  import "plugin-check-command"

  command = [ PluginDir + "/check_dummy", "0", "$text$" ]
  vars.text = {{ Math.random() * 100 }}
}

Durch die beiden geschweiften Klammern wird eine Funktion definiert. Diese wird von Icinga jedes Mal aufgerufen, wenn es den Wert des Custom-Attributs “text” benötigt. In diesem Beispiel würde dies dazu führen, dass der Check bei jeder Ausführung einen unterschiedlichen Zufallswert ausgibt.

Mit Hilfe von Funktionen ist es allerdings nicht nur möglich, einfache Werte zu berechnen. Der Benutzer kann mit if/else beispielsweise komplexere Logik einbauen:

vars.text = {{
  if (host.address == "127.0.0.1") {
    log("Dies ist ein Check für localhost.")
  }

  return "Test"
}}

Auch auf beliebige Attribute anderer Hosts oder Services lässt sich so zugreifen:

vars.text = {{
  "Der State von 'anderer-host' ist: " + get_host("anderer-host").state
}}
Gunnar Beutner

Autor: Gunnar Beutner

Vor seinem Eintritt bei NETWAYS arbeitete Gunnar bei einem großen deutschen Hostingprovider, wo er bereits viel Erfahrung in der Softwareentwicklung für das Servermanagement sammeln konnte. Bei uns kümmert er sich vor allem um verschiedene Kundenprojekte, aber auch eigene Tools wie inGraph oder Icinga2.