MyTetra Share
Делитесь знаниями!
Время создания: 09.01.2026 17:14
Автор: alensav
Текстовые метки: glances
Раздел: GLANCES
Запись: alensav/MyTetra2/main/base/1767968083vjzo8j2jez/text.html на raw.githubusercontent.com

📊 Система мониторинга сервера с уведомлениями в Telegram

-------------------------------------------------------------curl -s http://localhost:3001 | head -3

📋 Оглавление

  1. Обзор системы
  2. Архитектура
  3. Установка и настройка
  4. Компоненты системы
  5. Операционные процедуры
  6. Устранение неисправностей
  7. Расширение функционала

🎯 Обзор системы

Цель

Автоматический мониторинг ключевых метрик сервера (CPU, RAM) с мгновенными уведомлениями в Telegram при превышении пороговых значений.

Ключевые характеристики

  • ✅ Мониторинг CPU (порог: >80%)
  • ✅ Мониторинг RAM (порог: >90%)
  • ✅ Проверка работоспособности Glances
  • ✅ Мгновенные уведомления в Telegram
  • ✅ Детальное логирование
  • ✅ Альтернативные методы сбора метрик

🏗 Архитектура

text

┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐

│ Glances │───▶│ System Monitor │───▶│ Telegram Bot │

│ (метрики) │ │ (скрипт) │ │ (уведомления) │

└─────────────────┘ └─────────────────┘ └─────────────────┘

│ │ │

▼ ▼ ▼

┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐

│ Альтернативные │ │ Файл логов │ │ Пользователь │

│ источники │ │ glances_alert.log│ │ Telegram │

│ (top, free, пр.)│ │ │ │ │

└─────────────────┘ └─────────────────┘ └─────────────────┘


📥 Установка и настройка

Предварительные требования

bash

# 1. Установите зависимости

sudo apt-get update

sudo apt-get install -y python3 python3-pip bc


# 2. Установите Glances

pip3 install glances


# 3. Установите Python библиотеки

pip3 install requests

Шаг 1: Создание Telegram бота

  1. Откройте Telegram, найдите @BotFather
  2. Создайте нового бота: /newbot
  3. Сохраните полученный токен
  4. Получите свой Chat ID:
  • Отправьте сообщение боту
  • Перейдите по ссылке: https://api.telegram.org/bot<ВАШ_ТОКЕН>/getUpdates
  • Найдите chat.id в ответе

Шаг 2: Настройка скриптов

2.1 Скрипт отправки в Telegram (glances_alert.py)

bash

cat > ~/glances_alert.py << 'EOF'

#!/usr/bin/env python3

import sys

import requests

import json

from datetime import datetime


# КОНФИГУРАЦИЯ

BOT_TOKEN = "ВАШ_BOT_TOKEN" # Замените на реальный токен

CHAT_ID = "ВАШ_CHAT_ID" # Замените на реальный Chat ID


def send_telegram(message):

"""Отправка сообщения в Telegram"""

url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage"

# Форматируем сообщение

formatted_message = f"⚠️ Glances Alert\n{message}"

payload = {

"chat_id": CHAT_ID,

"text": formatted_message,

"parse_mode": "HTML"

}

timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

print(f"{timestamp} INFO: Triggered with message: {message}")

try:

response = requests.post(url, json=payload, timeout=10)

response_data = response.json()

if response.status_code == 200 and response_data.get("ok"):

print(f"{timestamp} INFO: Sent: {message} | Response: {response.status_code} {json.dumps(response_data)}")

print(f"{timestamp} INFO: ✅ Telegram notification sent successfully")

return True

else:

print(f"{timestamp} ERROR: Failed to send: {response.status_code} - {response.text}")

return False

except Exception as e:

print(f"{timestamp} ERROR: Exception: {e}")

return False


if __name__ == "__main__":

if len(sys.argv) > 1:

send_telegram(sys.argv[1])

else:

print("Usage: ./glances_alert.py 'message'")

EOF


chmod +x ~/glances_alert.py

2.2 Основной скрипт мониторинга (system_monitor.sh)

bash

cat > ~/system_monitor.sh << 'EOF'

#!/bin/bash

# ============================================================================

# СИСТЕМНЫЙ МОНИТОР ДЛЯ УВЕДОМЛЕНИЙ В TELEGRAM

# Автор: [Ваше имя]

# Версия: 2.0

