Мониторинг и диагностика Minecraft сервера
Содержание
- 1 Мониторинг и диагностика Minecraft сервера
- 1.1 1. Подготовка системы
- 1.2 2. Установка инструментов мониторинга
- 1.3 3. Настройка базового мониторинга
- 1.4 4. Настройка JVM мониторинга
- 1.5 5. Настройка мониторинга производительности
- 1.6 6. Настройка логирования
- 1.7 7. Настройка автоматических отчетов
- 1.8 8. Настройка cron задач
- 1.9 9. Настройка веб-мониторинга
- 1.10 Recent Logs
- 1.11 10. Устранение неполадок
- 1.12 Заключение
Мониторинг и диагностика 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 \# Настройки мониторинга LOG_FILE="/var/log/minecraft-monitor.log" ALERT_EMAIL="admin@example.com" SERVER_NAME="Minecraft Server" \# Функция логирования log_message() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE } \# Функция отправки уведомлений send_alert() { echo "$1" | mail -s "Minecraft Alert - $SERVER_NAME" $ALERT_EMAIL log_message "ALERT: $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 } \# Проверка использования 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}%" } \# Проверка использования памяти 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}%" } \# Проверка использования диска 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}%" } \# Проверка сетевого трафика 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" } \# Проверка подключений check_connections() { CONNECTIONS=$(netstat -an | grep :25565 | wc -l) log_message "Active connections: $CONNECTIONS" if [ $CONNECTIONS -gt 100 ]; then send_alert "Высокое количество подключений: $CONNECTIONS" fi } \# Основная функция мониторинга 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" } \# Запуск мониторинга 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 \# JVM мониторинг для Minecraft LOG_FILE="/var/log/jvm-monitor.log" ALERT_EMAIL="admin@example.com" \# Функция логирования log_message() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE } \# Функция отправки уведомлений send_alert() { echo "$1" | mail -s "JVM Alert - Minecraft" $ALERT_EMAIL log_message "ALERT: $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 } \# Мониторинг 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 } \# Мониторинг 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 } \# Мониторинг потоков 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 } \# Основная функция main() { log_message "Starting JVM monitoring..." monitor_gc monitor_heap monitor_threads log_message "JVM monitoring completed" } \# Запуск мониторинга main
3. Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/jvm-monitor.sh
5. Настройка мониторинга производительности
Создание скрипта производительности
1. Создайте скрипт мониторинга производительности:
sudo nano /usr/local/bin/performance-monitor.sh
2. Добавьте содержимое:
\#!/bin/bash \# Мониторинг производительности Minecraft LOG_FILE="/var/log/performance-monitor.log" ALERT_EMAIL="admin@example.com" \# Функция логирования log_message() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE } \# Мониторинг 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 } \# Мониторинг латентности 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 } \# Мониторинг 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 } \# Мониторинг сетевого трафика monitor_network() { NETWORK_STATS=$(nethogs -d 1 -t | grep minecraft | head -1) if [ ! -z "$NETWORK_STATS" ]; then log_message "Network Usage: $NETWORK_STATS" fi } \# Основная функция main() { log_message "Starting performance monitoring..." monitor_tps monitor_latency monitor_io monitor_network log_message "Performance monitoring completed" } \# Запуск мониторинга 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 \# Сбор логов Minecraft LOG_DIR="/var/log/minecraft-collected" DATE=$(date +%Y%m%d_%H%M%S) mkdir -p $LOG_DIR \# Сбор системных логов 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 \# Сбор логов сервера if [ -f "/opt/minecraft/logs/latest.log" ]; then cp /opt/minecraft/logs/latest.log $LOG_DIR/server-latest-$DATE.log fi \# Сбор логов мониторинга 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 \# Генерация отчетов 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 \# Создание отчета { 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 \# Отправка отчета по 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 \# Базовый мониторинг каждые 5 минут */5 * * * * /usr/local/bin/minecraft-monitor.sh \# JVM мониторинг каждые 10 минут */10 * * * * /usr/local/bin/jvm-monitor.sh \# Мониторинг производительности каждые 15 минут */15 * * * * /usr/local/bin/performance-monitor.sh \# Сбор логов каждый час 0 * * * * /usr/local/bin/log-collector.sh \# Генерация отчетов каждый день в 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> <h1>Minecraft Server Monitor</h1> <h2>Server Status</h2> <pre><?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):
- [Выделенные серверы](https://ark-hoster.ru/dedicated/) - для высоконагруженных серверов с интенсивным мониторингом
- [VPS/VDS серверы](https://ark-hoster.ru/vpsgame/) - для небольших и средних серверов
Наши специалисты помогут с настройкой мониторинга и оптимизацией производительности ваших Minecraft серверов!