Вопрос или проблема
cat /proc/meminfo | grep Swap
SwapCached: 460248 kB
SwapTotal: 8388600 kB
SwapFree: 1031900 kB
Я хочу использовать эту информацию, чтобы сравнить ее с пороговым значением. Когда предел будет достигнут, должно быть отправлено предупреждение.
Могу ли я получить помощь с этим?
В одной строке:
if [[ $(swapon -s | grep -v Size | awk '{print $4/$3*100}'| awk -F "." '{print $1}') -ge 85 ]]; then echo 'Swap alert'|wall -n;fi
Вы можете протестировать это, изменив 85
на другое значение, чтобы убедиться, что это работает.
Строго для “извлечения чисел” я бы использовал:
$ grep Swap /proc/meminfo | tr -d "[a-zA-Z :]"
7228
3141628
3091688
Или, если вам нужны значения в одну строку:
$ echo `grep Swap /proc/meminfo | tr -d "[a-zA-Z :]"`
7228 3141628 3091688
Вы могли бы начать с чего-то вроде ниже:
#!/bin/bash
totalSwap=$(cat /proc/meminfo | sed -n 's/^SwapTotal: \+\([0-9]\+\) \+[a-zA-Z]\+$/\1/p')
freeSwap=$(cat /proc/meminfo | sed -n 's/^SwapFree: \+\([0-9]\+\) \+[a-zA-Z]\+$/\1/p')
usedSwap=$(( $totalSwap - $freeSwap ))
usedPctSwap=$(( 100 * $usedSwap / $totalSwap ))
swapThreshold=85
if [[ $usedPctSwap -gt $swapThreshold ]]
then
echo "Swap utilisation is at $usedPctSwap %" | mail -s "SWAP Utilisation Alert" your.email@yourdomain
fi
Конечно, не стесняйтесь менять это для удовлетворения ваших конкретных нужд. Например, у вас может быть метод оповещения, который предпочтительнее простого письма.
Вы могли бы запланировать это, добавив его в crontab
Как насчет:
#!/bin/bash
threshold=$(( 8388600 * 15 / 100 ))
current=$(sed -n '/SwapFree/s/[^[:digit:]]*\([[:digit:]]*\).*/\1/p' /proc/meminfo)
[[ $current -lt $threshold ]] && echo "There is a problem" || echo "No problem"
Здесь мы рассчитали порог, взяв SwapFree
в качестве эталона, если процент свободного swap меньше 15%, то будет отправлено предупреждение.
Вместо echo "There is a problem"
сделайте то, что хотите, например, отправьте письмо или что-то еще.
Вы должны запустить это как задание cron
(например, каждые 5 минут).
Это позволит вам получить total
и free
, числа:
cat /proc/meminfo | #прочитать данные
grep -E "Swap((Total:)|(Free:))" | #только две нужные записи
sed -re "s/[[:blank:]]+/ /g" | #только один пробел в качестве разделителя полей
cut -d" " -f2 #только нужное поле
Потом вам нужно сделать что-то с ними. Может быть, это:
(cat /proc/meminfo |
grep -E "Swap((Total:)|(Free:))" |
sed -re "s/[[:blank:]]+/ /g" |
cut -d" " -f2 &&
echo "100 * r / 100 r - p" ) |
dc
Ответ или решение
Создание скрипта для мониторинга использования свопа и отправки оповещений является важной задачей для управления серверной инфраструктурой, особенно в средах с ограниченными ресурсами. Это позволяет своевременно решать потенциальные проблемы, связанные с недостатком памяти, и обеспечивать стабильную работу системы. В данной статье мы обсудим теоретические основы мониторинга использования свопа, предложим конкретные примеры реализации скрипта и продемонстрируем его применение на практике.
Теория
Своп — это область на диске, используемая для хранения данных, которые не помещаются в оперативную память (RAM). Когда система испытывает нехватку RAM, она перемещает менее используемые данные в своп. Это позволяет освобождать ресурсы RAM для более актуальных задач, но также значительно замедляет операции ввода-вывода по сравнению с RAM.
Мониторинг использования свопа важен, так как интенсивное использование свопа может свидетельствовать о том, что серверу не хватает RAM, что может привести к снижению производительности и даже отказу системы. Установив порог, например 85%, можно настроить автоматическое оповещение администраторов, что позволит принять меры до возникновения серьезных проблем.
Пример
В этом разделе мы представим пример скрипта, который мониторит использование свопа и отправляет оповещение, если оно превышает установленный порог. Языком программирования будет являться Bash, который широко используется для автоматизации задач в Unix-подобных системах.
#!/bin/bash
# Извлечение общей и свободной памяти свопа из /proc/meminfo
totalSwap=$(cat /proc/meminfo | sed -n 's/^SwapTotal: \+\([0-9]\+\) \+[a-zA-Z]\+$/\1/p')
freeSwap=$(cat /proc/meminfo | sed -n 's/^SwapFree: \+\([0-9]\+\) \+[a-zA-Z]\+$/\1/p')
# Вычисление использованного свопа и процента использования
usedSwap=$(( totalSwap - freeSwap ))
usedPctSwap=$(( 100 * usedSwap / totalSwap ))
# Установление порога для отправки оповещения
swapThreshold=85
# Проверка, превышает ли использование порог, и отправка оповещения
if [[ $usedPctSwap -gt $swapThreshold ]]
then
echo "Swap utilisation is at $usedPctSwap %" | mail -s "SWAP Utilisation Alert" your.email@yourdomain
fi
Применение
Данный скрипт можно интегрировать в систему мониторинга, запуская его через cron для регулярных проверок. Например, его можно настроить на выполнение каждые пять минут. Для этого отредактируйте crontab с помощью команды crontab -e
и добавьте следующую строку:
*/5 * * * * /path/to/your_script.sh
Настроив регулярный мониторинг, вы сможете оперативно реагировать на изменения в использовании свопа и предотвращать возникновение проблем. Это особенно важно в высоконагруженных системах, где любое падение производительности может повлиять на бизнес-процессы.
При необходимости, можно изменить способ отправки оповещения, например, на отправку сообщений в мессенджер или интеграцию с системами мониторинга, такими как Zabbix или Nagios. Это можно сделать, заменив команду отправки электронной почты на другую команду или скрипт в секции отправки предупреждений.
Завершение
Важность мониторинга использования свопа не стоит недооценивать. Оптимизация работы серверных систем, в том числе через автоматизацию мониторинга и оповещений, позволяет не только поддерживать стабильность и высокую производительность систем, но и своевременно решать возникающие проблемы, улучшая общее состояние ИТ-инфраструктуры. Надеемся, что предоставленный пример окажется полезным как для начинающих администраторов, так и для опытных специалистов, стремящихся улучшить стабильность своих систем и оперативность реагирования на их состояние.