Skip to content
Script Python monitorizare site

Cum creați un script Python pentru monitorizarea site-urilor

Cum creați un script Python pentru monitorizarea site-urilor. Monitorizarea continuă a site-urilor WordPress vă permite să detectați rapid probleme de disponibilitate, performanță sau securitate înainte ca vizitatorii sau motoarele de căutare să fie afectați.

Serviciile comerciale de monitorizare pot fi costisitoare. Un script Python personalizat vă oferă control total și costuri zero pentru monitorizarea site-urilor dumneavoastră.

Cum creați un script Python pentru monitorizarea site-urilor

Un sistem complet de monitorizare verifică disponibilitatea (uptime), timpul de răspuns, validitatea certificatului SSL, integritatea conținutului și trimite alerte automate când detectează probleme.

Vom construi pas cu pas un sistem de monitorizare complet pe care îl puteți rula pe un server sau pe computerul personal.

Structura de bază a monitorului

Structura fundamentală a scriptului verifică periodic starea site-ului și înregistrează rezultatele pentru analiză ulterioară.

import requests
import time
import json
import smtplib
from email.mime.text import MIMEText
from datetime import datetime
import ssl
import socket

class SiteMonitor:
    def __init__(self, config_file='monitor_config.json'):
        """Inițializare monitor cu configurare din fișier JSON."""
        with open(config_file, 'r') as f:
            self.config = json.load(f)

        self.sites = self.config['sites']
        self.check_interval = self.config.get('check_interval', 300)
        self.log_file = self.config.get('log_file', 'monitor.log')
        self.alert_email = self.config.get('alert_email', '')
        self.results_history = []

    def log(self, message):
        """Înregistrare mesaj în fișierul de log."""
        timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        log_entry = f"[{timestamp}] {message}"
        print(log_entry)
        with open(self.log_file, 'a') as f:
            f.write(log_entry + 'n')

    def check_site(self, site):
        """Verificare completă a unui site."""
        url = site['url']
        result = {
            'url': url,
            'timestamp': datetime.now().isoformat(),
            'status_code': 0,
            'response_time': 0,
            'ssl_valid': False,
            'ssl_days_left': 0,
            'content_check': False,
            'errors': []
        }

        # Verificare disponibilitate și timp de răspuns
        try:
            start = time.time()
            response = requests.get(url, timeout=30, verify=True)
            result['response_time'] = round(time.time() - start, 3)
            result['status_code'] = response.status_code
            result['ssl_valid'] = True

            # Verificare conținut
            if 'content_check' in site:
                if site['content_check'] in response.text:
                    result['content_check'] = True
                else:
                    result['errors'].append('Conținut așteptat lipsă')

        except requests.exceptions.SSLError:
            result['errors'].append('Certificat SSL invalid')
        except requests.exceptions.Timeout:
            result['errors'].append('Timeout - site indisponibil')
        except requests.exceptions.ConnectionError:
            result['errors'].append('Eroare conexiune - site offline')
        except Exception as e:
            result['errors'].append(f'Eroare: {str(e)}')

        # Verificare SSL detaliat
        result['ssl_days_left'] = self.check_ssl_expiry(url)

        return result
  • Clasa SiteMonitor încapsulează toată logica de monitorizare
  • Configurarea din fișier JSON permite modificări fără a edita codul
  • Fiecare verificare înregistrează status code, timp de răspuns și erori
  • Verificarea conținutului detectează modificări neautorizate ale paginilor

Verificarea certificatelor SSL

Monitorizarea expirării certificatelor SSL previne pierderea HTTPS și avertismentele de securitate în browser-ele vizitatorilor.

    def check_ssl_expiry(self, url):
        """Verifică zilele rămase până la expirarea certificatului SSL."""
        try:
            hostname = url.replace('https://', '').replace('http://', '').split('/')[0].replace('www.', '')
            context = ssl.create_default_context()
            conn = context.wrap_socket(
                socket.socket(socket.AF_INET),
                server_hostname=hostname
            )
            conn.settimeout(10)
            conn.connect((hostname, 443))
            cert = conn.getpeercert()
            conn.close()

            expiry_date = datetime.strptime(
                cert['notAfter'], '%b %d %H:%M:%S %Y %Z'
            )
            days_left = (expiry_date - datetime.now()).days
            return days_left
        except Exception as e:
            self.log(f"Eroare verificare SSL {url}: {e}")
            return -1
  • Alertați cu 30 de zile înainte de expirarea certificatului SSL
  • Certificatele Let’s Encrypt expiră la fiecare 90 de zile
  • Verificarea zilnică vă oferă timp suficient pentru reînnoire
  • Zilele negative indică un certificat deja expirat

Sistem de alerte prin email

Alertele prin email vă notifică imediat când un site devine indisponibil sau prezintă probleme de securitate.

    def send_alert(self, subject, message):
"""Trimite alertă prin email."""
if not self.alert_email:
return

smtp_config = self.config.get('smtp', {})
msg = MIMEText(message)
msg['Subject'] = f"[Monitor] {subject}"
msg['From'] = smtp_config.get('from', 'monitor@wpsecurity.ro')
msg['To'] = self.alert_email

try:
server = smtplib.SMTP(
smtp_config.get('host', 'localhost'),
smtp_config.get('port', 587)
)
server.starttls()
server.login(
smtp_config.get('user', ''),
smtp_config.get('pass', '')
)
server.send_message(msg)
server.quit()
self.log(f"Alertă email trimisă: {subject}")
except Exception as e:
self.log(f"Eroare trimitere email: {e}")

def process_result(self, result):
"""Procesează rezultatul verificării și trimite alerte dacă e necesar."""
url = result['url']

if result['status_code'] != 200:
self.send_alert(
f"SITE OFFLINE: {url}",
f"Site-ul {url} a returnat codul {result['status_code']}n"
f"Erori: {

Despre autor

Dorel Tănase este specialist în optimizarea site-urilor pentru motoarele de căutare. Lucrează în online din 1997 și în SEO din 2007, iar activitatea se desfășoară prin GO SEO MARKETING S.R.L. din Alba Iulia. Se ocupă de audit tehnic, arhitectura site-urilor, conținut și construirea legăturilor.

Sus