Порядок устранения проблем в Linux

Автоматизированное устранение проблем в Linux Система

Основные источники проблем в Linux и инструменты диагностики

Прежде чем говорить о решениях проблем, важно понимать, где искать их причины. Linux-система оставляет множество «следов», которые помогают в диагностике:

Системные логи – основа диагностики

Логи в Linux – это первое, куда следует заглянуть при возникновении проблем. Основные источники информации:

  • /var/log/syslog или /var/log/messages – общесистемный журнал событий
  • /var/log/auth.log – записи аутентификации и авторизации
  • /var/log/kern.log – сообщения ядра
  • /var/log/dmesg – сообщения драйверов и ядра при загрузке

Зная данные о местонахождении необходимого нам журнала, мы можем воспользоваться следующими командами:

# Простой мониторинг логов в реальном времени
tail -f /var/log/syslog

# Поиск ошибок в логах
grep -i error /var/log/syslog

Мониторинг ресурсов и производительности

Инструменты, позволяющие отслеживать состояние системы:

  • top/htop – интерактивный мониторинг процессов и нагрузки
  • iotop – мониторинг дисковых операций
  • vmstat – статистика использования виртуальной памяти
  • iostat – детальная информация о дисковой подсистеме
  • netstat/ss – анализ сетевых соединений
# Получение информации о процессах, интенсивно использующих CPU
ps aux --sort=-%cpu | head -10

