Настройка ротации логов Bedrock сервера

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск

Настройка ротации логов Bedrock сервера

1. Подготовка

  • Убедитесь, что Bedrock сервер установлен и работает.
  • Имейте права доступа для настройки logrotate и работы с логами.
  • Рекомендуется использовать Ubuntu 24.04 LTS.
  • Проверьте текущее расположение логов: `/opt/bedrock/logs/`

2. Проверка текущих логов

Расположение логов

1. Проверьте директорию логов:

cd /opt/bedrock
ls -lah logs/

2. Типичные файлы логов:

logs/
├── latest.log
├── content-log-*.log
└── crash-reports/

3. Размер логов:

du -sh logs/
du -h logs/*.log

3. Настройка logrotate

Создание конфигурации

1. Создайте файл конфигурации:

sudo nano /etc/logrotate.d/bedrock

2. Добавьте конфигурацию:

/opt/bedrock/logs/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 0644 bedrock bedrock
    sharedscripts
    postrotate
        systemctl reload minecraft-bedrock > /dev/null 2>&1 || true
    endscript
}

3. Проверьте синтаксис:

sudo logrotate -d /etc/logrotate.d/bedrock

Параметры logrotate

1. daily - ротация каждый день 2. weekly - ротация раз в неделю 3. monthly - ротация раз в месяц 4. rotate N - количество сохраняемых файлов 5. compress - сжатие старых логов 6. delaycompress - сжатие не сразу 7. notifempty - не ротировать пустые файлы 8. create - создавать новые файлы с указанными правами

Примеры конфигураций

1. Ежедневная ротация с сохранением 14 дней:

/opt/bedrock/logs/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0644 bedrock bedrock
    sharedscripts
    postrotate
        systemctl reload minecraft-bedrock > /dev/null 2>&1 || true
    endscript
}

2. Еженедельная ротация с сохранением 4 недель:

/opt/bedrock/logs/*.log {
    weekly
    missingok
    rotate 4
    compress
    delaycompress
    notifempty
    create 0644 bedrock bedrock
    sharedscripts
    postrotate
        systemctl reload minecraft-bedrock > /dev/null 2>&1 || true
    endscript
}

3. Ежедневная ротация с сжатием и отправкой на удаленный сервер:

/opt/bedrock/logs/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 0644 bedrock bedrock
    sharedscripts
    postrotate
        systemctl reload minecraft-bedrock > /dev/null 2>&1 || true
        rsync -av /opt/bedrock/logs/*.gz backup-server:/backup/bedrock-logs/ || true
    endscript
}

4. Ручная ротация логов

Создание скрипта

1. Создайте скрипт:

sudo nano /usr/local/bin/bedrock-log-rotate.sh

2. Добавьте содержимое:

\#!/bin/bash

LOG_DIR="/opt/bedrock/logs"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/bedrock-logs"
RETENTION_DAYS=30

\# Функция логирования
log_message() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}

log_message "Starting log rotation..."

\# Создание директории для бэкапов
mkdir -p "$BACKUP_DIR"

\# Ротация latest.log
if [ -f "$LOG_DIR/latest.log" ]; then
    LOG_SIZE=$(stat -f%z "$LOG_DIR/latest.log" 2>/dev/null || stat -c%s "$LOG_DIR/latest.log")
    
    \# Ротация если файл больше 100MB
    if [ "$LOG_SIZE" -gt 104857600 ]; then
        log_message "Rotating latest.log (size: $(du -h "$LOG_DIR/latest.log" | cut -f1))"
        
        \# Архивирование
        gzip -c "$LOG_DIR/latest.log" > "$BACKUP_DIR/latest-$DATE.log.gz"
        
        \# Очистка текущего лога
        > "$LOG_DIR/latest.log"
        
        \# Перезагрузка сервиса для создания нового лога
        systemctl reload minecraft-bedrock 2>/dev/null || true
        
        log_message "latest.log rotated successfully"
    else
        log_message "latest.log size OK: $(du -h "$LOG_DIR/latest.log" | cut -f1)"
    fi
fi

\# Ротация других логов
for log_file in "$LOG_DIR"/*.log; do
    if [ -f "$log_file" ] && [ "$(basename "$log_file")" != "latest.log" ]; then
        FILE_SIZE=$(stat -f%z "$log_file" 2>/dev/null || stat -c%s "$log_file")
        
        if [ "$FILE_SIZE" -gt 52428800 ]; then
            log_message "Rotating $(basename "$log_file")"
            
            gzip -c "$log_file" > "$BACKUP_DIR/$(basename "$log_file")-$DATE.gz"
            > "$log_file"
        fi
    fi
done

\# Удаление старых бэкапов
log_message "Cleaning up old backups (older than $RETENTION_DAYS days)..."
find "$BACKUP_DIR" -name "*.gz" -mtime +$RETENTION_DAYS -delete

\# Подсчет
BACKUP_COUNT=$(find "$BACKUP_DIR" -name "*.gz" | wc -l)
TOTAL_SIZE=$(du -sh "$BACKUP_DIR" | cut -f1)

log_message "Rotation completed. Backups: $BACKUP_COUNT, Total size: $TOTAL_SIZE"

3. Сделайте исполняемым:

sudo chmod +x /usr/local/bin/bedrock-log-rotate.sh

4. Тестирование:

sudo /usr/local/bin/bedrock-log-rotate.sh

5. Настройка автоматической ротации

Через cron

1. Добавьте в crontab:

sudo crontab -e

2. Ежедневная ротация в 2:00:

0 2 * * * /usr/local/bin/bedrock-log-rotate.sh >> /var/log/bedrock-logrotate.log 2>&1

3. Ротация каждые 6 часов:

0 */6 * * * /usr/local/bin/bedrock-log-rotate.sh >> /var/log/bedrock-logrotate.log 2>&1

