Zo gebruik je de terminal van je webhostingaccount om verkeer en schijfgebruik te analyseren

Polar55 biedt ontwikkelaarsvriendelijke webhosting, dus je hebt natuurlijk ook toegang tot de terminal, zowel via SSH als rechtstreeks via cPanel.

De terminal gebruiken kan best intimiderend zijn, en weinig mensen weten hoe ze moeten beginnen. Met AI is het echter een stuk eenvoudiger geworden. Je kunt de opdrachten die AI je geeft naar de terminal kopiëren en vervolgens de uitvoer teruggeven aan de AI. Die kan dan een volgende opdracht voorstellen, afhankelijk van wat je wilt onderzoeken.

In deze handleiding laten we een paar voorbeelden zien van wat je met de terminal kunt doen. Het is wel belangrijk om te benadrukken dat het pas echt efficiënt wordt als je AI zowel je opdrachten laat maken als de uitvoer laat analyseren.

Onderzoek hoog CPU-gebruik en mogelijk botverkeer

Gebruikt je webhostingaccount veel CPU, of is je website traag? Dit kan komen door geautomatiseerde bots of veel herhaalde verzoeken aan je website.

Met cPanel Terminal kun je het verkeer naar je websites onderzoeken. Je vindt Terminal onder Advanced → Terminal in cPanel. De onderstaande opdrachten lezen alleen gegevens en wijzigen niets aan je webhostingaccount.

Vind de actiefste User-Agents

Een User-Agent is de identificatietekst die een browser of bot met een verzoek meestuurt. De volgende opdracht laat zien welke User-Agents in de afgelopen 60 minuten de meeste verzoeken met een HTTP 200-antwoord hebben gedaan:

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

Voorbeeld van de uitvoer:

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

Het getal links geeft het aantal verzoeken aan. Als één User-Agent duidelijk opvalt, kun je onderzoeken van welke IP-adressen het verkeer afkomstig is.

Let op: Veel verzoeken zijn niet per se verdacht. WP Rocket kan bijvoorbeeld veel verzoeken genereren tijdens het opbouwen van de cache. User-Agents kunnen bovendien worden vervalst. De opdracht toont alleen HTTP 200 en dus bijvoorbeeld geen HTTP 403 of 429.

Vind de IP-adressen achter een bepaalde User-Agent

Kopieer de User-Agent die je wilt onderzoeken en plak deze tussen de aanhalingstekens na UA=. Hier gebruiken we Microsoft Edge als voorbeeld:

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

Voorbeeld van de uitvoer:

865 192.0.2.10
591 198.51.100.20
  1 203.0.113.30

Hier zie je dat het grootste deel van de verzoeken afkomstig is van twee IP-adressen.

Blokkeer een IP-adres via cPanel

Als je het verkeer hebt onderzocht en vaststelt dat een IP-adres problemen veroorzaakt, kun je het via cPanel blokkeren:

  1. Log in op cPanel.
  2. Open Security → IP Blocker.
  3. Voer het IP-adres in dat je wilt blokkeren.
  4. Klik op Add.
  5. Herhaal dit indien nodig voor andere IP-adressen.

Je kunt de blokkering later op dezelfde plek opheffen. Houd er rekening mee dat een IP-adres ook van een legitieme bezoeker of een gedeelde internetverbinding kan zijn.

Ontdek welk domein het meeste verkeer ontvangt

Als je meerdere websites op hetzelfde cPanel-account hebt, kun je onderzoeken welk domein in de afgelopen 60 minuten de meeste verzoeken heeft ontvangen. Dit kan je helpen bepalen welke website je bij een hoge CPU-belasting nader moet onderzoeken.

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

# Haal de juiste domeinkoppelingen op uit 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

# Doorloop de toegangslogboeken voor de afgelopen 60 minuten
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)

        # Voorkom dat hetzelfde bestand via meerdere harde koppelingen wordt gelezen
        if identity in seen:
            continue
        seen.add(identity)

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

        # Toon de juiste domeinnaam uit 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('VERZOEKEN PER DOMEIN – AFGELOPEN 60 MINUTEN')
print()

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

Voorbeeld van de uitvoer:

VERZOEKEN PER DOMEIN – AFGELOPEN 60 MINUTEN

    4821  website-a.nl
     936  website-b.nl
     124  website-c.nl

In dit voorbeeld ontvangt website-a.nl veel meer verkeer dan de andere websites.

Veel verzoeken betekenen echter niet noodzakelijk een hoog CPU-gebruik. Eén zwaar WordPress-verzoek kan de server meer belasten dan veel verzoeken die vanuit de cache worden afgehandeld. De cijfers geven daarom een indicatie en zijn geen directe meting van het CPU-gebruik.

Controleer het schijfgebruik en vind de grootste bestanden

Raakt de schijfruimte van je webhostingaccount op? Met Terminal kun je de grootste bestanden op je account vinden. Dat is vooral handig om oude back-ups, grote logbestanden en andere bestanden op te sporen die misschien niet meer nodig zijn.

Vind de 20 grootste bestanden

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

Voorbeeld van de uitvoer:

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

Heb geduld: Het kan enkele minuten duren voordat de opdracht is voltooid, vooral als je account veel bestanden bevat.

Deze opdracht helpt je mogelijkheden te vinden om ruimte vrij te maken op je webhostingaccount. Er wordt niets verwijderd.

Belangrijk: Verwijder nooit bestanden als je niet weet waarvoor ze worden gebruikt. Bekijk ze eventueel eerst in Bestandsbeheer van cPanel voordat je iets verwijdert.

  • 0 gebruikers vonden dit artikel nuttig
Was dit antwoord nuttig?

Geen oplossing gevonden?

Als je geen oplossing hebt gevonden door te zoeken of onze categorieën te doorbladeren, kun je een nieuw supportticket openen.

Open nieuw ticket

Gerelateerde artikelen

Ik kan mijn eigen pagina's niet openen, maar anderen kunnen dat wel

Als je merkt dat je niet kunt inloggen op cPanel bij ons of je eigen pagina's niet kunt zien...

Hoe host ik mijn Lovable-website bij Polar55?

We hebben een handleiding geschreven over hoe je jouw Lovable-website kunt exporteren vanuit...

Script om Node.js-processen op te ruimen die jouw webhosting blokkeren

Dit script moet draaien als een cron-job op je cPanel-webhostingaccount.Dit is niet de perfecte...

Hoe 503-fouten op je website te verhelpen

Een 503-fout treedt op wanneer er niet genoeg middelen beschikbaar zijn om een script uit te...

Zo beperk je de grootte van je error_log-bestanden

Elke keer dat er een PHP-fout optreedt op je site – of het nu slechts een waarschuwing is of een...