# Анализ дискового пространства
df -h
du -sh /* | sort -hr

Автоматизация устранения неполадок в Linux

Bash-скрипты – фундамент автоматизации

Bash-скрипты – это простой и эффективный способ автоматизировать рутинные задачи. Вот пример скрипта для проверки и освобождения места на диске:

#!/bin/bash

# Проверяем свободное место на диске
FREE_SPACE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')

# Если свободного места меньше 10%, выполняем очистку
if [ "$FREE_SPACE" -gt 90 ]; then
    echo "Критически мало места на диске: $FREE_SPACE% занято"
    
    # Очищаем кэш apt
    apt-get clean
    
    # Удаляем старые журналы
    journalctl --vacuum-time=7d
    
    # Очищаем временные файлы
    find /tmp -type f -atime +7 -delete
    
    echo "Очистка завершена"
fi

Решение распространенных проблем в Linux

Проблема 1: Высокая нагрузка на CPU/память

Симптомы: Система работает медленно, процессы зависают, высокая загрузка в top.

Решение:

Идентификация проблемного процесса:

# Сортировка по использованию CPU
ps aux --sort=-%cpu | head -10

# Сортировка по использованию памяти
ps aux --sort=-%mem | head -10

Автоматизация мониторинга нагрузки:

#!/bin/bash
# Скрипт для мониторинга и уведомления о высокой нагрузке

THRESHOLD=90

while true; do
    CPU_LOAD=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
    
    if (( $(echo "$CPU_LOAD > $THRESHOLD" | bc -l) )); then
        echo "Предупреждение: Высокая нагрузка на CPU: $CPU_LOAD%"
        # Здесь может быть код для отправки уведомления
        
        # Выводим топ-5 процессов по нагрузке
        ps aux --sort=-%cpu | head -6
    fi
        sleep 60
done

Проблема 2: Недостаток дискового пространства

Симптомы: Ошибки «No space left on device», сбои в работе приложений.

Решение:

Идентификация проблемы:

# Проверка заполнения разделов
df -h

# Поиск крупных файлов
find / -type f -size +100M -exec ls -lh {} \; | sort -k5,5hr

Автоматизация через Ansible:

---
- name: Управление дисковым пространством
  hosts: all
  become: yes
  tasks:
    - name: Проверка свободного места
      shell: df -h / | awk 'NR==2 {print $5}' | sed 's/%//'
      register: disk_usage
      
    - name: Очистка при критическом уровне
      block:
        - name: Очистка старых логов
          shell: find /var/log -type f -name "*.gz" -mtime +30 -delete
          
        - name: Очистка кэша apt
          apt:
            clean: yes
            
        - name: Очистка старых ядер
          shell: apt-get autoremove --purge -y
          
      when: disk_usage.stdout|int > 85

Проблема 3: Проблемы с сетью

Симптомы: Недоступность сервисов, ошибки подключения, таймауты.

Решение:

Диагностика:

# Проверка сетевых интерфейсов
ip addr

# Проверка маршрутизации
ip route

# Проверка DNS
dig example.com

# Проверка портов
ss -tuln

Автоматический мониторинг и восстановление:

#!/bin/bash
# Скрипт проверки сетевых соединений

# Список важных хостов для мониторинга
HOSTS=("8.8.8.8" "1.1.1.1" "example.com")
GATEWAY=$(ip route | grep default | awk '{print $3}')

# Проверка сетевого интерфейса
IFACE=$(ip route | grep default | awk '{print $5}')
IFACE_STATUS=$(ip link show $IFACE | grep -o "UP\|DOWN")

if [ "$IFACE_STATUS" = "DOWN" ]; then
    echo "Сетевой интерфейс $IFACE отключен. Перезапуск..."
    ip link set $IFACE up
    systemctl restart NetworkManager
fi

# Проверка подключения к хостам
for HOST in "${HOSTS[@]}"
do
    ping -c 1 -W 2 $HOST &>/dev/null
    
    if [ $? -ne 0 ]; then
        echo "Нет связи с $HOST. Проверка шлюза..."
        
        ping -c 1 -W 2 $GATEWAY &>/dev/null
        
        if [ $? -ne 0 ]; then
            echo "Нет связи со шлюзом $GATEWAY. Перезапуск сетевого сервиса..."
            systemctl restart NetworkManager
            break
        fi
    fi
done

Проблема 4: Проблемы с файловой системой

Симптомы: Ошибки ввода-вывода, сообщения о поврежденной файловой системе, ошибки монтирования.

Решение:

Проверка и восстановление файловой системы:

# Проверка состояния дисков
smartctl -a /dev/sda

# Проверка файловой системы
fsck -f /dev/sda1  # выполняется после размонтирования!

# Поиск "плохих" блоков
badblocks -v /dev/sda1

Автоматизация регулярных проверок:

#!/bin/bash
# Скрипт для планового обслуживания файловых систем

# Запись информации о SMART-атрибутах дисков
for DISK in /dev/sd?; do
    smartctl -a $DISK > /var/log/smart_$(basename $DISK)_$(date +%Y%m%d).log
    
    # Проверка на наличие ошибок SMART
    ERRORS=$(smartctl -H $DISK | grep -i "overall-health" | grep -i "failed")
    
    if [ ! -z "$ERRORS" ]; then
        echo "ВНИМАНИЕ: Диск $DISK сообщает о проблемах!"
        # Отправка уведомления
    fi
done

# Проверка журнала на наличие ошибок ввода-вывода
IOERRORS=$(dmesg | grep -i "I/O error")

if [ ! -z "$IOERRORS" ]; then
    echo "Обнаружены ошибки ввода-вывода в системном журнале!"
    # Отправка уведомления
fi

Распространенные ошибки безопасности и их автоматическое устранение

Автоматизация аудита безопасности

#!/bin/bash
# Скрипт для базового аудита безопасности

# Проверка открытых портов
echo "=== Открытые порты ==="
ss -tuln | grep LISTEN

# Проверка наличия подозрительных процессов
echo "=== Процессы не от root с открытыми портами ниже 1024 ==="
for PID in $(lsof -i -P -n | grep ":[0-9]\{1,3\}" | grep -v "root" | awk '{print $2}' | sort | uniq); do
    ps -p $PID -o user,pid,command
done

# Проверка наличия неавторизованных ключей SSH
echo "=== Проверка авторизованных ключей SSH ==="
find /home -name "authorized_keys" -exec ls -la {} \; -exec cat {} \;

# Проверка сетевых соединений
echo "=== Активные сетевые соединения ==="
netstat -antup | grep ESTABLISHED

# Поиск файлов SUID
echo "=== SUID файлы ==="
find / -type f -perm -4000 2>/dev/null

Автоматическое исправление проблем с правами доступа

#!/bin/bash
# Исправление типичных проблем с правами доступа

# Исправление прав для важных директорий
chmod 700 /root
chmod 755 /home
chmod 755 /etc
chmod 700 /etc/ssh

# Исправление прав для критических файлов
chmod 644 /etc/passwd
chmod 600 /etc/shadow
chmod 644 /etc/group
chmod 600 /etc/gshadow

# Исправление прав для SSH-файлов
find /etc/ssh -name "ssh_host_*_key" -exec chmod 600 {} \;
find /etc/ssh -name "ssh_host_*_key.pub" -exec chmod 644 {} \;

# Исправление прав для web-директорий
if [ -d /var/www/html ]; then
    find /var/www/html -type d -exec chmod 755 {} \;
    find /var/www/html -type f -exec chmod 644 {} \;
fi

Оцените статью
Мир Линукс
Обсуждения