Für Nagios gibt es fast alles – aber ein Modul zum Überwachen für (Ruby on Rails-) Gems scheinbar noch nicht. Ich beschreibe daher im folgenden kurz ein Bash-Skript und dessen Einbindung in einer Nagios-NRPE-Instanz, mit der man das Vorhandensein von Gem-Aktualisierungen mit Nagios überwachen kann.
Kern des Skripts ist der Aufruf von gem obsolet
, das eine Liste mit allen Gems zurückliefert, für die Aktualisierungen vorhanden sind. Das Skript zählt mit wc
einfach die Anzahl der zurückgegebenen Zeilen der Standardausgabe STDOUT
. Wird keine Zeile zurückgegeben, sind alle installierten Gems auf dem aktuellen Stand.
#!/bin/bash # # Nagios plugin for detection of available updates for Ruby gems. # Gem outdated returns a list of gems for which are updates available. # If the line count of STDOUT is > 0, one update is available at least. gem_update_count=$(/var/www/.rvm/bin/gem outdated | wc -l) if [ gem_update_count="0" ]; then echo "All gems are up to date." exit 0 else if [ gem_update_count="1" ]; then echo "1 gem update is available." else echo "$gem_update_count gem updates are available." fi exit 1 fi
Das Skript muss auf dem zu überwachenden Server abgelegt und von dem Nagios-Benutzer (normalerweise nagios) ausführbar gemacht werden.
Dabei kann aber ein Problem auftreten, wenn Ruby über die Paketverwaltung RVM installiert wurde. In diesem Fall wird das .rvm
-Verzeichnis normalerweise in die PATH
-Umgebungsvariable hinzugefügt und in der .bashrc
ein Init-Skript source ~/.rvm/scripts/rvm
ausgeführt. Dieses Skript wird aber unter dem Nagios-Benutzer nicht ausgeführt, womit er den Befehl gem
in einer falschen Umgebung aufrufen und das Skript nicht funktionieren würde.
Ich habe das Problem gelöst, in dem ich per sudo
dem Benutzer nagios erlaube, ohne Authentifizierung das Skript als Benutzer www-data auszuführen. Per visudo
als Root habe ich daher die Datei /etc/sudoers
mit folgendem ergänzt:
# Cmnd alias specification Defaults:nagios !authenticate nagios ALL=(www-data) /var/www/check_gem.sh
Als letztes habe ich in der Nagios-NRPE-Konfiguration unter /etc/nagios/nrpe.cfg
das Kommando check_gem
definiert durch folgende Zeile (am Dateiende sind entsprechende weiteren Beispiele zu finden):
command[check_gem]=sudo -u www-data /var/www/check_gem.sh
Nach einem Neustart des Nagios-NRPE-Servers auf dem zu überwachenden System ist es nun bereit, um von dem Nagios-Server abgefragt zu werden. Dort muss (z.B. in der services_nagios2.cfg
) ein neuer Dienst angegeben werden:
define service { host_name <HOST> use generic-service service_description Gemfiles notification_interval 0 check_command check_nrpe_1arg!check_gem }
(Der Befehl host_name
ist möglicherweise durch hostgroup
zu ersetzen, wenn du die Dienste dadurch an die Hosts bindest.)
Nach einem Neustart von Nagios erscheinen die Einträge für die Hosts nun z.B. in der Weboberfläche oder in der Mobilanwendung. Die weitere Konfiguration mit Benachrichtigungen usw. läuft dann wie gewohnt ab.
Schreibe einen Kommentar