Răspuns scurt
- Monitorizezi serverul de producție colectând metrici de CPU, memorie, disc, I/O și conexiuni cu Prometheus și node_exporter, vizualizate în Grafana.
- Centralizezi logurile de autentificare, ale serverului web, ale aplicației și ale auditd pe o altă mașină, cu Loki și Grafana Alloy, ca un atacator să nu le poată șterge.
- Alertezi pe simptome care afectează utilizatorii, cum sunt rata de erori și latența, nu pe fiecare fluctuație de CPU.
- Păstrezi logurile suficient pentru investigații și pentru termenele de notificare din NIS2 și GDPR.
- Metrici de sistem
- Prometheus + node_exporter, vizualizare în Grafana
- Loguri
- Grafana Alloy → Loki, pe o mașină separată
- Loguri obligatorii
- auth, nginx access și error, aplicație, auditd
- Principiul alertelor
- pe SLO și simptome, nu pe orice metrică
Ce măsori și ce citești
Metricile îți spun că ceva e în neregulă; logurile îți spun ce. Patru metrici sunt obligatorii pe orice server: spațiul pe disc, memoria disponibilă, încărcarea procesorului și conexiunile deschise; pentru o aplicație web adaugi rata de erori 5xx și latența la percentila 95. Din loguri, cele de autentificare arată brute force și logări neobișnuite, nginx arată scanări și exploatări, aplicația arată excepțiile, iar auditd înregistrează comenzi rulate ca root și modificări în fișiere sensibile. journalctl le citești local; sistemul central le păstrează.
De ce logurile pleacă de pe server și de ce alertezi puțin
Primul lucru pe care îl face un atacator după ce intră e să curețe logurile. Dacă singura copie e pe mașina compromisă, investigația s-a terminat înainte să înceapă. De aceea Grafana Alloy trimite logurile în timp real pe o mașină la care serverul de producție are doar canalul de ingestie. Alertele funcționează invers: cu cât sunt mai multe, cu atât sunt ignorate. Definești un obiectiv de nivel de serviciu, de exemplu 99,9 % din cereri fără eroare, și alertezi când îl consumi prea repede. Discul sub 10 % și un login din afara VPN-ului merită să trezească pe cineva.
- Retenție: metrici 30–90 de zile, loguri de securitate cel puțin 6 luni
- NTP pe toate mașinile, altfel corelarea evenimentelor e imposibilă
- O alertă fără runbook, adică fără „ce fac când sună”, se șterge
Ce spune legislația din România
OUG 155/2024, transpunerea NIS2 aprobată prin Legea 124/2025, cere entităților înregistrate la DNSC o alertă timpurie în 24 de ore de la constatarea unui incident semnificativ, notificare în 72 de ore și raport final la o lună de la aceasta. Fără loguri și metrici nu poți nici constata incidentul, nici scrie raportul. GDPR cere, prin art. 33, notificarea ANSPDCP în 72 de ore de la aflarea unei breșe și, prin art. 32, capacitatea de a detecta astfel de evenimente. Logurile conțin adrese IP, deci date personale: termen definit și acces limitat.
Ce monitorizezi pe un server de producție și când alertezi| Semnal | Sursa | Prag de alertă tipic | De ce contează |
|---|
| Spațiu pe disc | node_exporter | sub 10–15 % liber, 15 minute | Baza de date refuză scrieri, logurile se pierd |
|---|
| Erori HTTP 5xx | nginx, aplicație | peste 1 % din cereri, 5 minute | Simptom direct pentru utilizatori |
|---|
| Latență p95 | aplicație, nginx | peste SLO-ul definit | Degradare înaintea căderii |
|---|
| Autentificări SSH | auth.log / journal | login reușit din afara VPN | Brute force, cont compromis |
|---|
| Fișiere sensibile | auditd | orice modificare în /etc/ssh, /etc/sudoers.d | Persistența atacatorului |
|---|
| Certificat TLS | blackbox_exporter | expiră în sub 14 zile | Site inaccesibil la expirare |
|---|
Comenzi și configurări
Citești rapid ce s-a întâmplat în ultima orăjournalctl --since "-1h" -p warning
journalctl -u ssh --since today | grep -E "Accepted|Failed"
sudo ausearch -m EXECVE -ts recent
Grafana Alloy: trimite logurile pe mașina de loguri// /etc/alloy/config.alloy
loki.write "central" {
endpoint { url = "http://10.0.0.20:3100/loki/api/v1/push" }
}
local.file_match "sistem" {
path_targets = [
{__path__ = "/var/log/auth.log", job = "varlogs", host = "web-01"},
{__path__ = "/var/log/nginx/*.log", job = "varlogs", host = "web-01"},
]
}
loki.source.file "sistem" {
targets = local.file_match.sistem.targets
forward_to = [loki.write.central.receiver]
}
Prometheus: alertă pe disc, cu întârziere anti-zgomotgroups:
- name: server
rules:
- alert: DiscAproapePlin
expr: node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} < 0.10
for: 15m
labels:
severity: critical
annotations:
summary: "Sub 10 % spațiu liber pe / ({{ $labels.instance }})"
Exemple practice
SaaS din Iași cu un singur VPS
Discul s-a umplut cu loguri de nginx într-o noapte de scanare intensă, iar PostgreSQL a refuzat scrierile. Nimeni nu a aflat până la prima reclamație de dimineață. O alertă pe spațiul liber sub 15 % și logrotate configurat corect au eliminat clasa de incident.
Agenție web din Timișoara cu zece servere de client
Un server compromis avea logurile de autentificare șterse, deci nu se știa de când era atacatorul înăuntru. Copia din Loki, pe o mașină separată, arăta prima logare reușită cu trei săptămâni înainte, dintr-o cheie SSH adăugată de un fost colaborator.
Greșeli frecvente
- Păstrezi logurile doar pe serverul monitorizat, exact locul pe care atacatorul îl controlează.
- Alertezi pe CPU peste 80 % și, după o săptămână, toată echipa ignoră canalul de alerte.
- Monitorizezi serverul, dar nu și aplicația: serverul e „verde” în timp ce toate cererile dau 500.
- Sistemul de monitorizare rulează pe același server pe care îl monitorizează.
Cum te ajută 4hosting
- Serviciul CI/CD & Monitoring instalează Grafana, Prometheus și Loki, definește alertarea pe SLO și scrie runbook-urile, în orele incluse: 1–8 lunar la VPS, 10 la dedicate și GPU, cerute din panoul de client, secțiunea „Servicii DevOps”; orele se consumă în luna calendaristică și nu se reportează.
- Serviciul SIEM & Incident Response centralizează logurile de securitate, le corelează și alertează la tipare de atac; la incident produce raportul post-incident.
- Datacenterul din Frankfurt permite ținerea mașinii de loguri într-o locație separată de producție, în UE.
Întrebări conexe
Cât timp păstrez logurile?
Logurile de securitate, autentificări, sudo, auditd, cel puțin șase luni, ca să poți investiga un incident descoperit târziu. Logurile de acces web conțin adrese IP, deci date personale: le păstrezi cu un termen definit în politica GDPR, de obicei 30–90 de zile, apoi le agregi sau le ștergi.
Am nevoie de Prometheus și Grafana pentru un singur VPS?
Pentru un singur server, o verificare externă de disponibilitate plus alerte simple pe disc și memorie pot fi suficiente la început. Prometheus și Loki devin necesare când ai mai multe mașini sau când trebuie să dovedești ce s-a întâmplat.
Care e diferența dintre monitorizare și SIEM?
Monitorizarea urmărește sănătatea sistemului: resurse, erori, latență. Un SIEM colectează evenimente de securitate din mai multe surse și le corelează: 500 de autentificări eșuate urmate de una reușită, apoi o cheie nouă în authorized_keys. Pe un server mic, Loki cu câteva reguli acoperă ambele roluri.