Мониторинг и диагностика Minecraft сервера — различия между версиями
Admin (обсуждение | вклад) (Новая страница: «= Мониторинг и диагностика Minecraft сервера = == 1. Подготовка системы == * Войдите в систему по…») |
Admin (обсуждение | вклад) |
||
Строка 7: | Строка 7: | ||
* Рекомендуется использовать Ubuntu 24.04 LTS для стабильной работы. | * Рекомендуется использовать Ubuntu 24.04 LTS для стабильной работы. | ||
− | == 2. Установка инструментов мониторинга | + | == 2. Установка инструментов мониторинга == |
=== Обновление системы === | === Обновление системы === | ||
1. Обновите систему: | 1. Обновите систему: | ||
− | < | + | <pre>sudo apt update</pre> |
− | < | + | <pre>sudo apt upgrade -y</pre> |
2. Установите основные инструменты мониторинга: | 2. Установите основные инструменты мониторинга: | ||
− | < | + | <pre>sudo apt install -y htop iotop nethogs netstat-nat lsof</pre> |
=== Установка дополнительных инструментов === | === Установка дополнительных инструментов === | ||
1. Установите специализированные инструменты: | 1. Установите специализированные инструменты: | ||
− | < | + | <pre>sudo apt install -y sysstat dstat iftop</pre> |
2. Установите инструменты для мониторинга Java: | 2. Установите инструменты для мониторинга Java: | ||
− | < | + | <pre>sudo apt install -y openjdk-21-jdk</pre> |
− | == 3. Настройка базового мониторинга | + | == 3. Настройка базового мониторинга == |
=== Создание скрипта мониторинга === | === Создание скрипта мониторинга === | ||
1. Создайте основной скрипт мониторинга: | 1. Создайте основной скрипт мониторинга: | ||
− | < | + | <pre>sudo nano /usr/local/bin/minecraft-monitor.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>\#!/bin/bash |
− | # Настройки мониторинга | + | \# Настройки мониторинга |
LOG_FILE="/var/log/minecraft-monitor.log" | LOG_FILE="/var/log/minecraft-monitor.log" | ||
ALERT_EMAIL="admin@example.com" | ALERT_EMAIL="admin@example.com" | ||
SERVER_NAME="Minecraft Server" | SERVER_NAME="Minecraft Server" | ||
− | # Функция логирования | + | \# Функция логирования |
log_message() { | log_message() { | ||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE | echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE | ||
} | } | ||
− | # Функция отправки уведомлений | + | \# Функция отправки уведомлений |
send_alert() { | send_alert() { | ||
echo "$1" | mail -s "Minecraft Alert - $SERVER_NAME" $ALERT_EMAIL | echo "$1" | mail -s "Minecraft Alert - $SERVER_NAME" $ALERT_EMAIL | ||
Строка 52: | Строка 52: | ||
} | } | ||
− | # Проверка статуса сервера | + | \# Проверка статуса сервера |
check_server_status() { | check_server_status() { | ||
if ! systemctl is-active --quiet minecraft-spigot minecraft-paper minecraft-bukkit minecraft-bedrock; then | if ! systemctl is-active --quiet minecraft-spigot minecraft-paper minecraft-bukkit minecraft-bedrock; then | ||
Строка 61: | Строка 61: | ||
} | } | ||
− | # Проверка использования CPU | + | \# Проверка использования CPU |
check_cpu_usage() { | check_cpu_usage() { | ||
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | awk -F'%' '{print $1}') | CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | awk -F'%' '{print $1}') | ||
Строка 70: | Строка 70: | ||
} | } | ||
− | # Проверка использования памяти | + | \# Проверка использования памяти |
check_memory_usage() { | check_memory_usage() { | ||
MEMORY_USAGE=$(free | grep Mem | awk '{printf("%.2f", $3/$2 * 100.0)}') | MEMORY_USAGE=$(free | grep Mem | awk '{printf("%.2f", $3/$2 * 100.0)}') | ||
Строка 79: | Строка 79: | ||
} | } | ||
− | # Проверка использования диска | + | \# Проверка использования диска |
check_disk_usage() { | check_disk_usage() { | ||
DISK_USAGE=$(df /opt/minecraft | tail -1 | awk '{print $5}' | sed 's/%//') | DISK_USAGE=$(df /opt/minecraft | tail -1 | awk '{print $5}' | sed 's/%//') | ||
Строка 88: | Строка 88: | ||
} | } | ||
− | # Проверка сетевого трафика | + | \# Проверка сетевого трафика |
check_network_usage() { | check_network_usage() { | ||
NETWORK_IN=$(cat /proc/net/dev | grep eth0 | awk '{print $2}') | NETWORK_IN=$(cat /proc/net/dev | grep eth0 | awk '{print $2}') | ||
Строка 95: | Строка 95: | ||
} | } | ||
− | # Проверка подключений | + | \# Проверка подключений |
check_connections() { | check_connections() { | ||
CONNECTIONS=$(netstat -an | grep :25565 | wc -l) | CONNECTIONS=$(netstat -an | grep :25565 | wc -l) | ||
Строка 105: | Строка 105: | ||
} | } | ||
− | # Основная функция мониторинга | + | \# Основная функция мониторинга |
main() { | main() { | ||
log_message "Starting Minecraft monitoring..." | log_message "Starting Minecraft monitoring..." | ||
Строка 119: | Строка 119: | ||
} | } | ||
− | # Запуск мониторинга | + | \# Запуск мониторинга |
main | main | ||
− | </ | + | </pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/minecraft-monitor.sh</pre> |
− | == 4. Настройка JVM мониторинга | + | == 4. Настройка JVM мониторинга == |
=== Создание скрипта JVM мониторинга === | === Создание скрипта JVM мониторинга === | ||
1. Создайте скрипт для мониторинга JVM: | 1. Создайте скрипт для мониторинга JVM: | ||
− | < | + | <pre>sudo nano /usr/local/bin/jvm-monitor.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>\#!/bin/bash |
− | # JVM мониторинг для Minecraft | + | \# JVM мониторинг для Minecraft |
LOG_FILE="/var/log/jvm-monitor.log" | LOG_FILE="/var/log/jvm-monitor.log" | ||
ALERT_EMAIL="admin@example.com" | ALERT_EMAIL="admin@example.com" | ||
− | # Функция логирования | + | \# Функция логирования |
log_message() { | log_message() { | ||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE | echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE | ||
} | } | ||
− | # Функция отправки уведомлений | + | \# Функция отправки уведомлений |
send_alert() { | send_alert() { | ||
echo "$1" | mail -s "JVM Alert - Minecraft" $ALERT_EMAIL | echo "$1" | mail -s "JVM Alert - Minecraft" $ALERT_EMAIL | ||
Строка 151: | Строка 151: | ||
} | } | ||
− | # Поиск PID процесса Minecraft | + | \# Поиск PID процесса Minecraft |
find_minecraft_pid() { | find_minecraft_pid() { | ||
PID=$(pgrep -f "spigot\|paper\|bukkit\|bedrock" | head -1) | PID=$(pgrep -f "spigot\|paper\|bukkit\|bedrock" | head -1) | ||
Строка 161: | Строка 161: | ||
} | } | ||
− | # Мониторинг GC | + | \# Мониторинг GC |
monitor_gc() { | monitor_gc() { | ||
PID=$(find_minecraft_pid) | PID=$(find_minecraft_pid) | ||
Строка 174: | Строка 174: | ||
} | } | ||
− | # Мониторинг heap | + | \# Мониторинг heap |
monitor_heap() { | monitor_heap() { | ||
PID=$(find_minecraft_pid) | PID=$(find_minecraft_pid) | ||
Строка 190: | Строка 190: | ||
} | } | ||
− | # Мониторинг потоков | + | \# Мониторинг потоков |
monitor_threads() { | monitor_threads() { | ||
PID=$(find_minecraft_pid) | PID=$(find_minecraft_pid) | ||
Строка 203: | Строка 203: | ||
} | } | ||
− | # Основная функция | + | \# Основная функция |
main() { | main() { | ||
log_message "Starting JVM monitoring..." | log_message "Starting JVM monitoring..." | ||
Строка 214: | Строка 214: | ||
} | } | ||
− | # Запуск мониторинга | + | \# Запуск мониторинга |
main | main | ||
− | </ | + | </pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/jvm-monitor.sh</pre> |
− | == 5. Настройка мониторинга производительности | + | == 5. Настройка мониторинга производительности == |
=== Создание скрипта производительности === | === Создание скрипта производительности === | ||
1. Создайте скрипт мониторинга производительности: | 1. Создайте скрипт мониторинга производительности: | ||
− | < | + | <pre>sudo nano /usr/local/bin/performance-monitor.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>\#!/bin/bash |
− | # Мониторинг производительности Minecraft | + | \# Мониторинг производительности Minecraft |
LOG_FILE="/var/log/performance-monitor.log" | LOG_FILE="/var/log/performance-monitor.log" | ||
ALERT_EMAIL="admin@example.com" | ALERT_EMAIL="admin@example.com" | ||
− | # Функция логирования | + | \# Функция логирования |
log_message() { | log_message() { | ||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE | echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE | ||
} | } | ||
− | # Мониторинг TPS (если доступно) | + | \# Мониторинг TPS (если доступно) |
monitor_tps() { | monitor_tps() { | ||
# Попытка получить TPS из логов сервера | # Попытка получить TPS из логов сервера | ||
Строка 249: | Строка 249: | ||
} | } | ||
− | # Мониторинг латентности | + | \# Мониторинг латентности |
monitor_latency() { | monitor_latency() { | ||
# Проверка времени отклика сервера | # Проверка времени отклика сервера | ||
Строка 266: | Строка 266: | ||
} | } | ||
− | # Мониторинг I/O | + | \# Мониторинг I/O |
monitor_io() { | monitor_io() { | ||
IOTOP_OUTPUT=$(iotop -b -n 1 | grep minecraft | head -1) | IOTOP_OUTPUT=$(iotop -b -n 1 | grep minecraft | head -1) | ||
Строка 274: | Строка 274: | ||
} | } | ||
− | # Мониторинг сетевого трафика | + | \# Мониторинг сетевого трафика |
monitor_network() { | monitor_network() { | ||
NETWORK_STATS=$(nethogs -d 1 -t | grep minecraft | head -1) | NETWORK_STATS=$(nethogs -d 1 -t | grep minecraft | head -1) | ||
Строка 282: | Строка 282: | ||
} | } | ||
− | # Основная функция | + | \# Основная функция |
main() { | main() { | ||
log_message "Starting performance monitoring..." | log_message "Starting performance monitoring..." | ||
Строка 294: | Строка 294: | ||
} | } | ||
− | # Запуск мониторинга | + | \# Запуск мониторинга |
main | main | ||
− | </ | + | </pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/performance-monitor.sh</pre> |
− | == 6. Настройка логирования | + | == 6. Настройка логирования == |
=== Настройка ротации логов === | === Настройка ротации логов === | ||
1. Создайте конфигурацию logrotate: | 1. Создайте конфигурацию logrotate: | ||
− | < | + | <pre>sudo nano /etc/logrotate.d/minecraft</pre> |
2. Добавьте настройки: | 2. Добавьте настройки: | ||
− | < | + | <pre>/var/log/minecraft-*.log { |
daily | daily | ||
missingok | missingok | ||
Строка 340: | Строка 340: | ||
endscript | endscript | ||
} | } | ||
− | </ | + | </pre> |
=== Настройка централизованного логирования === | === Настройка централизованного логирования === | ||
1. Создайте скрипт сбора логов: | 1. Создайте скрипт сбора логов: | ||
− | < | + | <pre>sudo nano /usr/local/bin/log-collector.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>\#!/bin/bash |
− | # Сбор логов Minecraft | + | \# Сбор логов Minecraft |
LOG_DIR="/var/log/minecraft-collected" | LOG_DIR="/var/log/minecraft-collected" | ||
DATE=$(date +%Y%m%d_%H%M%S) | DATE=$(date +%Y%m%d_%H%M%S) | ||
Строка 356: | Строка 356: | ||
mkdir -p $LOG_DIR | mkdir -p $LOG_DIR | ||
− | # Сбор системных логов | + | \# Сбор системных логов |
journalctl -u minecraft-spigot --since "1 hour ago" > $LOG_DIR/spigot-system-$DATE.log | 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-paper --since "1 hour ago" > $LOG_DIR/paper-system-$DATE.log | ||
Строка 362: | Строка 362: | ||
journalctl -u minecraft-bedrock --since "1 hour ago" > $LOG_DIR/bedrock-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 | if [ -f "/opt/minecraft/logs/latest.log" ]; then | ||
cp /opt/minecraft/logs/latest.log $LOG_DIR/server-latest-$DATE.log | cp /opt/minecraft/logs/latest.log $LOG_DIR/server-latest-$DATE.log | ||
fi | fi | ||
− | # Сбор логов мониторинга | + | \# Сбор логов мониторинга |
cp /var/log/minecraft-monitor.log $LOG_DIR/monitor-$DATE.log 2>/dev/null || true | 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/jvm-monitor.log $LOG_DIR/jvm-$DATE.log 2>/dev/null || true | ||
Строка 373: | Строка 373: | ||
echo "Log collection completed: $DATE" | echo "Log collection completed: $DATE" | ||
− | </ | + | </pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/log-collector.sh</pre> |
− | == 7. Настройка автоматических отчетов | + | == 7. Настройка автоматических отчетов == |
=== Создание скрипта отчетов === | === Создание скрипта отчетов === | ||
1. Создайте скрипт генерации отчетов: | 1. Создайте скрипт генерации отчетов: | ||
− | < | + | <pre>sudo nano /usr/local/bin/minecraft-report.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>\#!/bin/bash |
− | # Генерация отчетов Minecraft | + | \# Генерация отчетов Minecraft |
REPORT_DIR="/var/log/minecraft-reports" | REPORT_DIR="/var/log/minecraft-reports" | ||
DATE=$(date +%Y%m%d_%H%M%S) | DATE=$(date +%Y%m%d_%H%M%S) | ||
Строка 395: | Строка 395: | ||
mkdir -p $REPORT_DIR | mkdir -p $REPORT_DIR | ||
− | # Создание отчета | + | \# Создание отчета |
{ | { | ||
echo "=== Minecraft Server Report ===" | echo "=== Minecraft Server Report ===" | ||
Строка 428: | Строка 428: | ||
} > $REPORT_FILE | } > $REPORT_FILE | ||
− | # Отправка отчета по email | + | \# Отправка отчета по email |
mail -s "Minecraft Server Report - $DATE" admin@example.com < $REPORT_FILE | mail -s "Minecraft Server Report - $DATE" admin@example.com < $REPORT_FILE | ||
echo "Report generated: $REPORT_FILE" | echo "Report generated: $REPORT_FILE" | ||
− | </ | + | </pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/minecraft-report.sh</pre> |
− | == 8. Настройка cron задач | + | == 8. Настройка cron задач == |
=== Настройка расписания мониторинга === | === Настройка расписания мониторинга === | ||
1. Отредактируйте crontab: | 1. Отредактируйте crontab: | ||
− | < | + | <pre>sudo crontab -e</pre> |
2. Добавьте задачи мониторинга: | 2. Добавьте задачи мониторинга: | ||
− | < | + | <pre>\# Minecraft Monitoring |
− | # Базовый мониторинг каждые 5 минут | + | \# Базовый мониторинг каждые 5 минут |
*/5 * * * * /usr/local/bin/minecraft-monitor.sh | */5 * * * * /usr/local/bin/minecraft-monitor.sh | ||
− | # JVM мониторинг каждые 10 минут | + | \# JVM мониторинг каждые 10 минут |
*/10 * * * * /usr/local/bin/jvm-monitor.sh | */10 * * * * /usr/local/bin/jvm-monitor.sh | ||
− | # Мониторинг производительности каждые 15 минут | + | \# Мониторинг производительности каждые 15 минут |
*/15 * * * * /usr/local/bin/performance-monitor.sh | */15 * * * * /usr/local/bin/performance-monitor.sh | ||
− | # Сбор логов каждый час | + | \# Сбор логов каждый час |
0 * * * * /usr/local/bin/log-collector.sh | 0 * * * * /usr/local/bin/log-collector.sh | ||
− | # Генерация отчетов каждый день в 6:00 | + | \# Генерация отчетов каждый день в 6:00 |
0 6 * * * /usr/local/bin/minecraft-report.sh | 0 6 * * * /usr/local/bin/minecraft-report.sh | ||
− | </ | + | </pre> |
− | == 9. Настройка веб-мониторинга | + | == 9. Настройка веб-мониторинга == |
=== Установка веб-сервера === | === Установка веб-сервера === | ||
1. Установите Apache: | 1. Установите Apache: | ||
− | < | + | <pre>sudo apt install -y apache2</pre> |
2. Запустите и включите автозапуск: | 2. Запустите и включите автозапуск: | ||
− | < | + | <pre>sudo systemctl start apache2</pre> |
− | < | + | <pre>sudo systemctl enable apache2</pre> |
=== Создание веб-интерфейса === | === Создание веб-интерфейса === | ||
1. Создайте директорию для веб-интерфейса: | 1. Создайте директорию для веб-интерфейса: | ||
− | < | + | <pre>sudo mkdir -p /var/www/html/minecraft-monitor</pre> |
2. Создайте HTML страницу: | 2. Создайте HTML страницу: | ||
− | < | + | <pre>sudo nano /var/www/html/minecraft-monitor/index.html</pre> |
3. Добавьте содержимое: | 3. Добавьте содержимое: | ||
− | < | + | <pre><!DOCTYPE html> |
<html> | <html> | ||
<head> | <head> | ||
Строка 505: | Строка 505: | ||
</body> | </body> | ||
</html> | </html> | ||
− | </ | + | </pre> |
− | == 10. Устранение неполадок | + | == 10. Устранение неполадок == |
=== Частые проблемы === | === Частые проблемы === | ||
Строка 529: | Строка 529: | ||
1. '''Проверка статуса мониторинга''': | 1. '''Проверка статуса мониторинга''': | ||
− | < | + | <pre>sudo crontab -l</pre> |
− | < | + | <pre>sudo systemctl status cron</pre> |
2. '''Проверка логов мониторинга''': | 2. '''Проверка логов мониторинга''': | ||
− | < | + | <pre>tail -f /var/log/minecraft-monitor.log</pre> |
− | < | + | <pre>tail -f /var/log/jvm-monitor.log</pre> |
3. '''Проверка производительности''': | 3. '''Проверка производительности''': | ||
− | < | + | <pre>htop</pre> |
− | < | + | <pre>iotop</pre> |
− | < | + | <pre>nethogs</pre> |
4. '''Тестирование скриптов''': | 4. '''Тестирование скриптов''': | ||
− | < | + | <pre>sudo /usr/local/bin/minecraft-monitor.sh</pre> |
− | < | + | <pre>sudo /usr/local/bin/jvm-monitor.sh</pre> |
== Заключение == | == Заключение == |
Текущая версия на 10:30, 15 октября 2025
Содержание
- 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 серверов!