BASH_SRV Telegram 85
📈 Мониторинг загрузки CPU и памяти с автоматическими уведомлениями 🚨Часть 1️⃣

Всем привет! Сегодня сделаем Bash-скрипт, который периодически проверяет загрузку процессора и использование памяти, логирует результаты и отправляет уведомление, если показатели превышают заданные пороги. Полезно держать под контролем ресурсы сервера и вовремя реагировать на перегрузки.


#!/usr/bin/env bash
# Название: monitor_resources.sh
# Описание: Мониторит загрузку CPU и память, пишет в лог и уведомляет при превышении порогов.
# Использование: ./monitor_resources.sh 75 80 "/путь/до/notify.sh" "/var/log/resource_monitor.log"

# ---------------------------
# Параметры:
# $1 - порог нагрузки CPU в % (например, 75)
# $2 - порог использования RAM в % (например, 80)
# $3 - (опционально) скрипт для уведомления (при превышении любого порога)
# $4 - (опционально) файл лога (по умолчанию /var/log/resource_monitor.log)
# ---------------------------

CPU_THRESHOLD="${1:-75}"
RAM_THRESHOLD="${2:-80}"
NOTIFY_SCRIPT="$3"
LOG_FILE="${4:-/var/log/resource_monitor.log}"

# Функция: Получает текущую загрузку CPU в процентах (суммарно по всем ядрам)
get_cpu_usage() {
# Используем команду top в batch-режиме один раз, парсим строку "%Cpu(s)"
local cpu_idle
cpu_idle=$(top -bn1 | grep '^%Cpu' | awk '{print $8}' | tr -d ',%i')
# cpu_idle — процент простаивающего CPU, остальное считается занятостью
local cpu_usage=$((100 - cpu_idle))
echo "$cpu_usage"
}

# Функция: Получает текущее использование RAM в процентах
get_ram_usage() {
# Используем команду free, берем строку Mem:, вычисляем (used/total)*100
local total mem_free buff_cache used
read -r total mem_free buff_cache used _ < <(free -m | awk '/^Mem:/ {print $2, $4, $6, $3}')
# Общее доступное для процессов = free + buff/cache
local available=$((mem_free + buff_cache))
local ram_usage=$(( ( (total - available) * 100 ) / total ))
echo "$ram_usage"
}

# Функция: Записывает в лог текущие показатели с датой и временем
write_log() {
local timestamp
timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$timestamp] CPU: ${CPU}% | RAM: ${RAM}%" >> "$LOG_FILE"
}