# ============================================================================


# КОНФИГУРАЦИЯ

LOG_FILE="/home/$(whoami)/glances_alert.log"

ALERT_SCRIPT="/home/$(whoami)/glances_alert.py"

GLANCES_PATH="/home/$(whoami)/.local/bin/glances"


# ПОРОГИ ОПОВЕЩЕНИЙ (настройте под свои нужды)

CPU_THRESHOLD=80 # Процент использования CPU

RAM_THRESHOLD=90 # Процент использования RAM

DISK_THRESHOLD=90 # Процент использования диска (опционально)


# ФУНКЦИИ

log_message() {

echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"

}


get_glances_metric() {

local metric=$1

timeout 3s "$GLANCES_PATH" --stdout "$metric" --time 1 2>/dev/null | \

grep "$metric:" | \

tail -1 | \

awk -F': ' '{print $2}' | \

tr -cd '0-9.' || echo ""

}


# ============================================================================

# НАЧАЛО РАБОТЫ

# ============================================================================

log_message "=== SYSTEM MONITOR STARTED ==="


# 1. ПОЛУЧЕНИЕ МЕТРИК CPU

CPU=$(get_glances_metric "cpu.total")


if [[ -z "$CPU" ]] || [[ ! "$CPU" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then

CPU=$(top -bn1 | grep "Cpu(s)" | sed 's/.*, *\([0-9.]*\)%* id.*/\1/' | awk '{print 100 - $1}')

log_message "INFO: Using alternative CPU measurement: $CPU%"

fi


# 2. ПОЛУЧЕНИЕ МЕТРИК RAM

RAM=$(get_glances_metric "mem.percent")


if [[ -z "$RAM" ]] || [[ ! "$RAM" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then

RAM=$(free | grep Mem | awk '{printf "%.1f", $3/$2 * 100}')

log_message "INFO: Using alternative RAM measurement: $RAM%"

fi


# 3. ВАЛИДАЦИЯ ДАННЫХ

[[ ! "$CPU" =~ ^[0-9]+(\.[0-9]+)?$ ]] && CPU="0"

[[ ! "$RAM" =~ ^[0-9]+(\.[0-9]+)?$ ]] && RAM="0"


log_message "METRICS - CPU: ${CPU}%, RAM: ${RAM}%"


# ============================================================================

# ПРОВЕРКА ПОРОГОВ И ОТПРАВКА УВЕДОМЛЕНИЙ

# ============================================================================


# А. ПРОВЕРКА CPU

if (( $(echo "$CPU > $CPU_THRESHOLD" | bc -l 2>/dev/null) )); then

MESSAGE="🚨 HIGH CPU USAGE: $(printf "%.1f" $CPU)% (Threshold: ${CPU_THRESHOLD}%)"

log_message "ALERT: $MESSAGE"

if [ -x "$ALERT_SCRIPT" ]; then

"$ALERT_SCRIPT" "$MESSAGE" && \

log_message "SUCCESS: CPU alert sent to Telegram"

fi

fi


# Б. ПРОВЕРКА RAM

if (( $(echo "$RAM > $RAM_THRESHOLD" | bc -l 2>/dev/null) )); then

MESSAGE="🚨 HIGH RAM USAGE: $(printf "%.1f" $RAM)% (Threshold: ${RAM_THRESHOLD}%)"

log_message "ALERT: $MESSAGE"

if [ -x "$ALERT_SCRIPT" ]; then

"$ALERT_SCRIPT" "$MESSAGE" && \

log_message "SUCCESS: RAM alert sent to Telegram"

fi

fi


# В. ПРОВЕРКА РАБОТОСПОСОБНОСТИ GLANCES (ОПЦИОНАЛЬНО)

if ! pgrep -f "glances -w" > /dev/null 2>&1; then

log_message "WARNING: Glances web server is not running"

# Раскомментируйте для отправки уведомлений:

# "$ALERT_SCRIPT" "⚠️ GLANCES WEB SERVER IS DOWN!"

fi


# ============================================================================

# ЗАВЕРШЕНИЕ РАБОТЫ

# ============================================================================

log_message "=== SYSTEM MONITOR FINISHED ==="

EOF


chmod +x ~/system_monitor.sh

2.3 Настройка автоматического запуска (cron)

bash

# Откройте редактор crontab

crontab -e


# Добавьте строки:

# Мониторинг каждые 5 минут

*/5 * * * * /home/$(whoami)/system_monitor.sh


# Или каждую минуту (для более чувствительных систем)

# * * * * * /home/$(whoami)/system_monitor.sh


# Проверьте добавленные задания

crontab -l


🔧 Компоненты системы

1. Основной скрипт мониторинга (system_monitor.sh)

  • Назначение: Сбор метрик и принятие решений об отправке уведомлений
  • Расположение~/system_monitor.sh
  • Параметры конфигурации (измените в скрипте):
  • CPU_THRESHOLD: Порог CPU (по умолчанию: 80%)
  • RAM_THRESHOLD: Порог RAM (по умолчанию: 90%)
  • LOG_FILE: Путь к файлу логов
  • ALERT_SCRIPT: Путь к скрипту Telegram

2. Скрипт отправки в Telegram (glances_alert.py)

  • Назначение: Отправка сообщений в Telegram
  • Расположение~/glances_alert.py
  • Обязательная настройка:
  • BOT_TOKEN: Токен вашего Telegram бота
  • CHAT_ID: ID чата для уведомлений

3. Файл логов (glances_alert.log)

  • Назначение: Хранение истории работы системы
  • Расположение~/glances_alert.log
  • ФорматГГГГ-ММ-ДД ЧЧ:ММ:СС - сообщение

🚀 Операционные процедуры

Запуск вручную

bash

# 1. Тестовая отправка в Telegram

~/glances_alert.py "🔧 Тестирование системы мониторинга"


# 2. Запуск мониторинга

~/system_monitor.sh


# 3. Просмотр логов в реальном времени

tail -f ~/glances_alert.log

Проверка состояния

bash

# 1. Проверка запущенных процессов

pgrep -af "system_monitor"


# 2. Проверка логов (последние 20 записей)

tail -20 ~/glances_alert.log


# 3. Проверка метрик вручную

~/system_monitor.sh 2>&1 | grep "METRICS"

Остановка системы

bash

# 1. Остановка всех процессов мониторинга

pkill -f "system_monitor.sh"


# 2. Удаление задач из cron

crontab -l | grep -v "system_monitor" | crontab -


# 3. Архивирование логов (опционально)

cp ~/glances_alert.log ~/glances_alert_$(date +%Y%m%d).log


🔍 Устранение неисправностей

Проблема: Не приходят уведомления в Telegram

bash

# 1. Проверьте токен и Chat ID

grep -n "BOT_TOKEN\|CHAT_ID" ~/glances_alert.py


# 2. Протестируйте отправку вручную

~/glances_alert.py "🔍 Тест связи"


# 3. Проверьте доступность Telegram API

curl -s https://api.telegram.org


# 4. Проверьте логи

tail -10 ~/glances_alert.log

Проблема: Не получаются метрики от Glances

bash

# 1. Проверьте установку Glances

which glances || pip3 show glances


# 2. Проверьте работу Glances вручную

~/.local/bin/glances --stdout "cpu.total" --time 1 | head -3


# 3. Используйте альтернативные методы

echo "CPU через top: $(top -bn1 | grep 'Cpu' | awk '{print 100 - $8}')%"

echo "RAM через free: $(free | grep Mem | awk '{printf "%.1f", $3/$2*100}')%"

Проблема: Скрипт не запускается из cron

bash

# 1. Проверьте путь к интерпретатору

head -1 ~/system_monitor.sh


# 2. Проверьте права доступа

ls -la ~/system_monitor.sh ~/glances_alert.py


# 3. Добавьте переменные окружения в cron

# В crontab добавьте в начало:

# PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Диагностический скрипт

bash

cat > ~/monitor_diagnostic.sh << 'EOF'

#!/bin/bash

echo "=== ДИАГНОСТИКА СИСТЕМЫ МОНИТОРИНГА ==="

echo "Время: $(date)"

echo ""


echo "1. ПРОВЕРКА СКРИПТОВ:"

ls -la ~/system_monitor.sh ~/glances_alert.py ~/glances_alert.log 2>/dev/null

echo ""


echo "2. ПРОВЕРКА GLANCES:"

timeout 2s ~/.local/bin/glances --stdout "cpu.total" --time 1 2>&1 | head -2

echo ""


echo "3. ТЕКУЩИЕ МЕТРИКИ:"

echo "CPU: $(top -bn1 | grep 'Cpu' | awk '{printf "%.1f", 100 - $8}')%"

echo "RAM: $(free | grep Mem | awk '{printf "%.1f", $3/$2*100}')%"

echo ""


echo "4. ПРОВЕРКА TELEGRAM:"

if [ -x ~/glances_alert.py ]; then

~/glances_alert.py "🩺 Диагностика системы мониторинга"

echo "Тестовое сообщение отправлено"

else

echo "ОШИБКА: Скрипт Telegram не найден"

fi

echo ""


echo "5. ПРОВЕРКА CRON:"

crontab -l | grep -i monitor

echo ""


echo "6. ПОСЛЕДНИЕ ЛОГИ:"

tail -5 ~/glances_alert.log 2>/dev/null || echo "Логи не найдены"

echo ""

echo "=== ДИАГНОСТИКА ЗАВЕРШЕНА ==="

EOF


chmod +x ~/monitor_diagnostic.sh


📈 Расширение функционала

Добавление мониторинга диска

bash

# Добавьте в system_monitor.sh после проверки RAM:

DISK_USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')

if (( $(echo "$DISK_USAGE > $DISK_THRESHOLD" | bc -l) )); then

MESSAGE="🚨 HIGH DISK USAGE: ${DISK_USAGE}%"

"$ALERT_SCRIPT" "$MESSAGE"

fi

Добавление мониторинга температуры

bash

# Добавьте в system_monitor.sh:

if [ -f "/sys/class/thermal/thermal_zone0/temp" ]; then

TEMP=$(cat /sys/class/thermal/thermal_zone0/temp | awk '{print $1/1000}')

if (( $(echo "$TEMP > 80" | bc -l) )); then

"$ALERT_SCRIPT" "🌡️ HIGH TEMPERATURE: ${TEMP}°C"

fi

fi

Добавление мониторинга сетевых интерфейсов

bash

# Добавьте проверку сетевого интерфейса:

INTERFACE="eth0"

if ! ip link show $INTERFACE | grep -q "state UP"; then

"$ALERT_SCRIPT" "📡 NETWORK INTERFACE DOWN: $INTERFACE"

fi

Настройка разных порогов для дня/ночи

bash

# Добавьте в начало system_monitor.sh:

HOUR=$(date +%H)

if [ $HOUR -ge 8 ] && [ $HOUR -lt 20 ]; then

# Дневные пороги

CPU_THRESHOLD=80

RAM_THRESHOLD=90

else

# Ночные пороги (можно сделать строже)

CPU_THRESHOLD=70

RAM_THRESHOLD=85

fi

Ротация логов

bash

# Добавьте в crontab (ежедневная ротация):

0 0 * * * cp ~/glances_alert.log ~/glances_alert_$(date +\%Y\%m\%d).log && echo "" > ~/glances_alert.log


📊 Шаблон документации инцидентов

Формат записи в лог

text

[ГГГГ-ММ-ДД ЧЧ:ММ:СС] - [ТИП] - [СЕРВИС] - [СТАТУС] - [ДЕТАЛИ]

Примеры:

text

2024-01-09 14:30:15 - ALERT - CPU - THRESHOLD_EXCEEDED - CPU usage: 95% (threshold: 80%)

2024-01-09 14:30:16 - SUCCESS - TELEGRAM - NOTIFICATION_SENT - Message delivered

2024-01-09 14:35:00 - INFO - SYSTEM - MONITOR_COMPLETE - Metrics collected


🎯 Контрольный список развертывания

  • Установлены зависимости (Glances, Python, bc)
  • Создан Telegram бот и получен токен
  • Получен Chat ID для уведомлений
  • Настроен скрипт glances_alert.py с правильными токеном и Chat ID
  • Настроен скрипт system_monitor.sh с нужными порогами
  • Протестирована отправка уведомлений вручную
  • Добавлена задача в cron для автоматического запуска
  • Проведено тестирование под высокой нагрузкой
  • Документированы процедуры мониторинга и устранения неисправностей

📞 Контакты и поддержка

Ответственный за систему: [Ваше имя/отдел]
Telegram бот для уведомлений: @GlancesAlertBot
Частота проверок: Каждые 5 минут
Время реакции на инциденты: 15 минут


Документ обновлен: $(date)
Версия системы: 2.0
Состояние: Работоспособно


 
MyTetra Share v.0.67
Яндекс индекс цитирования