Check_speedtest.sh - Socket timeout after 10 seconds

Hallo zusammen,

ich habe auf meinem Router (ipfire) einige Checks mittels NRPE zur Prüfung. Jetzt wollte ich einen Speedtest meiner Internetleitung implementieren und stehe vor einem Problem an dem ich nicht weiterkomme.

Führe ich das Skript auf dem Router direkt aus erhalte ich nach ca. 30sec eine Ausgabe.

[root@router ~]# /usr/lib/nagios/plugins/check_speedtest.sh
P WAN ping=34.835;100;500|upload=7.49;3:999;2:999|download=59.30;25:999;10:999 WAN ping/upload/download: 34.835/7.49/59.30

nrpe.cfg
command[check_speedtest]=/usr/lib/nagios/plugins/check_speedtest.sh

Sofern ich dann einen classic Check konfiguriere kommt die folgende Meldung.
CHECK_NRPE STATE CRITICAL: Socket timeout after 10 seconds.

In der /etc/nagios/nrpe.cfg ist “command_timeout=60” gesetzt.

Vielen Dank vorab.
MfG Paul

####################################### check_speedtest.sh #############################

#!/bin/bash

#
# Track WAN connections in Check_MK
#
# (c) 2016 Stefan Heitmüller
#          stefan.heitmueller@gmx.com

# This is free software;  you can redistribute it and/or modify it
# under the  terms of the  GNU General Public License  as published by
# the Free Software Foundation in version 2.  This file is distributed
# in the hope that it will be useful, but WITHOUT ANY WARRANTY;  with-
# out even the implied warranty of  MERCHANTABILITY  or  FITNESS FOR A
# PARTICULAR PURPOSE. See the  GNU General Public License for more de-
# ails.  You should have  received  a copy of the  GNU  General Public
# License along with GNU Make; see the file  COPYING.  If  not,  write
# to the Free Software Foundation, Inc., 51 Franklin St,  Fifth Floor,
# Boston, MA 02110-1301 USA.

# Requirements:
# - https://github.com/sivel/speedtest-cli inside $PATH
# - bc (to calculate MB/s)
#
# Installation:
# Put script inside Check_MK local plugins directory and make it executable.
# Best practice is to use the "Cached local checks" function: https://mathias-kettner.de/checkmk_localchecks.html#Cached%20local%20checks%20(new%20in%20%3Cb%20class=new%3E1.2.3i1%3C/b%3E%20in%20the%20Linux%20agent)
# e.g. inside /usr/lib/check_mk_agent/local/1800/

# Warning/Critical Ranges:

PING_WARN=100 # if more than, in ms
PING_CRIT=500 # if more than, in ms
DOWNLOAD_WARN=25 # if less than, in MB/s
DOWNLOAD_CRIT=10 # if less than, in MB/s
UPLOAD_WARN=3 # if less than, in MB/s
UPLOAD_CRIT=2 # if less than, in MB/s

# Check Output:

# P WAN-PING ping=29.163;100;500 Ping time 29.163ms
# P WAN-UPLOAD upload=7.79;4:999;2:999 Upload speed 7.79Mb/s
# P WAN-DOWNLOAD download=34.73;25:999;10:999 Download speed 34.73Mb/s