# Функция: Проверяет пороги и при необходимости вызывает скрипт уведомления
check_thresholds() {
local alert_messages=()

if (( CPU > CPU_THRESHOLD )); then
alert_messages+=("CPU превышен: текущая загрузка ${CPU}% (порог ${CPU_THRESHOLD}%)")
fi

if (( RAM > RAM_THRESHOLD )); then
alert_messages+=("RAM превышен: текущее использование ${RAM}% (порог ${RAM_THRESHOLD}%)")
fi

if [[ ${#alert_messages[@]} -gt 0 ]]; then
local full_message="🚨 WARNING на $(hostname):\n$(printf '%s\n' "${alert_messages[@]}")"
echo -e "$full_message" >> "$LOG_FILE"
if [[ -x "$NOTIFY_SCRIPT" ]]; then
# Передаем уведомление как один аргумент (с переводами строк)
"$NOTIFY_SCRIPT" "$full_message"
echo "✔️ Уведомление отправлено через $NOTIFY_SCRIPT" >> "$LOG_FILE"
else
echo "⚠️ Скрипт уведомления не доступен или не указан." >> "$LOG_FILE"
fi
fi
}

# Основной блок
CPU=$(get_cpu_usage)
RAM=$(get_ram_usage)
write_log
check_thresholds

exit 0




Как это работает 📋

1. get_cpu_usage

* top -bn1 запускает top в неинтерактивном режиме один раз (batch mode).
* Парсим строку вида %Cpu(s): 3.0 us, 1.0 sy, 0.0 ni, 95.5 id, ... и берем поле с процентом простаивающего CPU (id).
* cpu_usage = 100 - cpu_idle — получаем загрузку в процентах.

2. get_ram_usage

* free -m выводит статистику по памяти в мегабайтах. Строка Mem: содержит total, used, free, shared, buff/cache, available.
* Чтобы учесть буфер/кэш, вычисляем available = free + buff/cache.
* ram_usage = ((total - available) * 100) / total — процент реально занятой памяти.

3. Запись в лог

* В файл (по умолчанию /var/log/resource_monitor.log) пишется строка с текущими значениями CPU и RAM вместе с временной меткой.
* Если файл не существует, он будет создан автоматически (не забудьте, чтобы скрипт имел права записи в эту директорию).

Продолжение в след. посте 👇

👉@bash_srv
👍8👎1



tgoop.com/bash_srv/85
Create:
Last Update:

📈 Мониторинг загрузки CPU и памяти с автоматическими уведомлениями 🚨Часть 1️⃣

Всем привет! Сегодня сделаем Bash-скрипт, который периодически проверяет загрузку процессора и использование памяти, логирует результаты и отправляет уведомление, если показатели превышают заданные пороги. Полезно держать под контролем ресурсы сервера и вовремя реагировать на перегрузки.


#!/usr/bin/env bash
# Название: monitor_resources.sh
# Описание: Мониторит загрузку CPU и память, пишет в лог и уведомляет при превышении порогов.
# Использование: ./monitor_resources.sh 75 80 "/путь/до/notify.sh" "/var/log/resource_monitor.log"

# ---------------------------
# Параметры:
# $1 - порог нагрузки CPU в % (например, 75)
# $2 - порог использования RAM в % (например, 80)
# $3 - (опционально) скрипт для уведомления (при превышении любого порога)
# $4 - (опционально) файл лога (по умолчанию /var/log/resource_monitor.log)
# ---------------------------

CPU_THRESHOLD="${1:-75}"
RAM_THRESHOLD="${2:-80}"
NOTIFY_SCRIPT="$3"
LOG_FILE="${4:-/var/log/resource_monitor.log}"

# Функция: Получает текущую загрузку CPU в процентах (суммарно по всем ядрам)
get_cpu_usage() {
# Используем команду top в batch-режиме один раз, парсим строку "%Cpu(s)"
local cpu_idle
cpu_idle=$(top -bn1 | grep '^%Cpu' | awk '{print $8}' | tr -d ',%i')
# cpu_idle — процент простаивающего CPU, остальное считается занятостью
local cpu_usage=$((100 - cpu_idle))
echo "$cpu_usage"
}

# Функция: Получает текущее использование RAM в процентах
get_ram_usage() {
# Используем команду free, берем строку Mem:, вычисляем (used/total)*100
local total mem_free buff_cache used
read -r total mem_free buff_cache used _ < <(free -m | awk '/^Mem:/ {print $2, $4, $6, $3}')
# Общее доступное для процессов = free + buff/cache
local available=$((mem_free + buff_cache))
local ram_usage=$(( ( (total - available) * 100 ) / total ))
echo "$ram_usage"
}

# Функция: Записывает в лог текущие показатели с датой и временем
write_log() {
local timestamp
timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$timestamp] CPU: ${CPU}% | RAM: ${RAM}%" >> "$LOG_FILE"
}

# Функция: Проверяет пороги и при необходимости вызывает скрипт уведомления
check_thresholds() {
local alert_messages=()

if (( CPU > CPU_THRESHOLD )); then
alert_messages+=("CPU превышен: текущая загрузка ${CPU}% (порог ${CPU_THRESHOLD}%)")
fi

if (( RAM > RAM_THRESHOLD )); then
alert_messages+=("RAM превышен: текущее использование ${RAM}% (порог ${RAM_THRESHOLD}%)")
fi

if [[ ${#alert_messages[@]} -gt 0 ]]; then
local full_message="🚨 WARNING на $(hostname):\n$(printf '%s\n' "${alert_messages[@]}")"
echo -e "$full_message" >> "$LOG_FILE"
if [[ -x "$NOTIFY_SCRIPT" ]]; then
# Передаем уведомление как один аргумент (с переводами строк)
"$NOTIFY_SCRIPT" "$full_message"
echo "✔️ Уведомление отправлено через $NOTIFY_SCRIPT" >> "$LOG_FILE"
else
echo "⚠️ Скрипт уведомления не доступен или не указан." >> "$LOG_FILE"
fi
fi
}

# Основной блок
CPU=$(get_cpu_usage)
RAM=$(get_ram_usage)
write_log
check_thresholds

exit 0




Как это работает 📋

1. get_cpu_usage

* top -bn1 запускает top в неинтерактивном режиме один раз (batch mode).
* Парсим строку вида %Cpu(s): 3.0 us, 1.0 sy, 0.0 ni, 95.5 id, ... и берем поле с процентом простаивающего CPU (id).
* cpu_usage = 100 - cpu_idle — получаем загрузку в процентах.

2. get_ram_usage

* free -m выводит статистику по памяти в мегабайтах. Строка Mem: содержит total, used, free, shared, buff/cache, available.
* Чтобы учесть буфер/кэш, вычисляем available = free + buff/cache.
* ram_usage = ((total - available) * 100) / total — процент реально занятой памяти.

3. Запись в лог

* В файл (по умолчанию /var/log/resource_monitor.log) пишется строка с текущими значениями CPU и RAM вместе с временной меткой.
* Если файл не существует, он будет создан автоматически (не забудьте, чтобы скрипт имел права записи в эту директорию).

Продолжение в след. посте 👇

👉@bash_srv

BY Bash Советы


Share with your friend now:
tgoop.com/bash_srv/85

View MORE
Open in Telegram


Telegram News

Date: |

4How to customize a Telegram channel? During the meeting with TSE Minister Edson Fachin, Perekopsky also mentioned the TSE channel on the platform as one of the firm's key success stories. Launched as part of the company's commitments to tackle the spread of fake news in Brazil, the verified channel has attracted more than 184,000 members in less than a month. The optimal dimension of the avatar on Telegram is 512px by 512px, and it’s recommended to use PNG format to deliver an unpixelated avatar. Telegram Android app: Open the chats list, click the menu icon and select “New Channel.” Public channels are public to the internet, regardless of whether or not they are subscribed. A public channel is displayed in search results and has a short address (link).
from us


Telegram Bash Советы
FROM American