better doc
This commit is contained in:
86
install.sh
86
install.sh
@@ -1,15 +1,31 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# Oprește execuția imediat dacă apare orice eroare
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
# ============================
|
||||||
|
# VARIABILE GLOBALE
|
||||||
|
# ============================
|
||||||
|
|
||||||
|
# Directorul unde va fi instalat agentul
|
||||||
INSTALL_DIR="/opt/server-monitor"
|
INSTALL_DIR="/opt/server-monitor"
|
||||||
|
|
||||||
|
# Scriptul agentului care va rula periodic
|
||||||
AGENT="$INSTALL_DIR/monitor-agent.sh"
|
AGENT="$INSTALL_DIR/monitor-agent.sh"
|
||||||
|
|
||||||
|
# Fișierul de configurare (permisiuni restrictive)
|
||||||
CONFIG="$INSTALL_DIR/config.env"
|
CONFIG="$INSTALL_DIR/config.env"
|
||||||
|
|
||||||
|
# Comanda rulată din cron (fără output)
|
||||||
CRON_CMD="$AGENT >/dev/null 2>&1"
|
CRON_CMD="$AGENT >/dev/null 2>&1"
|
||||||
|
|
||||||
|
# Endpoint API unde se trimit datele
|
||||||
API_URL="https://itschool.pbcv.dev/api/report.php"
|
API_URL="https://itschool.pbcv.dev/api/report.php"
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# CHECK ROOT
|
# VERIFICARE PERMISIUNI ROOT
|
||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
|
# Scriptul trebuie rulat ca root (cron, /opt, system info)
|
||||||
if [[ $EUID -ne 0 ]]; then
|
if [[ $EUID -ne 0 ]]; then
|
||||||
echo "Run as root (sudo)"
|
echo "Run as root (sudo)"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -18,90 +34,127 @@ fi
|
|||||||
echo "Installing Server Monitor Agent (IPv4 only)..."
|
echo "Installing Server Monitor Agent (IPv4 only)..."
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# CREATE DIR
|
# CREARE DIRECTOR DE INSTALARE
|
||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
|
# Creează directorul dacă nu există
|
||||||
mkdir -p "$INSTALL_DIR"
|
mkdir -p "$INSTALL_DIR"
|
||||||
|
|
||||||
|
# Permisiuni standard pentru directoare de sistem
|
||||||
chmod 755 "$INSTALL_DIR"
|
chmod 755 "$INSTALL_DIR"
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# CONFIG FILE
|
# FIȘIER CONFIGURARE
|
||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
|
# Stocăm variabilele configurabile separat
|
||||||
|
# (bun pentru securitate și extensibilitate)
|
||||||
cat > "$CONFIG" <<EOF
|
cat > "$CONFIG" <<EOF
|
||||||
API_URL="$API_URL"
|
API_URL="$API_URL"
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
# Permisiuni restrictive (doar root poate citi)
|
||||||
chmod 600 "$CONFIG"
|
chmod 600 "$CONFIG"
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# AGENT SCRIPT
|
# SCRIPT AGENT (RULEAZĂ DIN CRON)
|
||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
cat > "$AGENT" <<'EOF'
|
cat > "$AGENT" <<'EOF'
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
# Importă configurația
|
||||||
source /opt/server-monitor/config.env
|
source /opt/server-monitor/config.env
|
||||||
|
|
||||||
|
# Numele mașinii
|
||||||
HOSTNAME=$(hostname)
|
HOSTNAME=$(hostname)
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# CPU
|
# CPU
|
||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
|
# Load average (1 minut)
|
||||||
CPU_LOAD=$(uptime | awk -F'load average:' '{print $2}' | cut -d',' -f1 | xargs)
|
CPU_LOAD=$(uptime | awk -F'load average:' '{print $2}' | cut -d',' -f1 | xargs)
|
||||||
|
|
||||||
|
# Număr de core-uri CPU
|
||||||
CPU_CORES=$(nproc)
|
CPU_CORES=$(nproc)
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# RAM / SWAP
|
# MEMORIE RAM / SWAP (MB)
|
||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
|
# RAM total și utilizat
|
||||||
RAM_TOTAL=$(free -m | awk '/Mem:/ {print $2}')
|
RAM_TOTAL=$(free -m | awk '/Mem:/ {print $2}')
|
||||||
RAM_USED=$(free -m | awk '/Mem:/ {print $3}')
|
RAM_USED=$(free -m | awk '/Mem:/ {print $3}')
|
||||||
|
|
||||||
|
# SWAP total și utilizat
|
||||||
SWAP_TOTAL=$(free -m | awk '/Swap:/ {print $2}')
|
SWAP_TOTAL=$(free -m | awk '/Swap:/ {print $2}')
|
||||||
SWAP_USED=$(free -m | awk '/Swap:/ {print $3}')
|
SWAP_USED=$(free -m | awk '/Swap:/ {print $3}')
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# DISK (KB)
|
# DISK (KB, partiția /)
|
||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
DISK_TOTAL=$(df -k / | awk 'NR==2 {print $2}')
|
DISK_TOTAL=$(df -k / | awk 'NR==2 {print $2}')
|
||||||
DISK_USED=$(df -k / | awk 'NR==2 {print $3}')
|
DISK_USED=$(df -k / | awk 'NR==2 {print $3}')
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# NETWORK (IPv4 ONLY)
|
# NETWORK – IPv4 ONLY
|
||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
|
# Detectează interfața activă IPv4
|
||||||
IFACE=$(ip -4 route get 1.1.1.1 2>/dev/null | awk '{print $5; exit}')
|
IFACE=$(ip -4 route get 1.1.1.1 2>/dev/null | awk '{print $5; exit}')
|
||||||
|
|
||||||
|
# Trafic RX / TX (bytes)
|
||||||
RX_BYTES=$(cat /sys/class/net/$IFACE/statistics/rx_bytes)
|
RX_BYTES=$(cat /sys/class/net/$IFACE/statistics/rx_bytes)
|
||||||
TX_BYTES=$(cat /sys/class/net/$IFACE/statistics/tx_bytes)
|
TX_BYTES=$(cat /sys/class/net/$IFACE/statistics/tx_bytes)
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# PROCESSES
|
# PROCESE
|
||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
|
# Număr total de procese
|
||||||
PROC_TOTAL=$(ps ax --no-headers | wc -l)
|
PROC_TOTAL=$(ps ax --no-headers | wc -l)
|
||||||
|
|
||||||
|
# Procese zombie (Z)
|
||||||
PROC_ZOMBIE=$(ps axo stat | grep -c Z || true)
|
PROC_ZOMBIE=$(ps axo stat | grep -c Z || true)
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# SYSTEMD
|
# SYSTEMD SERVICES
|
||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
|
# Servicii systemd eșuate
|
||||||
FAILED_SERVICES=$(systemctl --failed --no-legend 2>/dev/null | wc -l)
|
FAILED_SERVICES=$(systemctl --failed --no-legend 2>/dev/null | wc -l)
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# NETWORK PORTS (IPv4 ONLY)
|
# PORTURI DESCHISE (IPv4)
|
||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
|
# Porturi ascultate TCP/UDP IPv4
|
||||||
OPEN_PORTS=$(ss -4 -lntu | tail -n +2 | wc -l)
|
OPEN_PORTS=$(ss -4 -lntu | tail -n +2 | wc -l)
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# OS / KERNEL
|
# OS / KERNEL / ARHITECTURĂ
|
||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
|
# Nume OS (fallback dacă lsb_release nu există)
|
||||||
OS_NAME=$(lsb_release -ds 2>/dev/null || grep PRETTY_NAME /etc/os-release | cut -d= -f2 | tr -d '"')
|
OS_NAME=$(lsb_release -ds 2>/dev/null || grep PRETTY_NAME /etc/os-release | cut -d= -f2 | tr -d '"')
|
||||||
|
|
||||||
KERNEL=$(uname -r)
|
KERNEL=$(uname -r)
|
||||||
ARCH=$(uname -m)
|
ARCH=$(uname -m)
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# UPTIME
|
# UPTIME
|
||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
UPTIME=$(uptime -p)
|
UPTIME=$(uptime -p)
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# SEND DATA (IPv4 FORCED)
|
# TRIMITERE DATE CĂTRE API
|
||||||
|
# FORȚAT IPv4 (-4)
|
||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
curl -4 -s -X POST "$API_URL" \
|
curl -4 -s -X POST "$API_URL" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-d "{
|
-d "{
|
||||||
@@ -136,20 +189,25 @@ curl -4 -s -X POST "$API_URL" \
|
|||||||
}"
|
}"
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
# Permite execuția agentului
|
||||||
chmod +x "$AGENT"
|
chmod +x "$AGENT"
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# CRON (no duplicates)
|
# CRON JOB (FĂRĂ DUBLURI)
|
||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
(
|
(
|
||||||
|
# Păstrează ce există deja, elimină dublurile
|
||||||
crontab -l 2>/dev/null | grep -v "$AGENT" || true
|
crontab -l 2>/dev/null | grep -v "$AGENT" || true
|
||||||
|
# Rulează agentul la fiecare minut
|
||||||
echo "* * * * * $CRON_CMD"
|
echo "* * * * * $CRON_CMD"
|
||||||
) | crontab -
|
) | crontab -
|
||||||
|
|
||||||
# ============================
|
# ============================
|
||||||
# FINAL
|
# FINAL
|
||||||
# ============================
|
# ============================
|
||||||
|
|
||||||
echo "Server Monitor installed successfully (IPv4 only)"
|
echo "Server Monitor installed successfully (IPv4 only)"
|
||||||
echo "Reporting to: $API_URL"
|
echo "Reporting to: $API_URL"
|
||||||
echo "Interval: every 1 minute"
|
echo "Interval: every 1 minute"
|
||||||
echo " Test manual: $AGENT"
|
echo "Manual test: $AGENT"
|
||||||
|
|||||||
Reference in New Issue
Block a user