Eigener Check über SSH

Hallo zusammen,

ich möchte von einem Netzwerkgerät die CPU- und RAM-Auslastung abfragen. Die Installation des Checkmk-Agenten ist darauf nicht möglich und der SNMP-Agent liefert diese Werte nicht.
Bei einem Zugriff über SSH lassen sie sich jedoch über Kommandozeilenbefehle abfragen.

Muss ich zur Abfrage und Verarbeitung dieser Werte einen Spezialagenten schreiben? Die Dokumentation zur Entwicklung eigener Checkplugins liefert zu diesen leider keine genaueren Informationen.

Gibt es einfachere Beispiele als die Spezialagenten für AWS, Azure und VMware, an denen man sich bei der Entwicklung eines solchen orientieren kann?

Dominic

Wie können denn CPU und RAM via SSH überwacht werden?
Gibt es auf dem Gerät die Möglichkeit, Nagios-Plugins dafür abzulegen, die dann per SSH gestartet werden?

Dann lässt sich check_by_ssh dafür als "Classical active Monitoring Check` einrichten.

würde ja auch das ausschliessen

:smiley:

Ich drücke es mal so aus - @r.sander hat da Recht wenn ich per SSH auf nen Gerät komme dann kann ich da an Shellscript oder ähnlichem alles ausführen. Siehe CMK Agent für Cisco IOS von meinem Kollegen.

@Dominic - Was genau macht es bei diesem Gerät nicht möglich den CMK Agenten zu verwenden?

Indem ich mich auf dem System per SSH einwähle und dann die Werte über einen Befehl abfrage.

Nein, auf dem Gerät kann nichts abgelegt werden.

Es handelt sich um Switches, auf denen keine Zusatzsoftware installiert werden kann.

Ist dieser öffentlich verfügbar? Falls ja: Kannst du mir einen Link zu diesem Agenten schicken?

Ja ist öffentlich :slight_smile:

1 Like

Wenn Du per SSH angemeldet bist, kannst Du dann Dateien in /tmp oder so erzeugen?

Dann lässt sich dort auch ein Script (z.B. der checkmk-Agent) oder ein Nagios-Plugin ablegen. Ggfs muss das eben bei jedem Aufruf erstmal hinkopiert werden.

Hi Dominic,

du kannst dir für die Abfrage einen special agent bauen. Hierzu kannst du das Python Modul paramiko verwenden. Diese Modul ist als Library mit in checkmk enthalten. Du kannst damit eine Session aufbauen , deine Befehle absetzen und Parsen, und die Session wieder beenden. Hie die Klasse die ich dafür verwende (Cisco WLC):

class wlcssh:
    def __init__(self, server, user, passwd):
        self.wlc_session = paramiko.SSHClient()
        self.wlc_session.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        self.wlc_session.connect(server, port='22', username=user, password=passwd) 

    def login(self):
        self.wlc_ssh_class = self.wlc_session.invoke_shell()
        time.sleep(0.1)
        self.wlc_ssh_class.send('admin'+'\n')
        time.sleep(0.1)
        self.wlc_ssh_class.send('password'+'\n')
        time.sleep(0.1)
        self.wlc_ssh_class.send('config paging disable'+'\n')
        time.sleep(0.1)
        strip_login_text = self.wlc_ssh_class.recv(1024).decode('utf-8')

    def logout(self):
        self.wlc_ssh_class.send('logout'+'\n')
        time.sleep(0.1)
        strip_login_text = self.wlc_ssh_class.recv(1024).decode('utf-8')

    def data(self, q):
        return self.run(q)

    def run(self,query):
        data = []
        output = ""
        outarr = ["--More"]
        self.wlc_ssh_class.send(query + "\n")
        time.sleep(0.1)
        while "--More" in outarr[-1]:
            output = self.wlc_ssh_class.recv(16384).decode('utf-8', 'backslashreplace')
            outarr = output.split("\r\n")
            data += outarr[:-2]
            self.wlc_ssh_class.send("\n")
            time.sleep(0.1)
    return data

Vielleicht hilft dir das weiter.

Viele Grüße,
Christian

2 Likes

Nein, ich kann keinerlei Daten auf dem Gerät erzeugen.

Vielen Dank, das werde ich mir mal anschauen :slight_smile: