Мониторинг и диагностика Minecraft сервера

Материал из ARK-HOSTER.RU | Документация хостинга
Версия от 09:59, 15 октября 2025; Admin (обсуждение | вклад) (Новая страница: «= Мониторинг и диагностика Minecraft сервера = == 1. Подготовка системы == * Войдите в систему по…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Содержание

Мониторинг и диагностика Minecraft сервера

1. Подготовка системы

  • Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
  • Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
  • Рекомендуется использовать Ubuntu 24.04 LTS для стабильной работы.

2. Установка инструментов мониторинга =

Обновление системы

1. Обновите систему: sudo apt update sudo apt upgrade -y

2. Установите основные инструменты мониторинга: sudo apt install -y htop iotop nethogs netstat-nat lsof

Установка дополнительных инструментов

1. Установите специализированные инструменты: sudo apt install -y sysstat dstat iftop

2. Установите инструменты для мониторинга Java: sudo apt install -y openjdk-21-jdk

3. Настройка базового мониторинга =

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

1. Создайте основной скрипт мониторинга: sudo nano /usr/local/bin/minecraft-monitor.sh

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

  1. Настройки мониторинга

LOG_FILE="/var/log/minecraft-monitor.log" ALERT_EMAIL="admin@example.com" SERVER_NAME="Minecraft Server"

  1. Функция логирования

log_message() {

   echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE

}

  1. Функция отправки уведомлений

send_alert() {

   echo "$1" | mail -s "Minecraft Alert - $SERVER_NAME" $ALERT_EMAIL
   log_message "ALERT: $1"

}

  1. Проверка статуса сервера

check_server_status() {

   if ! systemctl is-active --quiet minecraft-spigot minecraft-paper minecraft-bukkit minecraft-bedrock; then
       send_alert "Minecraft сервер не запущен!"
       return 1
   fi
   return 0

}

  1. Проверка использования CPU

check_cpu_usage() {

   CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | awk -F'%' '{print $1}')
   if [ $(echo "$CPU_USAGE > 80" | bc) -eq 1 ]; then
       send_alert "Высокое использование CPU: ${CPU_USAGE}%"
   fi
   log_message "CPU Usage: ${CPU_USAGE}%"

}

  1. Проверка использования памяти

check_memory_usage() {

   MEMORY_USAGE=$(free | grep Mem | awk '{printf("%.2f", $3/$2 * 100.0)}')
   if [ $(echo "$MEMORY_USAGE > 80" | bc) -eq 1 ]; then
       send_alert "Высокое использование памяти: ${MEMORY_USAGE}%"
   fi
   log_message "Memory Usage: ${MEMORY_USAGE}%"

}

  1. Проверка использования диска

check_disk_usage() {

   DISK_USAGE=$(df /opt/minecraft | tail -1 | awk '{print $5}' | sed 's/%//')
   if [ $DISK_USAGE -gt 80 ]; then
       send_alert "Высокое использование диска: ${DISK_USAGE}%"
   fi
   log_message "Disk Usage: ${DISK_USAGE}%"

}

  1. Проверка сетевого трафика

check_network_usage() {

   NETWORK_IN=$(cat /proc/net/dev | grep eth0 | awk '{print $2}')
   NETWORK_OUT=$(cat /proc/net/dev | grep eth0 | awk '{print $10}')
   log_message "Network IN: $NETWORK_IN bytes, OUT: $NETWORK_OUT bytes"

}

  1. Проверка подключений

check_connections() {

   CONNECTIONS=$(netstat -an | grep :25565 | wc -l)
   log_message "Active connections: $CONNECTIONS"
   
   if [ $CONNECTIONS -gt 100 ]; then
       send_alert "Высокое количество подключений: $CONNECTIONS"
   fi

}

  1. Основная функция мониторинга

main() {

   log_message "Starting Minecraft monitoring..."
   
   check_server_status
   check_cpu_usage
   check_memory_usage
   check_disk_usage
   check_network_usage
   check_connections
   
   log_message "Minecraft monitoring completed"

}

  1. Запуск мониторинга

main

3. Сделайте скрипт исполняемым: sudo chmod +x /usr/local/bin/minecraft-monitor.sh

4. Настройка JVM мониторинга =

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

1. Создайте скрипт для мониторинга JVM: sudo nano /usr/local/bin/jvm-monitor.sh

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

  1. JVM мониторинг для Minecraft

LOG_FILE="/var/log/jvm-monitor.log" ALERT_EMAIL="admin@example.com"

  1. Функция логирования

log_message() {

   echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE

}

  1. Функция отправки уведомлений

send_alert() {

   echo "$1" | mail -s "JVM Alert - Minecraft" $ALERT_EMAIL
   log_message "ALERT: $1"

}

  1. Поиск PID процесса Minecraft

find_minecraft_pid() {

   PID=$(pgrep -f "spigot\|paper\|bukkit\|bedrock" | head -1)
   if [ -z "$PID" ]; then
       log_message "Minecraft process not found"
       return 1
   fi
   echo $PID

}

  1. Мониторинг GC

monitor_gc() {

   PID=$(find_minecraft_pid)
   if [ $? -eq 0 ]; then
       GC_TIME=$(jstat -gc $PID | tail -1 | awk '{print $3+$5}')
       log_message "GC Time: $GC_TIME ms"
       
       if [ $(echo "$GC_TIME > 1000" | bc) -eq 1 ]; then
           send_alert "Высокое время GC: ${GC_TIME}ms"
       fi
   fi

}

  1. Мониторинг heap

monitor_heap() {

   PID=$(find_minecraft_pid)
   if [ $? -eq 0 ]; then
       HEAP_USED=$(jstat -gc $PID | tail -1 | awk '{print $3}')
       HEAP_MAX=$(jstat -gc $PID | tail -1 | awk '{print $4}')
       HEAP_PERCENT=$(echo "scale=2; $HEAP_USED * 100 / $HEAP_MAX" | bc)
       
       log_message "Heap Usage: ${HEAP_PERCENT}%"
       
       if [ $(echo "$HEAP_PERCENT > 80" | bc) -eq 1 ]; then
           send_alert "Высокое использование heap: ${HEAP_PERCENT}%"
       fi
   fi

}

  1. Мониторинг потоков

monitor_threads() {

   PID=$(find_minecraft_pid)
   if [ $? -eq 0 ]; then
       THREADS=$(jstack $PID | grep "nid=" | wc -l)
       log_message "Thread count: $THREADS"
       
       if [ $THREADS -gt 200 ]; then
           send_alert "Высокое количество потоков: $THREADS"
       fi
   fi

}

  1. Основная функция

main() {

   log_message "Starting JVM monitoring..."
   
   monitor_gc
   monitor_heap
   monitor_threads
   
   log_message "JVM monitoring completed"

}

  1. Запуск мониторинга

main

3. Сделайте скрипт исполняемым: sudo chmod +x /usr/local/bin/jvm-monitor.sh

5. Настройка мониторинга производительности =

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

1. Создайте скрипт мониторинга производительности: sudo nano /usr/local/bin/performance-monitor.sh

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

  1. Мониторинг производительности Minecraft

LOG_FILE="/var/log/performance-monitor.log" ALERT_EMAIL="admin@example.com"

  1. Функция логирования

log_message() {

   echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE

}

  1. Мониторинг TPS (если доступно)

monitor_tps() {

   # Попытка получить TPS из логов сервера
   TPS_LOG=$(tail -100 /opt/minecraft/logs/latest.log | grep -i "tps" | tail -1)
   if [ ! -z "$TPS_LOG" ]; then
       log_message "TPS Info: $TPS_LOG"
   fi

}

  1. Мониторинг латентности

monitor_latency() {

   # Проверка времени отклика сервера
   START_TIME=$(date +%s%N)
   timeout 5 telnet localhost 25565 > /dev/null 2>&1
   END_TIME=$(date +%s%N)
   
   if [ $? -eq 0 ]; then
       LATENCY=$(( (END_TIME - START_TIME) / 1000000 ))
       log_message "Server latency: ${LATENCY}ms"
       
       if [ $LATENCY -gt 1000 ]; then
           send_alert "Высокая латентность сервера: ${LATENCY}ms"
       fi
   fi

}

  1. Мониторинг I/O

