Настройка ротации логов Bedrock сервера: различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к навигации Перейти к поиску
Новая страница: «= Настройка ротации логов Bedrock сервера = == 1. Подготовка == * Убедитесь, что Bedrock сервер уста…»
 
Починка разметки: ссылки и жирный шрифт из Markdown, лишние обратные косые черты в коде, заголовки — проверка вики 13.11.2026
 
Строка 6: Строка 6:
* Имейте права доступа для настройки logrotate и работы с логами.
* Имейте права доступа для настройки logrotate и работы с логами.
* Рекомендуется использовать Ubuntu 24.04 LTS.
* Рекомендуется использовать Ubuntu 24.04 LTS.
* Проверьте текущее расположение логов: `/opt/bedrock/logs/`
* Проверьте текущее расположение логов: <code>/opt/bedrock/logs/</code>


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


2. Добавьте содержимое:
2. Добавьте содержимое:
<pre>\#!/bin/bash
<pre>#!/bin/bash


LOG_DIR="/opt/bedrock/logs"
LOG_DIR="/opt/bedrock/logs"
Строка 125: Строка 125:
RETENTION_DAYS=30
RETENTION_DAYS=30


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


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


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


\# Ротация других логов
# Ротация других логов
for log_file in "$LOG_DIR"/*.log; do
for log_file in "$LOG_DIR"/*.log; do
     if [ -f "$log_file" ] && [ "$(basename "$log_file")" != "latest.log" ]; then
     if [ -f "$log_file" ] && [ "$(basename "$log_file")" != "latest.log" ]; then
Строка 172: Строка 172:
done
done


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


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


2. Добавьте содержимое:
2. Добавьте содержимое:
<pre>\#!/bin/bash
<pre>#!/bin/bash


LOG_DIR="/opt/bedrock/logs"
LOG_DIR="/opt/bedrock/logs"
Строка 258: Строка 258:
}
}


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


\# Общий размер
# Общий размер
TOTAL_SIZE=$(du -sh "$LOG_DIR" | cut -f1)
TOTAL_SIZE=$(du -sh "$LOG_DIR" | cut -f1)
echo "Total logs size: $TOTAL_SIZE"</pre>
echo "Total logs size: $TOTAL_SIZE"</pre>
Строка 278: Строка 278:
<pre>0 * * * * /usr/local/bin/bedrock-log-monitor.sh >> /var/log/bedrock-log-monitor.log 2>&1</pre>
<pre>0 * * * * /usr/local/bin/bedrock-log-monitor.sh >> /var/log/bedrock-log-monitor.log 2>&1</pre>


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


=== Создание архива ===
=== Создание архива ===
Строка 286: Строка 286:


2. Добавьте содержимое:
2. Добавьте содержимое:
<pre>\#!/bin/bash
<pre>#!/bin/bash


LOG_DIR="/opt/bedrock/logs"
LOG_DIR="/opt/bedrock/logs"
Строка 295: Строка 295:
mkdir -p "$ARCHIVE_DIR"
mkdir -p "$ARCHIVE_DIR"


\# Архивация за предыдущий месяц
# Архивация за предыдущий месяц
LAST_MONTH=$(date -d "last month" +%Y%m)
LAST_MONTH=$(date -d "last month" +%Y%m)
ARCHIVE_FILE="$ARCHIVE_DIR/logs-$LAST_MONTH.tar.gz"
ARCHIVE_FILE="$ARCHIVE_DIR/logs-$LAST_MONTH.tar.gz"
Строка 307: Строка 307:
     echo "Archive created: $ARCHIVE_FILE"
     echo "Archive created: $ARCHIVE_FILE"
      
      
     \# Удаление заархивированных файлов
     # Удаление заархивированных файлов
     find "$LOG_DIR" -name "*.log.gz" -mtime +30 -delete
     find "$LOG_DIR" -name "*.log.gz" -mtime +30 -delete
fi
fi


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


Строка 322: Строка 322:
<pre>0 3 1 * * /usr/local/bin/bedrock-log-archive.sh</pre>
<pre>0 3 1 * * /usr/local/bin/bedrock-log-archive.sh</pre>


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


=== Распаковка и просмотр ===
=== Распаковка и просмотр ===
Строка 339: Строка 339:
grep -i "error" latest-20240101.log</pre>
grep -i "error" latest-20240101.log</pre>


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


=== Перенаправление в journald ===
=== Перенаправление в journald ===
Строка 356: Строка 356:
sudo journalctl -u minecraft-bedrock --since "1 hour ago"</pre>
sudo journalctl -u minecraft-bedrock --since "1 hour ago"</pre>


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


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


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


* '''[Выделенные серверы](https://ark-hoster.ru/dedicated/)''' - для высоконагруженных Bedrock серверов
* '''[https://ark-hoster.ru/dedicated/ Выделенные серверы]''' - для высоконагруженных Bedrock серверов
* '''[VPS/VDS серверы](https://ark-hoster.ru/vpsgame/)''' - для небольших и средних серверов
* '''[https://ark-hoster.ru/vpsgame/ VPS/VDS серверы]''' - для небольших и средних серверов


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

Текущая версия от 08:13, 14 ноября 2026

Настройка ротации логов 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:

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