Direkt zum Hauptinhalt

Process Speicherüberwachung

Beschreibung:

Ein lokal check der alle Prozesses nach Speichergröße sortiert.
Auf Grund der Prozessmenge auf 20 Stück Limitiert.
Bei diesem Check gehts auch nur darum die Speicherfresser zu finden.
Die Schwellwerte WARN und CRIT können über die Variablen WARN und CRIT gesetzt werden. Die Einheit ist MB

Das Script

#!/bin/bash

# Schwellenwerte in Megabyte
WARN=1000  # Beispiel: 1000 MB
CRIT=2000  # Beispiel: 2000 MB
COUNT_PROC=20 #Anzahl der prozesse die ausgeben werden sollen -1 maximal 20
#diese werden nach speicherverbrauch sortiert


#Programm Variablen, bitte nicht verändern
#Laufvariable
i=0
#da bei null angefangen wird zu zählen-proccount um einen dezimieren
COUNT_PROC=$((COUNT_PROC-1))
# Anfang der Ausgabe für den Service
output="P \"Speicherverbrauch der Prozesse in MB\" "

# ps Befehl, um Prozessname und Speicherverbrauch (RSS) zu bekommen
while IFS= read -r line; do
    memory=$(echo $line | awk '{print $1}')
    #teilen durch 1024
    memory=$((memory/1000))
    process=$(echo $line | awk '{print $2}' | sed 's/[^a-zA-Z0-9]/_/g')

    # Hinzufügen der Performance-Daten für jeden Prozess zum Output
    printf -v format_i "%02d" $i
    output+="NR-$format_i-${process}=${memory};${WARN};${CRIT}|"
    if [ $i == $COUNT_PROC ]
    then
      break
    fi
    if [ $COUNT_PROC > -1 ]
    then
      i=$((i+1))
    fi
done <<< $(ps -eo rss,comm --sort=-rss | awk 'NR>1')





#letztes semikolon entfernen
output="${output%?}"
#entferne , aus dem string
output=${output//[,]/}
#enterfne leerzeichnen aus dem string
output=${output//[_]/}
# Ausgabe des gesammelten Outputs
echo "$output"

Ausgabe:

P "Speicherverbrauch der Prozesse in MB" NR-00-kvm=67338;1000;2000|NR-01-kvm=4382;1000;2000|NR-02-kvm=4307;1000;2000|NR-03-cephosd=3305;1000;2000|NR-04-cephosd=3099;1000;2000|NR-05-cephosd=2875;1000;2000|NR-06-cephosd=2679;1000;2000|NR-07-kvm=1879;1000;2000|NR-08-kvm=1264;1000;2000|NR-09-kvm=916;1000;2000|NR-10-java=576;1000;2000|NR-11-cephmon=491;1000;2000|NR-12-kvm=436;1000;2000|NR-13-kvm=420;1000;2000|NR-14-cephmgr=325;1000;2000|NR-15-mongod=167;1000;2000|NR-16-corosync=165;1000;2000|NR-17-pveproxy=157;1000;2000|NR-18-launcher=154;1000;2000|NR-19-pveproxy=144;1000;2000

Das ganze als Python

#!/usr/bin/python3
import subprocess
import re

# Schwellenwerte in Megabyte
WARN = 1000  # Beispiel: 1000 MB
CRIT = 2000  # Beispiel: 2000 MB
COUNT_PROC = 20  # Anzahl der Prozesse, die ausgeben werden sollen - maximal 20

# Programmvariablen, bitte nicht verändern
output = "P \"Speicherverbrauch der Prozesse in MB\" "

# Führe den `ps`-Befehl aus, um Prozessname und Speicherverbrauch (RSS) zu bekommen
process = subprocess.Popen(['ps', '-eo', 'rss,comm', '--sort=-rss'], stdout=subprocess.PIPE)
stdout = process.communicate()[0]

# Verarbeite jede Zeile der Ausgabe
for i, line in enumerate(stdout.decode('utf-8').strip().split('\n')[1:]):  # Überspringe die Kopfzeile
    if i >= COUNT_PROC:  # Limit auf COUNT_PROC Prozesse
        break
    
    parts = line.split(None, 1)
    memory = int(parts[0]) // 1000  # Konvertiere RSS von KB zu MB
    process = re.sub('[^a-zA-Z0-9]', '_', parts[1])  # Ersetze alle nicht alphanumerischen Zeichen durch Unterstriche

    # Hinzufügen der Performance-Daten für jeden Prozess zum Output
    output += f"NR-{i:02d}-{process}={memory};{WARN};{CRIT}|"

# Entferne das letzte Semikolon
output = output.rstrip('|')

# Entferne Kommas und Unterstriche (wenn nötig)
output = output.replace(',', '').replace('_', '')

# Ausgabe des gesammelten Outputs
print(output)

 

 

 

Installation

Auf dem zu überwachenden Server nach

nano /usr/lib/check_mk_agent/local/process.sh
chmod +x /usr/lib/check_mk_agent/local/process.sh

kopieren oder editieren über einfügen