monitor_io() {

   IOTOP_OUTPUT=$(iotop -b -n 1 | grep minecraft | head -1)
   if [ ! -z "$IOTOP_OUTPUT" ]; then
       log_message "I/O Usage: $IOTOP_OUTPUT"
   fi

}

  1. Мониторинг сетевого трафика

monitor_network() {

   NETWORK_STATS=$(nethogs -d 1 -t | grep minecraft | head -1)
   if [ ! -z "$NETWORK_STATS" ]; then
       log_message "Network Usage: $NETWORK_STATS"
   fi

}

  1. Основная функция

main() {

   log_message "Starting performance monitoring..."
   
   monitor_tps
   monitor_latency
   monitor_io
   monitor_network
   
   log_message "Performance monitoring completed"

}

  1. Запуск мониторинга

main

3. Сделайте скрипт исполняемым: sudo chmod +x /usr/local/bin/performance-monitor.sh

6. Настройка логирования =

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

1. Создайте конфигурацию logrotate: sudo nano /etc/logrotate.d/minecraft

2. Добавьте настройки: /var/log/minecraft-*.log {

   daily
   missingok
   rotate 30
   compress
   delaycompress
   notifempty
   create 644 root root
   postrotate
       systemctl reload minecraft-spigot 2>/dev/null || true
       systemctl reload minecraft-paper 2>/dev/null || true
       systemctl reload minecraft-bukkit 2>/dev/null || true
       systemctl reload minecraft-bedrock 2>/dev/null || true
   endscript

}

