Slik bruker du terminalen på webhotellet ditt til å analysere trafikk og diskbruk

Polar55 er et utviklervennlig webhotell, og derfor har du selvfølgelig også tilgang til terminalen, både via SSH og direkte i cPanel.

Det å bruke terminalen kan virke litt skremmende, og de færreste vet hvordan de skal komme i gang. Med KI har det imidlertid blitt langt enklere. Du kan kopiere kommandoene den gir deg, inn i terminalen og deretter gi den resultatet. Så kan den foreslå en ny kommando ut fra hva du ønsker å undersøke.

I denne veiledningen viser vi noen eksempler på hva du kan bruke terminalen til. Det er likevel viktig å understreke at det først blir virkelig effektivt når du får en KI til både å lage kommandoene og analysere resultatene.

Undersøk høy CPU-bruk og mulig bottrafikk

Bruker webhotellet ditt mye CPU, eller er nettsiden din treg? Det kan skyldes automatiserte boter eller mange gjentatte forespørsler til nettsiden din.

Med cPanel Terminal kan du undersøke trafikken til nettsidene dine. Du finner Terminal under Advanced → Terminal i cPanel. Kommandoene nedenfor leser bare data og endrer ingenting på webhotellet ditt.

Finn de mest aktive User-Agent-strengene

En User-Agent er identifikasjonsstrengen som en nettleser eller bot sender med forespørselen sin. Følgende kommando viser hvilke User-Agent-strenger som har gjort flest forespørsler med HTTP 200-svar de siste 60 minuttene:

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

Eksempel på resultat:

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

Tallet til venstre viser antall forespørsler. Hvis én User-Agent skiller seg tydelig ut, kan du undersøke hvilke IP-adresser trafikken kommer fra.

Merk: Mange forespørsler er ikke nødvendigvis mistenkelige. For eksempel kan WP Rocket generere mange forespørsler når hurtigbufferen bygges opp. User-Agent-strenger kan dessuten forfalskes. Kommandoen viser bare HTTP 200, og ikke for eksempel HTTP 403 eller 429.

Finn IP-adressene bak en bestemt User-Agent

Kopier User-Agent-strengen du vil undersøke, og lim den inn mellom anførselstegnene etter UA=. Her bruker vi Microsoft Edge som eksempel:

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

Eksempel på resultat:

865 192.0.2.10
591 198.51.100.20
  1 203.0.113.30

Her ser du at de fleste forespørslene kommer fra to IP-adresser.

Blokker en IP-adresse via cPanel

Hvis du har undersøkt trafikken og vurderer at en IP-adresse skaper problemer, kan du blokkere den via cPanel:

  1. Logg inn på cPanel.
  2. Åpne Security → IP Blocker.
  3. Skriv inn IP-adressen du ønsker å blokkere.
  4. Klikk på Add.
  5. Gjenta eventuelt for flere IP-adresser.

Du kan senere oppheve blokkeringen på samme sted. Vær oppmerksom på at en IP-adresse også kan tilhøre en legitim besøkende eller en delt internettforbindelse.

Finn ut hvilket domene som mottar mest trafikk

Har du flere nettsider på samme cPanel-konto, kan du undersøke hvilket domene som har mottatt flest forespørsler de siste 60 minuttene. Det kan hjelpe deg med å finne nettsiden du bør undersøke nærmere ved høy CPU-belastning.

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 = {}

# Hent riktig domenekobling fra cPanel
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

# Gå gjennom tilgangsloggene for de siste 60 minuttene
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)

        # Unngå å lese samme fil via flere harde lenker
        if identity in seen:
            continue
        seen.add(identity)

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

        # Vis riktig domenenavn fra cPanel
        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('FORESPØRSLER PER DOMENE – SISTE 60 MINUTTER')
print()

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

Eksempel på resultat:

FORESPØRSLER PER DOMENE – SISTE 60 MINUTTER

    4821  nettside-a.no
     936  nettside-b.no
     124  nettside-c.no

I eksemplet mottar nettside-a.no langt mer trafikk enn de øvrige nettsidene.

Mange forespørsler betyr likevel ikke nødvendigvis høy CPU-bruk. Én ressurskrevende WordPress-forespørsel kan belaste serveren mer enn mange forespørsler som håndteres fra hurtigbufferen. Tallene er derfor en pekepinn og ikke en direkte måling av CPU-bruk.

Undersøk diskbruk og finn de største filene

Er webhotellet ditt i ferd med å gå tomt for diskplass? Med Terminal kan du finne de største filene på kontoen din. Det er spesielt nyttig for å oppdage gamle sikkerhetskopier, store loggfiler og andre filer som kanskje ikke lenger er nødvendige.

Finn de 20 største filene

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

Eksempel på resultat:

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

Vær tålmodig: Kommandoen kan bruke flere minutter på å bli ferdig, særlig hvis kontoen din inneholder mange filer.

Kommandoen er nyttig for å finne muligheter til å frigjøre plass på webhotellet. Den sletter ingenting.

Viktig: Slett aldri filer hvis du ikke vet hva de brukes til. Se eventuelt gjennom dem i filbehandleren i cPanel før du sletter noe.

  • 0 brukere fikk hjelp av dette svaret
Var dette svaret nyttig?

Fant du ingen løsning?

Hvis du ikke har funnet en løsning ved å søke eller navigere i kategoriene våre, kan du opprette en ny supportsak.

Åpne supportsaker

Relaterte artikler

Jeg får ikke tilgang til mine egne sider, men andre kan

Hvis du oppdager at du ikke får logget inn på cPanel hos oss eller ser dine egne sider mens andre...

Hvordan hoster jeg min Lovable-nettside hos Polar55?

Vi har skrevet en guide til hvordan du kan eksportere Lovable-nettsiden din fra Lovable og laste...

Skript for å rydde opp i Node.js-prosesser som låser webhotellet ditt

Denne skriptet bør kjøres som en cron-jobb på din cPanel webhotellkonto.Dette er ikke den...

Hvordan fikse 503-feil på nettstedet ditt

En 503-feil oppstår når det ikke er nok ressurser til å kjøre et skript, noe som får serveren til...

Hvordan begrense størrelsen på dine error_log-filer

Hver gang en PHP-feil oppstår på nettstedet ditt – enten det bare er en advarsel eller en faktisk...