Jak používat terminál na webhostingu k analýze návštěvnosti a využití diskového prostoru

Polar55 je webhosting přívětivý k vývojářům, a proto máte samozřejmě přístup i k terminálu, a to přes SSH i přímo přes cPanel.

Používání terminálu může působit trochu děsivě a málokdo ví, jak začít. S umělou inteligencí je to ale mnohem jednodušší. Stačí zkopírovat příkazy, které vám poskytne, do terminálu a poté jí předat výsledek. Následně vám může navrhnout další příkaz podle toho, co chcete prozkoumat.

V tomto návodu vám ukážeme několik příkladů využití terminálu. Je však důležité zdůraznit, že skutečně efektivní to bude tehdy, když necháte umělou inteligenci vytvářet příkazy i analyzovat jejich výsledky.

Prozkoumejte vysoké využití CPU a možný provoz botů

Využívá váš webhosting hodně CPU nebo je váš web pomalý? Příčinou mohou být automatizovaní boti nebo velké množství opakovaných požadavků na váš web.

Pomocí terminálu v cPanelu můžete prozkoumat provoz na svých webech. Terminál najdete v cPanelu v části Advanced → Terminal. Níže uvedené příkazy data pouze čtou a na vašem hostingovém účtu nic nemění.

Najděte nejaktivnější identifikátory User-Agent

User-Agent je identifikační řetězec, který prohlížeč nebo bot odesílá spolu s požadavkem. Následující příkaz ukáže, které identifikátory User-Agent provedly za posledních 60 minut nejvíce požadavků s odpovědí HTTP 200:

