 Autor: [Monika Wojciechowska](/autorzy/monika-wojciechowska) Specjalistka SEO i treści webowych · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  ELK Stack — centralne logowanie serwera

# ELK Stack — centralne logowanie dla serwera i aplikacji

Opublikowano: 9 kwietnia 2026 · Kategoria: VPS / Monitoring

SSH na serwer, grep przez gigabajt logów, korelowanie zdarzeń z pięciu plików... to strata czasu. ELK Stack (Elasticsearch + Logstash + Kibana) centralizuje logi ze wszystkich serwerów w jednym miejscu — przeszukujesz je w milisekundy, wizualizujesz trendy i dostajesz alerty gdy pojawi się burst błędów. Oto jak go postawić na VPS.

## Architektura ELK Stack

Komponent

Rola

Port

RAM

Filebeat

Agent na serwerach aplikacyjnych — czyta logi i wysyła do Logstash

—

~50 MB

Logstash

Pipeline: parsuje, filtruje, transformuje logi

5044

~500 MB

Elasticsearch

Baza danych — indeksuje i przechowuje logi

9200

2–8 GB

Kibana

UI — dashboardy, Discover, Alerting

5601

~500 MB

## Instalacja przez Docker Compose (rekomendowane)

Najszybszy sposób na uruchomienie ELK to Docker Compose. Oficjalny stack od Elastic:

\# docker-compose.yml dla ELK Stack
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
    restart: unless-stopped
    environment:
      - discovery.type=single-node     # Single-node — bez klastra
      - ES\_JAVA\_OPTS=-Xms1g -Xmx1g    # 1 GB heap (dla 2 GB RAM VPS)
      - xpack.security.enabled=false   # Wyłącz security dla dev/small setups
    volumes:
      - es\_data:/usr/share/elasticsearch/data
    ports:
      - "127.0.0.1:9200:9200"         # Tylko localhost!
    networks:
      - elk
    ulimits:
      memlock:
        soft: -1
        hard: -1

  kibana:
    image: docker.elastic.co/kibana/kibana:8.12.0
    restart: unless-stopped
    environment:
      - ELASTICSEARCH\_HOSTS=http://elasticsearch:9200
    ports:
      - "127.0.0.1:5601:5601"         # Dostęp przez SSH tunnel lub Nginx
    networks:
      - elk
    depends\_on:
      - elasticsearch

  logstash:
    image: docker.elastic.co/logstash/logstash:8.12.0
    restart: unless-stopped
    volumes:
      - ./logstash/pipeline:/usr/share/logstash/pipeline:ro
    ports:
      - "127.0.0.1:5044:5044"         # Beats input
    networks:
      - elk
    depends\_on:
      - elasticsearch

volumes:
  es\_data:

networks:
  elk:
    driver: bridge

\# Ustaw vm.max\_map\_count (Elasticsearch wymaga)
sudo sysctl -w vm.max\_map\_count=262144
echo "vm.max\_map\_count=262144" | sudo tee -a /etc/sysctl.conf

# Uruchom stack
docker compose up -d

## Konfiguracja Logstash Pipeline

Plik pipeline definiuje jak przetwarzać przychodzące logi:

\# logstash/pipeline/nginx.conf

input {
  beats {
    port => 5044
  }
}

filter {
  if \[fields\]\[log\_type\] == "nginx\_access" {
    grok {
      match => {
        "message" => '%{COMBINEDAPACHELOG}'
      }
    }
    date {
      match => \["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"\]
      target => "@timestamp"
    }
    geoip {
      source => "clientip"     # Geolokalizacja IP
    }
    mutate {
      convert => {
        "bytes" => "integer"
        "response" => "integer"
      }
    }
  }
}

output {
  elasticsearch {
    hosts => \["http://elasticsearch:9200"\]
    index => "nginx-logs-%{+YYYY.MM.dd}"   # Indeks per dzień
  }
}

## Instalacja Filebeat na serwerze aplikacyjnym

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.12.0-amd64.deb
sudo dpkg -i filebeat-8.12.0-amd64.deb

\# /etc/filebeat/filebeat.yml
filebeat.inputs:
  - type: filestream
    id: nginx-access
    paths:
      - /var/log/nginx/access.log
    fields:
      log\_type: nginx\_access

  - type: filestream
    id: nginx-error
    paths:
      - /var/log/nginx/error.log
    fields:
      log\_type: nginx\_error

  - type: filestream
    id: app-logs
    paths:
      - /var/log/myapp/\*.log
    fields:
      log\_type: application

output.logstash:
  hosts: \["elk-server-ip:5044"\]

# Lub bezpośrednio do Elasticsearch (bez Logstash):
# output.elasticsearch:
#   hosts: \["elk-server-ip:9200"\]
#   index: "filebeat-%{+yyyy.MM.dd}"

sudo systemctl enable --now filebeat

