Мониторинг и диагностика Minecraft сервера — различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск
(Новая страница: «= Мониторинг и диагностика Minecraft сервера = == 1. Подготовка системы == * Войдите в систему по…»)
 
 
Строка 7: Строка 7:
 
* Рекомендуется использовать Ubuntu 24.04 LTS для стабильной работы.
 
* Рекомендуется использовать Ubuntu 24.04 LTS для стабильной работы.
  
== 2. Установка инструментов мониторинга ===
+
== 2. Установка инструментов мониторинга ==
  
 
=== Обновление системы ===
 
=== Обновление системы ===
  
 
1. Обновите систему:
 
1. Обновите систему:
<code>sudo apt update</code>
+
<pre>sudo apt update</pre>
<code>sudo apt upgrade -y</code>
+
<pre>sudo apt upgrade -y</pre>
  
 
2. Установите основные инструменты мониторинга:
 
2. Установите основные инструменты мониторинга:
<code>sudo apt install -y htop iotop nethogs netstat-nat lsof</code>
+
<pre>sudo apt install -y htop iotop nethogs netstat-nat lsof</pre>
  
 
=== Установка дополнительных инструментов ===
 
=== Установка дополнительных инструментов ===
  
 
1. Установите специализированные инструменты:
 
1. Установите специализированные инструменты:
<code>sudo apt install -y sysstat dstat iftop</code>
+
<pre>sudo apt install -y sysstat dstat iftop</pre>
  
 
2. Установите инструменты для мониторинга Java:
 
2. Установите инструменты для мониторинга Java:
<code>sudo apt install -y openjdk-21-jdk</code>
+
<pre>sudo apt install -y openjdk-21-jdk</pre>
  
== 3. Настройка базового мониторинга ===
+
== 3. Настройка базового мониторинга ==
  
 
=== Создание скрипта мониторинга ===
 
=== Создание скрипта мониторинга ===
  
 
1. Создайте основной скрипт мониторинга:
 
1. Создайте основной скрипт мониторинга:
<code>sudo nano /usr/local/bin/minecraft-monitor.sh</code>
+
<pre>sudo nano /usr/local/bin/minecraft-monitor.sh</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>#!/bin/bash
+
<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
</code>
+
</pre>
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/minecraft-monitor.sh</code>
+
<pre>sudo chmod +x /usr/local/bin/minecraft-monitor.sh</pre>
  
== 4. Настройка JVM мониторинга ===
+
== 4. Настройка JVM мониторинга ==
  
 
=== Создание скрипта JVM мониторинга ===
 
=== Создание скрипта JVM мониторинга ===
  
 
1. Создайте скрипт для мониторинга JVM:
 
1. Создайте скрипт для мониторинга JVM:
<code>sudo nano /usr/local/bin/jvm-monitor.sh</code>
+
<pre>sudo nano /usr/local/bin/jvm-monitor.sh</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>#!/bin/bash
+
<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
</code>
+
</pre>
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/jvm-monitor.sh</code>
+
<pre>sudo chmod +x /usr/local/bin/jvm-monitor.sh</pre>
  
== 5. Настройка мониторинга производительности ===
+
== 5. Настройка мониторинга производительности ==
  
 
=== Создание скрипта производительности ===
 
=== Создание скрипта производительности ===
  
 
1. Создайте скрипт мониторинга производительности:
 
1. Создайте скрипт мониторинга производительности:
<code>sudo nano /usr/local/bin/performance-monitor.sh</code>
+
<pre>sudo nano /usr/local/bin/performance-monitor.sh</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>#!/bin/bash
+
<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
</code>
+
</pre>
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/performance-monitor.sh</code>
+
<pre>sudo chmod +x /usr/local/bin/performance-monitor.sh</pre>
  
== 6. Настройка логирования ===
+
== 6. Настройка логирования ==
  
 
=== Настройка ротации логов ===
 
=== Настройка ротации логов ===
  
 
1. Создайте конфигурацию logrotate:
 
1. Создайте конфигурацию logrotate:
<code>sudo nano /etc/logrotate.d/minecraft</code>
+
<pre>sudo nano /etc/logrotate.d/minecraft</pre>
  
 
2. Добавьте настройки:
 
2. Добавьте настройки:
<code>/var/log/minecraft-*.log {
+
<pre>/var/log/minecraft-*.log {
 
     daily
 
     daily
 
     missingok
 
     missingok
Строка 340: Строка 340:
 
     endscript
 
     endscript
 
}
 
}
</code>
+
</pre>
  
 
=== Настройка централизованного логирования ===
 
=== Настройка централизованного логирования ===
  
 
1. Создайте скрипт сбора логов:
 
