В современной ИТ-инфраструктуре обеспечение работы серверов на пределе их возможностей имеет решающее значение для поддержания работоспособности и производительности системы.
Одним из ключевых аспектов управления серверами является мониторинг использования памяти.
Высокий уровень использования памяти может привести к замедлению времени отклика приложений, нестабильности системы и даже сбоям.
Для решения этой проблемы мы представляем эффективное решение для мониторинга памяти:
Bash-скрипт, предназначенный для запуска пороговых предупреждений, легко интегрируемый с Nagios, широко используемым инструментом мониторинга.
Этот скрипт (https://github.com/tecrahul/nagios-plugins/blob/main/check_memory.sh) – свидетельство силы сотрудничества с открытым исходным кодом.
Вдохновленная работой, доступной на GitHub, эта статья расширяет возможности скрипта , предлагая руководство по его реализации и настройке для вашей среды мониторинга Nagios.
🖧 Основные номера сетевых портов на Linux
Зачем отслеживать использование памяти?
Память – это ограниченный ресурс, который приложения и процессы потребляют с течением времени.
Без надлежащего мониторинга система может исчерпать память, что приведет к подкачке или свопингу, которые значительно снижают производительность.
Мониторинг использования памяти помогает выявить потенциальные проблемы до их обострения, обеспечивая бесперебойную и надежную работу приложений.
Объяснение скрипта
Скрипт Bash предназначен для проверки использования памяти в системе в соответствии с заданными пороговыми значениями.
Если объем памяти превышает эти пороговые значения, сценарий запускает предупреждения, позволяя системным администраторам принять упреждающие меры, чтобы смягчить возможные последствия.
#!/bin/bash
# ==============================================================================
# SCRIPT: check_memory.sh
# AUTHOR: Rahul Kumar
# COPYRIGHT: tecadmin.net
# DESCRIPTION:
# This script is designed to monitor and report on system memory usage. It
# allows for warning and critical thresholds to be set for memory usage
# percentages, providing alerts based on the specified criteria. The script
# supports output in different units (Bytes, Kilobytes, Megabytes, Gigabytes)
# for flexible monitoring requirements. This utility is particularly useful
# for system administrators and monitoring tools like Nagios to keep an eye
# on system health and perform proactive maintenance.
#
# USAGE:
# ./check_memory.sh [ -w ] [ -c ] [ -u ]
# -w, --warning=INTEGER[%] Warning threshold as a percentage of used memory.
# -c, --critical=INTEGER[%] Critical threshold as a percentage of used memory.
# -u, --unit=UNIT Unit to use for output (b, K, M, G). Default: M
#
# EXAMPLES:
# ./check_memory.sh -w 80 -c 90 -u M
# This command sets a warning threshold at 80% memory usage and a critical
# threshold at 90%, with output in Megabytes.
# ==============================================================================
PROGNAME="check_memory"
VERSION='1.0'
FREECMD='/usr/bin/free'
UNIT='M' # Default unit
WARNING_THRESHOLD=80
CRITICAL_THRESHOLD=90
# Function to show usage
usage() {
echo "Usage: $0 [ -w ] [ -c ] [ -u ]"
echo " -w, --warning=INTEGER[%] Warning threshold as a percentage of used memory."
echo " -c, --critical=INTEGER[%] Critical threshold as a percentage of used memory."
echo " -u, --unit=UNIT Unit to use for output (b, K, M, G). Default: $UNIT"
exit 3
}
# Parse command line options
while getopts ":w:c:u:" opt; do
case $opt in
w) WARNING_THRESHOLD="$OPTARG" ;;
c) CRITICAL_THRESHOLD="$OPTARG" ;;
u) UNIT="$OPTARG" ;;
\?) usage ;;
esac
done
# Function to convert memory to the specified unit
convert_memory() {
local memory=$1
case $UNIT in
b) echo $memory ;;
K) echo $((memory / 1024)) ;;
M) echo $((memory / 1024 / 1024)) ;;
G) echo $((memory / 1024 / 1024 / 1024)) ;;
*) echo "Error: Unknown unit $UNIT. Must be one of 'b', 'K', 'M', 'G'."; exit 3 ;;
esac
}
# Extract memory data
total_bytes=$(grep MemTotal /proc/meminfo | awk '{print $2 * 1024}')
free_bytes=$(grep MemFree /proc/meminfo | awk '{print $2 * 1024}')
buffers_bytes=$(grep Buffers /proc/meminfo | awk '{print $2 * 1024}')
cached_bytes=$(grep "^Cached" /proc/meminfo | awk '{print $2 * 1024}')
available_bytes=$((free_bytes + buffers_bytes + cached_bytes))
# Convert to specified unit
total=$(convert_memory $total_bytes)
available=$(convert_memory $available_bytes)
# Calculate used memory
used=$(convert_memory $((total_bytes - available_bytes)))
# Calculate usage percentage
usage_percentage=$((100 - (available * 100 / total)))
# Compare usage against thresholds
if [ "$usage_percentage" -ge "$CRITICAL_THRESHOLD" ]; then
echo "CRITICAL: Memory usage is above critical threshold ($CRITICAL_THRESHOLD%). $used$UNIT used ($usage_percentage% of total)."
exit 2
elif [ "$usage_percentage" -ge "$WARNING_THRESHOLD" ]; then
echo "WARNING: Memory usage is above warning threshold ($WARNING_THRESHOLD%). $used$UNIT used ($usage_percentage% of total)."
exit 1
else
echo "OK: Memory usage is within bounds. $used$UNIT used ($usage_percentage% of total)."
exit 0
fi
Ключевые особенности
- Пороговые предупреждения: Определите пользовательские предупреждающие и критические уровни для использования памяти в процентах от общего объема памяти.
- Гибкие единицы измерения: Отображайте использование памяти в единицах, которые наилучшим образом соответствуют вашим потребностям в мониторинге.
- Интеграция с Nagios: Разработан для совместной работы с Nagios, что позволяет легко интегрировать его в существующие системы мониторинга.
Руководство по реализации
- Загрузите скрипт: Клонируйте или загрузите скрипт из репозитория GitHub.
- Права: Убедитесь, что скрипт является исполняемым, запустив его:
- Конфигурация Nagios: Интегрируйте сценарий в среду мониторинга Nagios. Определите команду в конфигурации Nagios, указывающую на сценарий, и настройте проверку служб на узлах для использования этой команды.
- Конфигурация NRPE: Для мониторинга памяти на удаленных узлах Linux можно использовать этот скрипт с клиентом NRPE. Тогда сервер Nagios сможет выполнять скрипт удаленно.
- Тестирование: Протестируйте скрипт вручную, чтобы убедиться, что он запускает оповещения так, как ожидается. При необходимости настройте пороговые значения и единицы измерения для точной настройки мониторинга.
Интеграция с Nagios
Чтобы интегрировать скрипт с сервером Nagios для мониторинга памяти локального экземпляра.
Вы можете определить новую команду в конфигурации Nagios:
Затем используйте эту команду в определениях служб для мониторинга использования памяти на хосте Nagios.
Замените /path/to/ на фактический путь к скрипту.
Следующий шаг поможет вам отслеживать память удаленных узлов с помощью клиента NRPE.
Nagios SNMP-мониторинг хостов Linux на AlienVault USM / OSSIM
Интеграция с клиентом NRPE
command[check_memory]=/usr/lib/nagios/plugins/check_memory.sh -w 80 -c 90 -u M
define service{
use generic-service
host_name remote_host_name
service_description Memory Usage
check_command check_nrpe!check_memory
}
Замените remote_host_name на имя хоста, определенное в конфигурации Nagios.
Заключение
Эффективный мониторинг памяти является краеугольным камнем для поддержания производительности и стабильности системы.
Используя этот скрипт Bash, системные администраторы могут проактивно управлять ресурсами памяти, гарантируя, что серверы останутся здоровыми и отзывчивыми.
Интеграция скрипта с Nagios повышает его полезность, обеспечивая надежное решение для мониторинга памяти в любой ИТ-инфраструктуре.
⛅ Мониторинг хостов Linux с помощью плагина Nagios check_by_ssh
Поскольку мы продолжаем полагаться на сложные системы для поддержки наших приложений и сервисов, такие инструменты, как этот скрипт, становятся бесценными в нашем наборе средств мониторинга.
Его простота в сочетании с мощью Nagios предлагает простой, но эффективный подход к мониторингу использования памяти, помогая предотвратить потенциальные проблемы в системе до их возникновения.