Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UnixPB: Add Docker Overlay Check Plugin Script For Nagios #3825

Merged
merged 3 commits into from
Nov 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#!/bin/bash

# Nagios plugin to check the size of /var/lib/docker/overlay2
# Allows passing thresholds as parameters

# Default thresholds (in GB)
DEFAULT_WARN_THRESHOLD=20
DEFAULT_CRIT_THRESHOLD=40

# Folder to check
TARGET_DIR="/var/lib/docker/overlay2/"

# Function to display usage
usage() {
echo "Usage: $0 -w <warn_threshold_in_GB> -c <crit_threshold_in_GB>"
echo " -w: Warning threshold in GB (default: $DEFAULT_WARN_THRESHOLD)"
echo " -c: Critical threshold in GB (default: $DEFAULT_CRIT_THRESHOLD)"
exit 3
}

# Parse command-line arguments
while getopts "w:c:" opt; do
case $opt in
w) WARN_THRESHOLD=$OPTARG ;;
c) CRIT_THRESHOLD=$OPTARG ;;
*) usage ;;
esac
done

# Set default thresholds if not provided
WARN_THRESHOLD=${WARN_THRESHOLD:-$DEFAULT_WARN_THRESHOLD}
CRIT_THRESHOLD=${CRIT_THRESHOLD:-$DEFAULT_CRIT_THRESHOLD}

# Convert GB to bytes
WARN_THRESHOLD_BYTES=$((WARN_THRESHOLD * 1024 * 1024 * 1024))
CRIT_THRESHOLD_BYTES=$((CRIT_THRESHOLD * 1024 * 1024 * 1024))

# Check if the directory exists
if [[ ! -d "$TARGET_DIR" ]]; then
echo "CRITICAL: Directory $TARGET_DIR does not exist."
exit 2
fi

# Get the size of the folder in bytes
FOLDER_SIZE_BYTES=$(du -sb "$TARGET_DIR" 2>/dev/null | awk '{print $1}')

# Handle error if du fails
if [[ -z "$FOLDER_SIZE_BYTES" ]]; then
echo "CRITICAL: Failed to determine the size of $TARGET_DIR."
exit 2
fi

# Convert size to GB for display
FOLDER_SIZE_GB=$(echo "scale=2; $FOLDER_SIZE_BYTES / (1024 * 1024 * 1024)" | bc)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You don't see bc used often enough these days ;-)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I based it on an existing script, but I wanted the parameters to be simple, rather than in bytes/kilobytes/megabytes :)


# Determine Nagios status
if (( FOLDER_SIZE_BYTES > CRIT_THRESHOLD_BYTES )); then
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking that this needed $ prefxes but apparently not.
Also noting that while these two numbers are calculated within the script, this syntax prevents the issues described in https://yossarian.net/til/post/some-surprising-code-execution-sources-in-bash/ with using -gt and similar constructs, which is giong to take a bit of getting used to

echo "CRITICAL: $TARGET_DIR size is ${FOLDER_SIZE_GB}GB (Threshold: >${CRIT_THRESHOLD}GB)"
exit 2
elif (( FOLDER_SIZE_BYTES > WARN_THRESHOLD_BYTES )); then
echo "WARNING: $TARGET_DIR size is ${FOLDER_SIZE_GB}GB (Threshold: >${WARN_THRESHOLD}GB)"
exit 1
else
echo "OK: $TARGET_DIR size is ${FOLDER_SIZE_GB}GB (Threshold: <=${WARN_THRESHOLD}GB)"
exit 0
fi
Original file line number Diff line number Diff line change
Expand Up @@ -107,3 +107,9 @@
src: roles/Nagios_Plugins/tasks/additional_plugins/check_container_spaces.sh
dest: /usr/local/nagios/libexec/check_container_spaces.sh
mode: 0755

- name: Copy Docker Overlay2 Size Plugin
copy:
src: roles/Nagios_Plugins/tasks/additional_plugins/check_docker_overlay2_size.sh
dest: /usr/local/nagios/libexec/check_docker_overlay2_size.sh
mode: 0755
Loading