/opt/minecraft/logs/*.log {

   daily
   missingok
   rotate 30
   compress
   delaycompress
   notifempty
   create 644 minecraft minecraft
   postrotate
       systemctl reload minecraft-spigot 2>/dev/null || true
       systemctl reload minecraft-paper 2>/dev/null || true
       systemctl reload minecraft-bukkit 2>/dev/null || true
       systemctl reload minecraft-bedrock 2>/dev/null || true
   endscript

}

Настройка централизованного логирования

1. Создайте скрипт сбора логов: sudo nano /usr/local/bin/log-collector.sh

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

  1. Сбор логов Minecraft

LOG_DIR="/var/log/minecraft-collected" DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $LOG_DIR

  1. Сбор системных логов

journalctl -u minecraft-spigot --since "1 hour ago" > $LOG_DIR/spigot-system-$DATE.log journalctl -u minecraft-paper --since "1 hour ago" > $LOG_DIR/paper-system-$DATE.log journalctl -u minecraft-bukkit --since "1 hour ago" > $LOG_DIR/bukkit-system-$DATE.log journalctl -u minecraft-bedrock --since "1 hour ago" > $LOG_DIR/bedrock-system-$DATE.log

  1. Сбор логов сервера

if [ -f "/opt/minecraft/logs/latest.log" ]; then

   cp /opt/minecraft/logs/latest.log $LOG_DIR/server-latest-$DATE.log

fi

  1. Сбор логов мониторинга

cp /var/log/minecraft-monitor.log $LOG_DIR/monitor-$DATE.log 2>/dev/null || true cp /var/log/jvm-monitor.log $LOG_DIR/jvm-$DATE.log 2>/dev/null || true cp /var/log/performance-monitor.log $LOG_DIR/performance-$DATE.log 2>/dev/null || true

echo "Log collection completed: $DATE"

3. Сделайте скрипт исполняемым: sudo chmod +x /usr/local/bin/log-collector.sh

7. Настройка автоматических отчетов =

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

1. Создайте скрипт генерации отчетов: sudo nano /usr/local/bin/minecraft-report.sh

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

  1. Генерация отчетов Minecraft

REPORT_DIR="/var/log/minecraft-reports" DATE=$(date +%Y%m%d_%H%M%S) REPORT_FILE="$REPORT_DIR/minecraft-report-$DATE.txt"

mkdir -p $REPORT_DIR

  1. Создание отчета

{

   echo "=== Minecraft Server Report ==="
   echo "Date: $(date)"
   echo ""
   
   echo "=== System Status ==="
   echo "Uptime: $(uptime)"
   echo "Load Average: $(cat /proc/loadavg)"
   echo ""
   
   echo "=== Memory Usage ==="
   free -h
   echo ""
   
   echo "=== Disk Usage ==="
   df -h
   echo ""
   
   echo "=== Network Connections ==="
   netstat -an | grep :25565 | wc -l
   echo ""
   
   echo "=== Server Status ==="
   systemctl status minecraft-spigot minecraft-paper minecraft-bukkit minecraft-bedrock --no-pager
   echo ""
   
   echo "=== Recent Logs ==="
   tail -50 /opt/minecraft/logs/latest.log 2>/dev/null || echo "No server logs found"
   echo ""
   

} > $REPORT_FILE

  1. Отправка отчета по email

mail -s "Minecraft Server Report - $DATE" admin@example.com < $REPORT_FILE

echo "Report generated: $REPORT_FILE"

3. Сделайте скрипт исполняемым: sudo chmod +x /usr/local/bin/minecraft-report.sh

8. Настройка cron задач =

Настройка расписания мониторинга

1. Отредактируйте crontab: sudo crontab -e

2. Добавьте задачи мониторинга: # Minecraft Monitoring

  1. Базовый мониторинг каждые 5 минут
  • /5 * * * * /usr/local/bin/minecraft-monitor.sh
  1. JVM мониторинг каждые 10 минут
  • /10 * * * * /usr/local/bin/jvm-monitor.sh
  1. Мониторинг производительности каждые 15 минут
  • /15 * * * * /usr/local/bin/performance-monitor.sh
  1. Сбор логов каждый час

0 * * * * /usr/local/bin/log-collector.sh

  1. Генерация отчетов каждый день в 6:00

0 6 * * * /usr/local/bin/minecraft-report.sh

9. Настройка веб-мониторинга =

Установка веб-сервера

1. Установите Apache: sudo apt install -y apache2

2. Запустите и включите автозапуск: sudo systemctl start apache2 sudo systemctl enable apache2

Создание веб-интерфейса

1. Создайте директорию для веб-интерфейса: sudo mkdir -p /var/www/html/minecraft-monitor

2. Создайте HTML страницу: sudo nano /var/www/html/minecraft-monitor/index.html

3. Добавьте содержимое: <!DOCTYPE html> <html> <head>

   <title>Minecraft Server Monitor</title>
   <meta http-equiv="refresh" content="30">

</head> <body>

Minecraft Server Monitor

Server Status

<?php
        echo "Uptime: " . shell_exec('uptime') . "\n";
        echo "Load Average: " . shell_exec('cat /proc/loadavg') . "\n";
        echo "Memory Usage:\n" . shell_exec('free -h') . "\n";
        echo "Disk Usage:\n" . shell_exec('df -h') . "\n";
        echo "Active Connections: " . shell_exec('netstat -an | grep :25565 | wc -l') . "\n";
    ?>

Recent Logs

<?php
        echo shell_exec('tail -50 /opt/minecraft/logs/latest.log 2>/dev/null || echo "No logs available"');
    ?>

</body> </html>

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

Частые проблемы

1. Мониторинг не работает:

  • Проверьте права доступа к скриптам
  • Проверьте настройки cron
  • Проверьте логи мониторинга

2. Ложные срабатывания:

  • Настройте пороги уведомлений
  • Проверьте настройки мониторинга
  • Оптимизируйте скрипты

3. Проблемы с производительностью:

  • Оптимизируйте частоту мониторинга
  • Проверьте использование ресурсов
  • Настройте фильтрацию логов

Диагностика

1. Проверка статуса мониторинга: sudo crontab -l sudo systemctl status cron

2. Проверка логов мониторинга: tail -f /var/log/minecraft-monitor.log tail -f /var/log/jvm-monitor.log

3. Проверка производительности: htop iotop nethogs

4. Тестирование скриптов: sudo /usr/local/bin/minecraft-monitor.sh sudo /usr/local/bin/jvm-monitor.sh

Заключение

Мониторинг и диагностика Minecraft сервера успешно настроены! Теперь у вас есть комплексная система мониторинга с возможностями отслеживания производительности, логирования и автоматических отчетов.

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

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