if type speedtest-cli > /dev/null 2>&1 ; then
  LOGFILE="$(mktemp "/tmp/speedtest.XXXXXXXX")"
  speedtest-cli --csv > "$LOGFILE"
  CSV=$(cat "$LOGFILE")
  rm -f "$LOGFILE"
  IFS=, VALUES=($CSV)
  PING=${VALUES[5]}
  DOWNLOAD=$( bc -l <<< 'scale=2; '${VALUES[6]}'/1024/1024' )
  UPLOAD=$( bc -l <<< 'scale=2; '${VALUES[7]}'/1024/1024' )

  # Uncomment these 3 lines to get single services (unique perfdata per service), !COMMENT! the single service below
  #echo "P WAN-PING ping=${PING};${PING_WARN};${PING_CRIT} Ping time ${PING}ms"
  #echo "P WAN-UPLOAD upload=${UPLOAD};${UPLOAD_WARN}:999;${UPLOAD_CRIT}:999 Upload speed ${UPLOAD}Mb/s"
  #echo "P WAN-DOWNLOAD download=${DOWNLOAD};${DOWNLOAD_WARN}:999;${DOWNLOAD_CRIT}:999 Download speed ${DOWNLOAD}Mb/s"

  # One service including all perfdata
  echo "P WAN ping=${PING};${PING_WARN};${PING_CRIT}|upload=${UPLOAD};${UPLOAD_WARN}:999;${UPLOAD_CRIT}:999|download=${DOWNLOAD};${DOWNLOAD_WARN}:999;${DOWNLOAD_CRIT}:999 WAN ping/upload/download: ${PING}/${UPLOAD}/${DOWNLOAD}"
fi

Probier doch mal MRPE aus. Das wurde extra “erfunden” um Nagioschecks bei Check_MK unkompliziert nutzen zu können.

Infos findest du hier: https://checkmk.com/cms_agent_linux.html#mrpe

Hallo Simon,

ich kann auf meinem Router nur Pakete aus deren Repo installieren und das sind nrpe und die nagios-plugins. Der chek_mk Agent ist komplett rausgeflogen und somit bin ich auf nrpe umgestiegen. Falls ich das mit dem MRPE falsch verstehe und es doch ohne Agent auf dem Zielclient (Host - router) funktioniert dann teile mir das bitte mit. Danke.

Der Check_MK Agent ist nur ein Bash-Script und bedarf somit keinerlei “Installation” im klassischen Sinne. Wenn du eine Datei namens /etc/mrpe.cfg mit dem richtigen Inhalt (siehe Link oben) anlegst, dann wird das Skript(der Agent) den Inhalt auslesen und die Nagios-Checks (in deinem Fall den Speedtest) ausführen, die Ausgabe wird daraufhin um eine Sektion <<<mrpe>>> ergänzt und über den Discovery Mechanismus auf dem Server erkannt.

Das Checkscript ist weder ein klassisches Nagios Plugin noch ein CheckMK Plugin.
Dies ist ein CheckMK Local Check und kann damit auch nur richtig ausgewertet werden wenn er vom CheckMK Agent selbst ausgeführt wird.

Du kannst auf der ipfire jedes beliebige Shell Script ausführen und der Agent ist ja nix anderes.
Wie in dem anderen Thread schon geschrieben bitte die Anleitung für die Abfrage per SSH anschauen.

Dann kannst auch den Lokal Check verwenden.

1 Like

Hallo Andreas,

ich kann es leider nicht nachvollziehen das das von mir benannte Plugin sowie folgendes Plugin nicht funktionieren sollte.

https://github.com/jonwitts/nagios-speedtest/
./check_speedtest-cli.sh -w 10 -c 7 $ -W 15 -C 10 -l e -s 30907 -V
OK - Ping = 40.331 ms Download = 180.39 Mbit/s Upload = 8.73 Mbit/s

Leider habe ich die Alternative zum check_mk Agent noch nicht so ganz verstanden. Ich kann auf dem Router nicht einfach den Agent installieren da dieser aus dem Repo der Distro entfernt wurde. Ich kann zwar Skripte anlegen und Ordner aber ob diese dann nach einen Coreupdate noch da sind, weiß ich nicht. Wenn Du mir vielleicht eine ausführliche Anleitung zur Alternative geben könntest wäre ich sehr dankbar.

MfG Paul

Das ist aber ein anderes Script wie oben im ersten Post

Erster Post war ein Check_MK Local Check, jetzt das Script sieht mehr nach einem klassischen Nagios Check aus.

