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

⚡ W skrócie · 7 min czytania

-   Jak skonfigurować ELK Stack (Elasticsearch + Logstash + Kibana) z Filebeat do centralnego logowania logów Nginx, Apache i aplikacji na VPS.
-   Architektura ELK Stack.
-   Instalacja przez Docker Compose (rekomendowane).
-   Konfiguracja Logstash Pipeline.
-   Instalacja Filebeat na serwerze aplikacyjnym.

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 "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 "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/)
-   [Vector - wydajny pipeline do agregacji logów na VPS
    
    Vector log pipeline na VPS: sources/transforms/sinks TOML, file/syslog/Docker inputs, remap VRL do transformacji,…
    
    ](/baza-wiedzy/vector-log-pipeline/)
-   [Telegraf - zaawansowane pluginy i własne metryki monitorowania
    
    Zaawansowany Telegraf: inputs.procstat/net/docker/postgresql, Starlark processor do transformacji, exec plugin dla…
    
    ](/baza-wiedzy/telegraf-advanced-plugins/)
-   [Jaki VPS wybrać?](/jaki-vps-wybrac/)

Autor: [Redakcja HostGrade.pl](/autorzy/) Zespół redakcyjny · Aktualizacja: 9 kwietnia 2026

Artykuły HostGrade.pl przygotowuje i aktualizuje redakcja serwisu. Ceny startowe, ceny odnowienia i warunki planów sprawdzamy w cennikach i regulaminach dostawców, a potem liczymy całkowity koszt za 2 lata (cena startowa plus odnowienia). Zasady zbierania danych i liczenia kosztów opisujemy na stronie Metodologia. Linki partnerskie oznaczamy jako #reklama.

[O redakcji i metodologii →](/autorzy/)