Мониторинг и диагностика 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
Мониторинг и диагностика 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 серверов!