HEX
Server: LiteSpeed
System: Linux s3604.bom1.stableserver.net 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64
User: dmstechonline (1480)
PHP: 7.4.33
Disabled: NONE
Upload Files
File: //lib64/nagios/plugins/check_nfconntrack.sh
#!/bin/bash

# Nagios plugin to check nf_conntrack usage
# Returns WARNING or CRITICAL if connection tracking usage exceeds thresholds

# Nagios exit codes
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3

# Default thresholds (percentage)
WARNING_THRESHOLD=80
CRITICAL_THRESHOLD=90

# Parse command line arguments
while getopts "w:c:h" opt; do
    case $opt in
        w)
            WARNING_THRESHOLD=$OPTARG
            ;;
        c)
            CRITICAL_THRESHOLD=$OPTARG
            ;;
        h)
            echo "Usage: $0 [-w warning_threshold] [-c critical_threshold]"
            echo "  -w: Warning threshold in percentage (default: 80)"
            echo "  -c: Critical threshold in percentage (default: 90)"
            echo "Example: $0 -w 75 -c 85"
            exit $STATE_OK
            ;;
        \?)
            echo "Invalid option: -$OPTARG"
            exit $STATE_UNKNOWN
            ;;
    esac
done

# Files to read
MAX_FILE="/proc/sys/net/netfilter/nf_conntrack_max"
COUNT_FILE="/proc/sys/net/netfilter/nf_conntrack_count"

# Check if files exist
if [ ! -f "$MAX_FILE" ]; then
    echo "UNKNOWN: $MAX_FILE not found - nf_conntrack module may not be loaded"
    exit $STATE_UNKNOWN
fi

if [ ! -f "$COUNT_FILE" ]; then
    echo "UNKNOWN: $COUNT_FILE not found - nf_conntrack module may not be loaded"
    exit $STATE_UNKNOWN
fi

# Read values
MAX_VALUE=$(cat "$MAX_FILE" 2>/dev/null)
CURRENT_VALUE=$(cat "$COUNT_FILE" 2>/dev/null)

# Validate values
if [ -z "$MAX_VALUE" ] || [ -z "$CURRENT_VALUE" ]; then
    echo "UNKNOWN: Could not read nf_conntrack values"
    exit $STATE_UNKNOWN
fi

if ! [[ "$MAX_VALUE" =~ ^[0-9]+$ ]] || ! [[ "$CURRENT_VALUE" =~ ^[0-9]+$ ]]; then
    echo "UNKNOWN: Invalid values read from nf_conntrack files"
    exit $STATE_UNKNOWN
fi

# Calculate percentage
if [ "$MAX_VALUE" -eq 0 ]; then
    echo "UNKNOWN: nf_conntrack_max is zero"
    exit $STATE_UNKNOWN
fi

PERCENTAGE=$((CURRENT_VALUE * 100 / MAX_VALUE))

# Performance data
PERFDATA="current=$CURRENT_VALUE;$((MAX_VALUE * WARNING_THRESHOLD / 100));$((MAX_VALUE * CRITICAL_THRESHOLD / 100));0;$MAX_VALUE"

# Check thresholds and return appropriate status
if [ "$PERCENTAGE" -ge "$CRITICAL_THRESHOLD" ]; then
    echo "CRITICAL: nf_conntrack usage at ${PERCENTAGE}% (${CURRENT_VALUE}/${MAX_VALUE}) | $PERFDATA"
    exit $STATE_CRITICAL
elif [ "$PERCENTAGE" -ge "$WARNING_THRESHOLD" ]; then
    echo "WARNING: nf_conntrack usage at ${PERCENTAGE}% (${CURRENT_VALUE}/${MAX_VALUE}) | $PERFDATA"
    exit $STATE_WARNING
else
    echo "OK: nf_conntrack usage at ${PERCENTAGE}% (${CURRENT_VALUE}/${MAX_VALUE}) | $PERFDATA"
    exit $STATE_OK
fi