Настройка ротации логов Bedrock сервера — различия между версиями
Admin (обсуждение | вклад) (Новая страница: «= Настройка ротации логов Bedrock сервера = == 1. Подготовка == * Убедитесь, что Bedrock сервер уста…») |
(нет различий)
|
Текущая версия на 10:20, 3 ноября 2025
Содержание
- 1 Настройка ротации логов Bedrock сервера
- 1.1 1. Подготовка
- 1.2 2. Проверка текущих логов
- 1.3 3. Настройка logrotate
- 1.4 4. Ручная ротация логов
- 1.5 5. Настройка автоматической ротации
- 1.6 6. Ротация crash-reports
- 1.7 7. Мониторинг размера логов
- 1.8 8. Архивация логов =
- 1.9 9. Просмотр ротированных логов =
- 1.10 10. Интеграция с системным логированием =
- 1.11 11. Устранение неполадок =
- 1.12 Заключение
Настройка ротации логов 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):
- [Выделенные серверы](https://ark-hoster.ru/dedicated/) - для высоконагруженных Bedrock серверов
- [VPS/VDS серверы](https://ark-hoster.ru/vpsgame/) - для небольших и средних серверов
Наши специалисты помогут с настройкой ротации логов на Bedrock серверах!