grep -hE "$(for i in $(seq 0 59); do LC_ALL=C date -d "$i minutes ago" '+%d/%b/%Y:%H:%M'; done | paste -sd'|' -)" \
~/access-logs/* 2>/dev/null \
| awk -F'"' '$3 ~ /^ 200 / {
    ua=$6;
    if (ua=="") ua="-";
    print ua
}' \
| sort | uniq -c | sort -nr | head -100

Příklad výsledku:

1662 Mozilla/5.0 ... Edg/156.0.0.0
 810 Mozilla/5.0 ... Chrome/156.0.0.0 Mobile
 479 WP Rocket/Preload
  96 Mozilla/5.0 ... bingbot/2.0

Číslo vlevo udává počet požadavků. Pokud některý identifikátor User-Agent výrazně vyčnívá, můžete prozkoumat, ze kterých IP adres provoz pochází.

Poznámka: Velké množství požadavků nemusí být nutně podezřelé. Například WP Rocket může při vytváření mezipaměti generovat mnoho požadavků. Identifikátory User-Agent lze navíc podvrhnout. Příkaz zobrazuje pouze odpovědi HTTP 200, nikoli například HTTP 403 nebo 429.

Najděte IP adresy konkrétního identifikátoru User-Agent

Zkopírujte identifikátor User-Agent, který chcete prozkoumat, a vložte jej mezi uvozovky za UA=. Zde používáme jako příklad Microsoft Edge:

UA='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36 Edg/156.0.0.0'

grep -hE "$(for i in $(seq 0 59); do LC_ALL=C date -d "$i minutes ago" '+%d/%b/%Y:%H:%M'; done | paste -sd'|' -)" \
~/access-logs/* 2>/dev/null \
| awk -F'"' -v ua="$UA" '
    $3 ~ /^ 200 / && $6 == ua {
        split($1,a," ")
        print a[1]
    }
' \
| sort | uniq -c | sort -nr | head -20

Příklad výsledku:

865 192.0.2.10
591 198.51.100.20
  1 203.0.113.30

Zde vidíte, že většina požadavků pochází ze dvou IP adres.

Zablokujte IP adresu přes cPanel

Pokud jste prozkoumali provoz a usoudili jste, že některá IP adresa způsobuje problémy, můžete ji zablokovat přes cPanel:

  1. Přihlaste se do cPanelu.
  2. Otevřete Security → IP Blocker.
  3. Zadejte IP adresu, kterou chcete zablokovat.
  4. Klikněte na Add.
  5. V případě potřeby postup opakujte pro další IP adresy.

Blokování můžete později zrušit na stejném místě. Pamatujte, že IP adresa může patřit také legitimnímu návštěvníkovi nebo sdílenému internetovému připojení.

Zjistěte, která doména má největší návštěvnost

Pokud máte na stejném účtu cPanel více webů, můžete zjistit, která doména obdržela za posledních 60 minut nejvíce požadavků. Při vysokém zatížení CPU vám to může pomoci určit web, který byste měli prozkoumat podrobněji.

python3 - <<'PY'
import glob
import json
import os
import re
import subprocess
from collections import Counter
from datetime import datetime, timedelta

now = datetime.now().astimezone()
start = now - timedelta(minutes=60)

counts = Counter()
domains = {}

# Získání správného mapování domén z cPanelu
try:
    result = subprocess.run(
        ['uapi', '--output=json', 'DomainInfo', 'domains_data'],
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        universal_newlines=True,
        timeout=15
    )

    if result.returncode == 0:
        response = json.loads(result.stdout)
        data = response.get('result', {}).get('data') or {}

        for category in ('addon_domains', 'sub_domains'):
            for item in data.get(category) or []:
                if not isinstance(item, dict):
                    continue

                internal = item.get('servername')
                public = item.get('domain')

                if internal and public:
                    domains[internal] = public

        main = data.get('main_domain') or {}
        if isinstance(main, dict):
            internal = main.get('servername')
            public = main.get('domain')

            if internal and public:
                domains[internal] = public

except (OSError, ValueError, subprocess.TimeoutExpired):
    pass

# Procházení přístupových protokolů za posledních 60 minut
seen = set()

for path in glob.glob(os.path.expanduser('~/access-logs/*')):
    try:
        if not os.path.isfile(path):
            continue

        stat = os.stat(path)
        identity = (stat.st_dev, stat.st_ino)

        # Zamezení opakovanému čtení souboru přes více pevných odkazů
        if identity in seen:
            continue
        seen.add(identity)

        name = os.path.basename(path)
        name = re.sub(r'-ssl_log$', '', name)

        # Zobrazení správného názvu domény z cPanelu
        domain = domains.get(name, name)

        with open(path, errors='replace') as logfile:
            for line in logfile:
                match = re.search(r'\[([^\]]+)\]', line)

                if not match:
                    continue

                try:
                    timestamp = datetime.strptime(
                        match.group(1),
                        '%d/%b/%Y:%H:%M:%S %z'
                    )
                except ValueError:
                    continue

                if start <= timestamp <= now:
                    counts[domain] += 1

    except OSError:
        continue

print('POŽADAVKY PODLE DOMÉNY – POSLEDNÍCH 60 MINUT')
print()

for domain, count in counts.most_common():
    print('{:8}  {}'.format(count, domain))
PY

Příklad výsledku:

POŽADAVKY PODLE DOMÉNY – POSLEDNÍCH 60 MINUT

    4821  web-a.cz
     936  web-b.cz
     124  web-c.cz

V tomto příkladu má web-a.cz výrazně větší návštěvnost než ostatní weby.

Velké množství požadavků však nemusí znamenat vysoké využití CPU. Jediný náročný požadavek ve WordPressu může server zatížit více než mnoho požadavků obsloužených z mezipaměti. Tato čísla jsou proto orientační a nejde o přímé měření využití CPU.

Prozkoumejte využití diskového prostoru a najděte největší soubory

Dochází vám na webhostingu místo na disku? Pomocí terminálu můžete najít největší soubory ve svém účtu. To je užitečné zejména při hledání starých záloh, velkých souborů protokolů a dalších souborů, které už možná nepotřebujete.

Najděte 20 největších souborů

find ~ -type f -printf '%s %p\n' 2>/dev/null \
| sort -nr | head -20 \
| awk '{printf "%.1f MB  %s\n", $1/1048576, $2}'

Příklad výsledku:

1850.4 MB  /home/user/backups/backup-old.zip
 724.2 MB  /home/user/public_html/wp-content/backup.zip
 312.8 MB  /home/user/public_html/error_log

Buďte trpěliví: Dokončení příkazu může trvat několik minut, zejména pokud váš účet obsahuje mnoho souborů.

Tento příkaz je užitečný pro hledání možností, jak uvolnit místo na webhostingu. Nic nemaže.

Důležité: Nikdy nemažte soubory, pokud nevíte, k čemu slouží. Před odstraněním si je případně prohlédněte ve správci souborů cPanelu.

  • 0 Uživatelům pomohlo
Byla tato odpověď nápomocná?

Nenašli jste řešení?

Pokud jste nenašli řešení pomocí vyhledávání nebo procházením kategorií, můžete vytvořit novou žádost o podporu.

Vytvořit novou žádost

Související články

Nemohu se dostat na své vlastní stránky, ale ostatní ano

Pokud zjistíte, že se nemůžete přihlásit do cPanelu u nás nebo vidět své vlastní stránky, zatímco...

Jak mohu hostovat svůj web Lovable u Polar55?

Napsali jsme průvodce, jak můžete exportovat svůj web Lovable z platformy Lovable a nahrát ho k...

Skript pro čištění procesů Node.js, které blokují váš webhosting

Tento skript by měl být spuštěn jako cron úloha na vašem cPanel webhostingovém účtu.Toto není...

Jak opravit chyby 503 na vašich webových stránkách

Chyba 503 nastane, když není dostatek prostředků pro spuštění skriptu, což způsobí vypršení...

Jak omezit velikost souborů error_log

Vždy, když na vašem webu dojde k chybě PHP – ať už jde jen o varování nebo skutečnou chybu – je...