Dieses Script welches du hier ausführst stammt doch auch aus keinem Repo und ist nur auf die ipfire kopiert. Genau so kannst auch den Check_MK Agent benutzen, der ist “nur” ein Shellscript.
In der hier beschriebenen Weise kann jedes beliebige Shellscript/Programm auf einem Host als Check_MK Agent benutzt werden.
Dieser Weg ist genau der Weg den du benutzen solltest.

Also hier jetzt auch nochmal mein letzter Tipp, andreas hat aber eigentlich schon alles Relevante verlinkt

  • ssh schlüsselpärchen auswürfeln als omd benutzer auf deiner site
  • per ssh-copy-id auf deine ipfire box
  • passwortlosen zugang testen und auf die ipfire box ssh’en
  • per wget den linux agent von deiner site auf die ipfire box laden oder per scp/sftp von deiner site auf die box kopieren und ausführbar machen
  • auf der ipfire box in der datei ~/.ssh/authorized key folgendes vor den key packen: command=/path/to/cmk_agent
  • zurück auf der site den aufruf testen, es sollte direkt der output vom agent kommen
  • regel anlegen unter Datasource Programs -> Individual program call instead of agent access die den ssh client mit deinem neu ausgewürfelten key als identity nimmt und als host $HOSTNAME$

Hallo Simon,
ich komme beim SSH nicht weiter. Innerhalb von ipfire gibt es unter “/etc/ssh” schon SSH Schlüssel die auch auf der Webseite angezeigt werden.

Ich habe aber trotzdem mich an die Anleitung gehalten und auf dem check_mk Server ein neues Schlüsselpaar generiert und dies auf den ipfire übertragen.

nano /root/.ssh/authorized_keys
command="/etc/check_mk" ssh-ed25519 AAAAxxxxxxxxxxxxxxxxxxx+YX mysite@checkmk-server

chmod 600 /root/.ssh/authorized_keys
ll /root/.ssh/authorized_keys

ssh root@10.10.1.250 -p 222
key_load_public: invalid format
root@10.10.1.250's password:

Wenn ich nun das root Kennwort eingebe funktioniert es aber das ist ja nicht der Sinn der Sache.

  1. Habe ich etwas übersehen?
  2. Kann ich die SSH-Keys vom ipfire nehmen und wenn ja welchen?
  3. Ist der angepasste SSH Port 222 (statt 22) später ein Problem beim Check_mk?
  4. Ist der Command Pfad command="/etc/check_mk" richtig bzw. passend/günstig?
  5. Mit welchem User soll letztendlich die SSH Verbindung aufgebaut werden? Ich kann nur einen Benutzer dort anlegen.

Vielen Dank für die Mühe/Unterstützung

MfG Paul

Ps.: Vom check_mk Server habe ich die folgende Datei “/opt/omd/versions/1.5.0p24.cre/share/check_mk/agents/check_mk_agent.linux” nach “etc/check_mk” auf dem ipfire kopiert.

Hi Pablo,
du hast das Skript wirklich hier hingelegt? Ein besserer Ort wäre /usr/local/bin/check_mk_agent oder eben /usr/bin/check_mk_agent. In etc kommen eigentlich nur Konfigurationsdateien hin.

Diese Fehlermeldung deutet auf ein Problem mit dem öffentlichen Schlüssel hin. Möglicherweise muss er im RFC4716er Format vorliegen. Das Thema hatte ich zb. auch schon bei der Hetzner StorageBox. Den Befehl zum Umwandeln weiß ich gerade nicht auswendig, aber sollte sich über Tante Google leicht finden lassen.

PS: Das mit dem command= kannst du auch erstmal weglassen bis dein passwortloses Springen einwandfrei klappt. Das ist die Grundvoraussetzung für das regelmäßige Abfragen des Agenten.

