Bash-скрипт для полной диагностики Linux системы

Когда ты администрируешь несколько серверов, или просто хочешь быстро понять состояние системы - обычно приходится выполнять десяток команд, анализировать логи, смотреть на метрики. Но что если автоматизировать это всё одним скриптом?

Сегодня я покажу вам универсальный bash-скрипт, который проводит полную диагностику Linux системы и формирует понятный отчет прямо в консоли. Скрипт работает на Ubuntu, Debian, CentOS, RHEL, Fedora, Arch и других дистрибутивах.

Быстрый старт

Хотите попробовать прямо сейчас? Запустите скрипт одной командой:

# Полная проверка (рекомендуется)
curl -s https://gist.githubusercontent.com/itcaat/45edeaf15f2d508bee766daa9a97400c/raw/linux-diag-script.sh | sudo bash

⚠️ Важно для безопасности:

  • Всегда проверяйте содержимое скриптов перед запуском через curl | bash
  • Просмотрите код скрипта: https://gist.github.com/itcaat/45edeaf15f2d508bee766daa9a97400c
  • Скрипт только читает данные и не вносит изменений в систему
  • Для дополнительной безопасности используйте локальную установку (Способ 2 ниже)

Что проверяет скрипт

Скрипт выполняет комплексную проверку по следующим категориям:

  1. Системная информация - версия ОС, ядро, архитектура, uptime, внешний IP
  2. Аппаратные ресурсы - CPU, RAM, Swap, температура процессоров
  3. Дисковое пространство - занятое место, inodes, SMART статус
  4. Тест скорости дисков - скорость записи/чтения (100MB тест)
  5. Сетевые интерфейсы - статус, ошибки, активные соединения
  6. Тест сети - ping до шлюза, ya.ru и 8.8.8.8 (по 10 пакетов каждый), скорость интернета
  7. Процессы - топ по CPU и памяти, zombie процессы
  8. Системные логи - критические ошибки, OOM события, kernel warnings
  9. Системные службы - проверка упавших служб
  10. Безопасность - неудачные входы, активные SSH сессии
  11. Docker - статус контейнеров и их ресурсы
  12. Telegram уведомления - автоматическая отправка при обнаружении проблем

Как использовать

Самый простой способ - запустить скрипт прямо из GitHub Gist:

# Полная проверка с правами root
curl -s https://gist.githubusercontent.com/itcaat/45edeaf15f2d508bee766daa9a97400c/raw/linux-diag-script.sh | sudo bash

Сохранение отчета в файл

Чтобы сохранить результат в файл для последующего анализа:

# При запуске через curl
curl -s https://gist.githubusercontent.com/itcaat/45edeaf15f2d508bee766daa9a97400c/raw/linux-diag-script.sh | sudo bash | tee diagnostic_$(date +%Y%m%d_%H%M%S).txt

# При локальном запуске
sudo ./linux-diag.sh | tee diagnostic_$(date +%Y%m%d_%H%M%S).txt

Что считается проблемой

Критические проблемы:

  • Load Average превышает количество ядер CPU в 2 раза
  • Использование памяти > 90%
  • Температура процессора > 80°C
  • Диск заполнен > 90%
  • Inodes заполнены > 90%
  • SMART статус диска: FAILED
  • Нет подключения к интернету
  • Есть упавшие системные службы

Предупреждения:

  • Load Average превышает количество ядер CPU
  • Использование памяти > 80%
  • Использование swap > 50%
  • Диск заполнен > 80%
  • Inodes заполнены > 80%
  • Обнаружены zombie процессы
  • Большое количество ошибок на сетевых интерфейсах
  • Много активных SSH сессий (> 5)

В финальном отчете:

В начале итоговой сводки выводится краткая информация о железе (CPU, RAM, Disk, Load Average, Uptime), а также список секций с обнаруженными проблемами. Это позволяет сразу видеть конфигурацию системы и быстро определить проблемные области.

Кастомизация скрипта

Изменение порогов

Вы можете изменить пороговые значения в соответствующих секциях. Например, для памяти:

# Вместо 90% и 80% используйте свои значения
if [ "$MEM_USED_PERCENT" -gt 95 ]; then
    print_status "crit" "Использование памяти: ${MEM_USED_PERCENT}% (критично!)"
elif [ "$MEM_USED_PERCENT" -gt 85 ]; then
    print_status "warn" "Использование памяти: ${MEM_USED_PERCENT}%"

Exit коды для автоматизации

Скрипт возвращает разные exit коды в зависимости от результата проверки, что позволяет использовать его в автоматизированных системах мониторинга:

Exit CodeЗначениеОписание
0УспехСистема в отличном состоянии, проблем не обнаружено
1ПредупреждениеОбнаружены предупреждения, требуется внимание
2КритичноОбнаружены критические проблемы, требуется немедленное вмешательство

Уведомления в Telegram

Скрипт автоматически отправляет уведомления в Telegram при обнаружении проблем, если настроены переменные окружения. В принципе единственное для чего может понадобиться такая интеграция - это периодическая проверка с отправкой отчета в случае проблем.

Настройка Telegram бота

Шаг 1: Создайте бота

  1. Найдите @BotFather в Telegram
  2. Отправьте команду /newbot
  3. Следуйте инструкциям и получите токен бота (например: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz)

Шаг 2: Получите Chat ID

  1. Отправьте сообщение вашему боту
  2. Откройте в браузере: https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
  3. Найдите "chat":{"id": - это ваш Chat ID (например: 987654321)

Шаг 3: Скачайте скрипт и протестируйте его


curl -s https://gist.githubusercontent.com/itcaat/45edeaf15f2d508bee766daa9a97400c/raw/linux-diag-script.sh -o /usr/local/bin/linux-diag.sh

export TELEGRAM_BOT_TOKEN="123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
export TELEGRAM_CHAT_ID="987654321"

sudo -E /usr/local/bin/linux-diag.sh

Шаг 4: Добавьте в cron

sudo crontab -e
TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz
TELEGRAM_CHAT_ID=987654321

# Проверка каждые 6 часов
0 */6 * * * /usr/local/bin/linux-diag.sh

Что отправляется

При обнаружении проблем скрипт отправит:

  1. Сообщение с кратким описанием:

    • Уровень проблемы (⚠️ Warnings или 🚨 Critical)
    • Имя хоста
    • Количество критических проблем и предупреждений
    • Список проблемных секций
  2. Файл с полным отчетом диагностики

Если проблем нет - уведомления не отправляются (экономия сообщений).

Заключение

Этот скрипт - отличный инструмент для быстрой диагностики состояния Linux системы. Он помогает:

  • Сэкономить время - вместо десятка команд один скрипт
  • Не упустить детали - проверяет все критичные компоненты системы
  • Быстро реагировать - понятная цветовая индикация проблем
  • Оценить производительность - тесты скорости дисков и интернета
  • Автоматизировать мониторинг - легко настроить в cron с уведомлениями в Telegram
  • Документировать состояние - сохранение отчетов для анализа

Скрипт полностью бесплатный и open-source. Актуальная версия всегда доступна на GitHub Gist. Вы можете модифицировать его под свои нужды, добавлять новые проверки или интегрировать с вашими системами мониторинга.

Полезные ссылки:

И самое главное - скрипт не заменяет полноценного мониторинга и не стоит его использовать как решение, которое его заменит. Но он вполне сгоднится для некритичных и “домашних” серваков.