Через logrotate

1. Проверьте запуск logrotate:

sudo logrotate -f /etc/logrotate.d/bedrock

2. Автоматический запуск через systemd timer (если нужно):

sudo systemctl enable logrotate.timer
sudo systemctl start logrotate.timer

6. Ротация crash-reports

Настройка ротации отчетов о крашах

1. Добавьте в logrotate:

sudo nano /etc/logrotate.d/bedrock-crash

2. Добавьте конфигурацию:

/opt/bedrock/crash-reports/*.txt {
    weekly
    missingok
    rotate 4
    compress
    delaycompress
    notifempty
    create 0644 bedrock bedrock
}

7. Мониторинг размера логов

Скрипт мониторинга

1. Создайте скрипт:

sudo nano /usr/local/bin/bedrock-log-monitor.sh

2. Добавьте содержимое:

\#!/bin/bash

LOG_DIR="/opt/bedrock/logs"
WARNING_SIZE=1073741824
CRITICAL_SIZE=2147483648

check_log_size() {
    local file="$1"
    local size=$(stat -f%z "$file" 2>/dev/null || stat -c%s "$file")
    
    if [ "$size" -gt "$CRITICAL_SIZE" ]; then
        echo "CRITICAL: $file is $(du -h "$file" | cut -f1) - immediate rotation needed!"
        return 2
    elif [ "$size" -gt "$WARNING_SIZE" ]; then
        echo "WARNING: $file is $(du -h "$file" | cut -f1) - consider rotation"
        return 1
    else
        echo "OK: $file is $(du -h "$file" | cut -f1)"
        return 0
    fi
}

\# Проверка всех логов
for log_file in "$LOG_DIR"/*.log; do
    if [ -f "$log_file" ]; then
        check_log_size "$log_file"
    fi
done

\# Общий размер
TOTAL_SIZE=$(du -sh "$LOG_DIR" | cut -f1)
echo "Total logs size: $TOTAL_SIZE"

3. Сделайте исполняемым:

sudo chmod +x /usr/local/bin/bedrock-log-monitor.sh

4. Добавьте в cron (каждый час):

sudo crontab -e

5. Добавьте задачу:

0 * * * * /usr/local/bin/bedrock-log-monitor.sh >> /var/log/bedrock-log-monitor.log 2>&1

8. Архивация логов =

Создание архива

1. Создайте скрипт архивации:

sudo nano /usr/local/bin/bedrock-log-archive.sh

2. Добавьте содержимое:

\#!/bin/bash

LOG_DIR="/opt/bedrock/logs"
ARCHIVE_DIR="/backup/bedrock-logs-archive"
DATE=$(date +%Y%m%d)
RETENTION_MONTHS=6

mkdir -p "$ARCHIVE_DIR"

\# Архивация за предыдущий месяц
LAST_MONTH=$(date -d "last month" +%Y%m)
ARCHIVE_FILE="$ARCHIVE_DIR/logs-$LAST_MONTH.tar.gz"

if [ ! -f "$ARCHIVE_FILE" ]; then
    echo "Creating archive for $LAST_MONTH..."
    tar -czf "$ARCHIVE_FILE" -C "$LOG_DIR" \
        --exclude="latest.log" \
        *.log.gz *.log 2>/dev/null
    
    echo "Archive created: $ARCHIVE_FILE"
    
    \# Удаление заархивированных файлов
    find "$LOG_DIR" -name "*.log.gz" -mtime +30 -delete
fi

\# Удаление старых архивов
find "$ARCHIVE_DIR" -name "*.tar.gz" -mtime +$((RETENTION_MONTHS * 30)) -delete

echo "Archiving completed"

3. Сделайте исполняемым:

sudo chmod +x /usr/local/bin/bedrock-log-archive.sh

4. Добавьте в cron (ежемесячно):

0 3 1 * * /usr/local/bin/bedrock-log-archive.sh

9. Просмотр ротированных логов =

Распаковка и просмотр

1. Просмотр сжатых логов:

zcat /backup/bedrock-logs/latest-20240101.log.gz | tail -50
zless /backup/bedrock-logs/latest-20240101.log.gz

2. Поиск в сжатых логах:

zgrep -i "error" /backup/bedrock-logs/*.gz
zgrep -i "player.*connected" /backup/bedrock-logs/*.gz

3. Распаковка для детального анализа:

cd /tmp
zcat /backup/bedrock-logs/latest-20240101.log.gz > latest-20240101.log
grep -i "error" latest-20240101.log

10. Интеграция с системным логированием =

Перенаправление в journald

1. Настройка systemd для логирования:

sudo nano /etc/systemd/system/minecraft-bedrock.service

2. Добавьте настройки логирования:

[Service]
StandardOutput=journal
StandardError=journal
SyslogIdentifier=minecraft-bedrock

3. Просмотр логов через journalctl:

sudo journalctl -u minecraft-bedrock -f
sudo journalctl -u minecraft-bedrock --since "1 hour ago"

11. Устранение неполадок =

Проблемы с ротацией

1. Логи не ротируются:

  • Проверьте права доступа к файлам
  • Проверьте синтаксис logrotate:
    sudo logrotate -d /etc/logrotate.d/bedrock
  • Запустите вручную:
    sudo logrotate -f /etc/logrotate.d/bedrock

2. Логи растут слишком быстро:

  • Уменьшите период ротации (daily → hourly для очень активных серверов)
  • Проверьте настройки логирования в server.properties
  • Рассмотрите отключение content-log-file-enabled

3. Недостаточно места на диске:

  • Уменьшите RETENTION_DAYS
  • Увеличьте сжатие (compress)
  • Переместите архивы на другой диск

Заключение

Настройка ротации логов Bedrock сервера обеспечивает эффективное управление логами и предотвращает заполнение диска. Правильная конфигурация logrotate и автоматическая ротация сохранят место на диске и упростят анализ логов.

Для размещения ваших Bedrock серверов на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):

Наши специалисты помогут с настройкой ротации логов на Bedrock серверах!