Dank des “DevOps” Hypes erlangen Automatisierungstools wie Puppet eine immer größere Verbreitung. Deshalb schauen wir uns doch mal an wie wir Puppet dazu verwenden können auf einfache Weise sowohl das Zabbix Repository als auch den aktuellen Zabbix Agent auf einem Debiansystem zu installieren, zu konfigurieren und zu starten.

Dazu werden wir einfach ein kleines Puppet Modul erstellen was die gewünschten Aufgaben durchführt.

Schritt 1: Die nötigen Verzeichnisse anlegen.

Als erstes müssen wir die Verzeichnissstruktur des Puppet Moduls anlegen. Als Namen verwenden wir hier einfach “zabbix-agent”.

 Schritt 2: Das Manifest anlegen.

Dazu legen wir die Datei zabbix-agent/manifests/init.pp mit folgendem Inhalt an:

 

 

Folgend möchte ich noch kurz die einzelnen Komponenten des Manifests erläutern. Im ersten Block definieren wir die zu übergebenen Parameter und setzen unsere default Werte so dass wir auch mit leeren Parametern eine funktionierende Konfiguration erhalten.

In dem Block package {“zabbix-release”} wird das ofizielle Zabbix Repository durch das entsprechende .deb Paket installiert. Dadurch sind wir nicht auf die möglicherweise veralteten Pakete aus den Debianquellen beschränkt. Der nächste package Block installiert nun den Zabbix Agent.

Als nächstes legen wir uns noch unsere Konfiguration an. Dazu verwenden wir ein einfaches Ruby Template welches wir natürlich nach belieben anpassen und erweitern können. Dazu erstellen wir die Datei zabbix-agent/templates/zabbix_agentd.conf.erb mit diesem Inhalt:

 

Am Ende wird über den service Block der Agent gestartet und im entsprechenden Runlevel eingetragen.

Schritt 3: Das Modul verwenden.

Unser Modul ist nun fertig und kann verwendet werden. Falls wir Puppet wie üblich als Client/Server Setup verwenden kopieren wir unser Modul auf den Puppetmaster und können dieses in unseren Nodes einbinden:

 

Wenn wir keinen Puppet Server verwenden können wir unser Modul auch direkt auf einem Host starten. Dazu kopieren wir das Modul in ein beliebiges Verzeichniss auf dem Host. Beispielsweise nach /tmp und führen dieses dann mit folgender Befehlszeile aus:  puppet apply --modulepath=/tmp -e 'class {"zabbix-agent": servers => "123.123.123.123", hostname => $hostname}'

Wir sollten nun eine Ausgabe ähnlich der folgenden zu sehen bekommen:

 

Und fertig. Das Modul lässt sich natürlich noch nach Belieben erweitern um zum Beispiel noch UserParameter zu verteilen.