# Sprawdź czy dane płyną
sudo filebeat test output
sudo journalctl -u filebeat -f

## Kibana — dashboardy i wyszukiwanie

Dostęp do Kibany przez SSH tunnel: `ssh -L 5601:localhost:5601 user@serwer`, następnie otwórz `http://localhost:5601`.

-   **Discover** — surowe logi z filtrowaniem (KQL: `response:500`, `clientip:1.2.3.4`)
-   **Dashboard** — wizualizacje: top 10 IP, mapa geograficzna, błędy w czasie, status codes pie chart
-   **Alerts** — powiadomienia gdy liczba błędów 5xx przekroczy próg (email, Slack, PagerDuty)
-   **Index Management** — ILM policies: po 7 dniach hot → warm, po 30 dniach → delete

## Alternatywy dla pełnego ELK

ELK jest potężny, ale zasobożerny. Lżejsze opcje dla małych VPS:

-   **Grafana Loki + Promtail** — specjalizuje się w logach, ~10x mniej RAM niż Elasticsearch, integruje się z Grafaną
-   **OpenSearch** — fork Elasticsearch od AWS, open source bez ograniczeń licencyjnych
-   **Graylog** — gotowe UI dla logów, prostszy w konfiguracji niż ELK
-   **Vector (vectordev)** — wydajny pipeline logów w Rust, zamiennik dla Logstash/Filebeat

## Najczęstsze pytania

Czym jest ELK Stack i do czego służy? +

ELK to akronim od Elasticsearch (baza danych do wyszukiwania), Logstash (pipeline przetwarzania danych) i Kibana (dashboard UI). Stack służy do centralnego zbierania, indeksowania i analizowania logów z wielu serwerów i aplikacji. Zamiast logować się SSH na każdy serwer i przeglądać pliki, masz jedno miejsce gdzie przeszukujesz gigabajty logów w milisekundy. Od wersji 7.x Elastic oficjalnie zmienił nazwę na "Elastic Stack".

Czym różni się Logstash od Filebeat? +

Filebeat to lekki agent (shipper) — czyta pliki logów i wysyła je do Elasticsearch lub Logstash. Zużywa minimalne zasoby (kilkadziesiąt MB RAM). Logstash to potężny pipeline z pluginami input/filter/output — może parsować złożone formaty, wzbogacać dane (GeoIP lookup, DNS), filtrować i routować do wielu destynacji. Typowa architektura: Filebeat na każdym serwerze → Logstash (parsowanie) → Elasticsearch. Dla prostych logów można pominąć Logstash: Filebeat → Elasticsearch bezpośrednio.

Ile RAM potrzebuje Elasticsearch? +

Elasticsearch jest zasobożerny — minimum 2 GB RAM dla pojedynczego noda, rekomendowane 4-8 GB dla produkcji. JVM heap powinien wynosić max 50% RAM (np. przy 4 GB RAM: -Xms2g -Xmx2g). Kibana potrzebuje kolejne ~500 MB. Logstash: ~500 MB–1 GB. Stack łącznie: minimum 4-5 GB RAM. Z tego powodu ELK często stawia się na osobnym VPS, a nie na serwerze aplikacyjnym. Lżejszą alternatywą jest Grafana Loki (specjalizuje się w logach, zużywa ~10x mniej RAM niż ES).

Jak długo przechowywać logi w Elasticsearch? +

Zależy od regulacji (GDPR, PCI-DSS) i potrzeb biznesowych. Praktyczne zasady: logi dostępu Nginx/Apache — 30-90 dni (analiza ruchu, debugging). Logi błędów aplikacji — 30-180 dni. Logi bezpieczeństwa (loginy, zmiany uprawnień) — 12 miesięcy (wymóg PCI-DSS). Elasticsearch ILM (Index Lifecycle Management) automatycznie przenosi stare indeksy do tańszego storage (warm → cold → delete). Archiwum długoterminowe (ponad rok) lepiej trzymać w S3/GCS w skompresowanych plikach.

## Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.

Contabo

VPS z 4-8 GB RAM — minimum dla Elasticsearch w produkcji

ELK VPS

[Aktywuj rabat →](/out/contabo)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo)

Mikrus

Tani VPS do nauki ELK Stack — uruchom Elasticsearch w trybie single-node

Nauka ELK

[Aktywuj rabat →](/out/mikrus)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus)

## Powiązane strony

-   [Grafana + Prometheus — monitoring serwera VPS](/baza-wiedzy/monitoring-grafana-prometheus)
-   [Logrotate — rotacja logów na Linux](/baza-wiedzy/logrotate-konfiguracja-linux)
-   [Docker Compose w produkcji — best practices](/baza-wiedzy/docker-compose-produkcja)
-   [Nginx — konfiguracja virtual hostów](/baza-wiedzy/nginx-vhost-konfiguracja)
-   [Wszystkie artykuły](/baza-wiedzy/)