Das ist was anderes - nämlich sind das die Host-Keys, mit denen sich die ipfire als ssh-Server dem anfragenden ssh-Client gegenüber identifiziert, damit der Client sicher sein kann, mit dem richtigen Server zu sprechen (und nicht mit einem man-in-the-middle).

Die müssen also bleiben, haben aber nichts damit zu tun, ob der Server die Verbindungsanfrage des Clients ankzeptiert.

Hallo zusammen,

der SSH-Zugriff klappt soweit ohne Abfrage vom Kennwort.
1

Muss ich auf Grund der angegebenen Pfade noch was machen, da diese ja nicht existent sind bei mir?
Mein Skript ist nun hier: /usr/local/bin/check_mk_agent

Ich bin nun hier in diesem Bereich “Edit rule: Individual program call instead of agent access” aber meine Versuche eine Regel zu bauen scheinen keine Auswirkungen zu haben.

Wie müsste ich da die Eintragungen vornehmen, gerade auch weil ich über den Port 222 SSH aufrufe und den Client über die IP-Adresse ansprechen muss und nicht den Namen.

Entschuldigt meine Anfängerfragen und ich dokumentiere mir dies aber auch, damit das beim nächsten Client ohne Rückfragen klappt :slight_smile:

MfG Paul

Sieht doch gut aus :wink:
In der Regel dann jetzt: ssh -i pfad/zu/deinem/private.key -l root -p222 <IP>
oder ssh -i pfad/zu/deinem/private.key -l root -p222 $HOSTNAME$ sollte auch gehen. Und dann halt in den conditions auf deine ipfire box beschränken oder eben auch nicht falls du mehrere hast.

Als Ergänzung zu @simon-mueller
Falls dein SSH Keypair nicht mit sonderbarem Namen erzeugt wurde auf dem Monitoring Host so brauchst du im ssh Aufruf auch keinen Key angeben.
SSH guckt einfach was da ist und probiert :slight_smile:

ssh root@<IP> -p 222

Kürzer gehts dann aber nimmer

Hallo Simon,

entschuldige die verspätete Rückmeldung. Ich mache noch irgendein Fehler denn auch wenn die SSH Abfrage per ssh klappt so wird aber kein Check angelegt.

Das sind nur meine Abfragen per nrpe.

MfG Paul

Der Host selbst muss auch auf Agent als Abfrage stehen.
Da bei deinem System kein “Check_MK” Service existiert steht der Host auf “No Agent” und “No SNMP”.

1 Like

Jetzt hat es geklappt und 18 weitere Checks sind aktiviert.

Danke an alle

Freut mich!

Andreas war heute schneller. :wink:

Und da hab ich erst jetzt das erste mal heut rein geschaut wegen zu viel Arbeit :rofl:

Guten Morgen.

Heute wollte ich die Einstellungen auf meinen richtigen (Hardware) Router übertragen (vorher war es nur eine Test VM). Es kommt zum Host der Check “Check_MK Discovery” dazu und ist Rot mit dem Staus detail.

CRIT - no unmonitored services found, no vanished services found, [agent] Agent exited with code 255: Pseudo-terminal will not be allocated because stdin is not a terminal.

Ich habe auf dem Check_MK Server auch keine Probleme per SSH mich auf den Router zu verbinden und diesen auch als bekannten SSH Host hinzugefügt.

ssh -i /opt/omd/sites/mysite/.ssh/id_ed25519 -l root -p222 10.10.1.1

ctxt 883706716
btime 1589049042
processes 459704
procs_running 4
procs_blocked 0
softirq 63522285 1 16934415 104516 26748671 2088 0 675421 9269845 0 9787328
<<<md>>>
Personalities :
unused devices: <none>
<<<vbox_guest>>>
<<<ntp:cached(1589261914,30)>>>
<<<lnx_thermal:sep(124)>>>
thermal_zone0|-|x86_pkg_temp|42000|0|passive|0|passive
<<<local>>>
Connection to 10.10.1.1 closed.

Was kann da im argen liegen?

MfG Paul