1. Создайте скрипт сбора логов:
<code>sudo nano /usr/local/bin/log-collector.sh</code>
+
<pre>sudo nano /usr/local/bin/log-collector.sh</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>#!/bin/bash
+
<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"
</code>
+
</pre>
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/log-collector.sh</code>
+
<pre>sudo chmod +x /usr/local/bin/log-collector.sh</pre>
  
== 7. Настройка автоматических отчетов ===
+
== 7. Настройка автоматических отчетов ==
  
 
=== Создание скрипта отчетов ===
 
=== Создание скрипта отчетов ===
  
 
1. Создайте скрипт генерации отчетов:
 
1. Создайте скрипт генерации отчетов:
<code>sudo nano /usr/local/bin/minecraft-report.sh</code>
+
<pre>sudo nano /usr/local/bin/minecraft-report.sh</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>#!/bin/bash
+
<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"
</code>
+
</pre>
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/minecraft-report.sh</code>
+
<pre>sudo chmod +x /usr/local/bin/minecraft-report.sh</pre>
  
== 8. Настройка cron задач ===
+
== 8. Настройка cron задач ==
  
 
=== Настройка расписания мониторинга ===
 
=== Настройка расписания мониторинга ===
  
 
1. Отредактируйте crontab:
 
1. Отредактируйте crontab:
<code>sudo crontab -e</code>
+
<pre>sudo crontab -e</pre>
  
 
2. Добавьте задачи мониторинга:
 
2. Добавьте задачи мониторинга:
<code># Minecraft Monitoring
+
<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
</code>
+
</pre>
  
== 9. Настройка веб-мониторинга ===
+
== 9. Настройка веб-мониторинга ==
  
 
=== Установка веб-сервера ===
 
=== Установка веб-сервера ===
  
 
1. Установите Apache:
 
1. Установите Apache:
<code>sudo apt install -y apache2</code>
+
<pre>sudo apt install -y apache2</pre>
  
 
2. Запустите и включите автозапуск:
 
2. Запустите и включите автозапуск:
<code>sudo systemctl start apache2</code>
+
<pre>sudo systemctl start apache2</pre>
<code>sudo systemctl enable apache2</code>
+
<pre>sudo systemctl enable apache2</pre>
  
 
=== Создание веб-интерфейса ===
 
=== Создание веб-интерфейса ===
  
 
1. Создайте директорию для веб-интерфейса:
 
1. Создайте директорию для веб-интерфейса:
<code>sudo mkdir -p /var/www/html/minecraft-monitor</code>
+
<pre>sudo mkdir -p /var/www/html/minecraft-monitor</pre>
  
 
2. Создайте HTML страницу:
 
2. Создайте HTML страницу:
<code>sudo nano /var/www/html/minecraft-monitor/index.html</code>
+
<pre>sudo nano /var/www/html/minecraft-monitor/index.html</pre>
  
 
3. Добавьте содержимое:
 
3. Добавьте содержимое:
<code><!DOCTYPE html>
+
<pre><!DOCTYPE html>
 
<html>
 
<html>
 
<head>
 
<head>
Строка 505: Строка 505:
 
</body>
 
</body>
 
</html>
 
</html>
</code>
+
</pre>
  
== 10. Устранение неполадок ===
+
== 10. Устранение неполадок ==
  
 
=== Частые проблемы ===
 
=== Частые проблемы ===
Строка 529: Строка 529:
  
 
1. '''Проверка статуса мониторинга''':
 
1. '''Проверка статуса мониторинга''':
<code>sudo crontab -l</code>
+
<pre>sudo crontab -l</pre>
<code>sudo systemctl status cron</code>
+
<pre>sudo systemctl status cron</pre>
  
 
2. '''Проверка логов мониторинга''':
 
2. '''Проверка логов мониторинга''':
<code>tail -f /var/log/minecraft-monitor.log</code>
+
<pre>tail -f /var/log/minecraft-monitor.log</pre>
<code>tail -f /var/log/jvm-monitor.log</code>
+
<pre>tail -f /var/log/jvm-monitor.log</pre>
  
 
3. '''Проверка производительности''':
 
3. '''Проверка производительности''':
<code>htop</code>
+
<pre>htop</pre>
<code>iotop</code>
+
<pre>iotop</pre>
<code>nethogs</code>
+
<pre>nethogs</pre>
  
 
4. '''Тестирование скриптов''':
 
4. '''Тестирование скриптов''':
<code>sudo /usr/local/bin/minecraft-monitor.sh</code>
+
<pre>sudo /usr/local/bin/minecraft-monitor.sh</pre>
<code>sudo /usr/local/bin/jvm-monitor.sh</code>
+
<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):

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