1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  Graylog - centralizacja logów

# Graylog - centralizacja logów z MongoDB i Elasticsearch

Opublikowano: 9 kwietnia 2026 · Kategoria: VPS / Monitoring

⚡ W skrócie · 9 min czytania

-   Instalacja Graylog stack: MongoDB + Elasticsearch/OpenSearch + Graylog server. Konfiguracja inputs (Syslog, GELF, Beats), streams, alerts, dashboards i index retention.
-   Architektura stack.
-   Instalacja przez Docker Compose.
-   Inputs - jak wprowadzać logi do Graylog.
-   Konfiguracja rsyslog na kliencie.

Gdy masz jeden serwer, logi w `/var/log/` wystarczą. Gdy masz pięć, zaczynasz się gubić, a przy dwudziestu szukanie przyczyny awarii w ssh po maszynach jest męczące. Rozwiązaniem jest centralizacja - wszystkie logi w jednym miejscu, z wyszukiwarką, dashboardami i alertami. Graylog to open source platforma do logów, która daje wszystko to out of the box, opierając się na trzech komponentach: MongoDB (metadane, konfiguracja), Elasticsearch/OpenSearch (przechowywanie i wyszukiwanie logów), Graylog server (web UI, inputs, streams, alerting).

## Architektura stack

Komponent

Rola

RAM (prod)

MongoDB 6+

Konfiguracja Graylog, użytkownicy, streams, dashboards

1 GB

OpenSearch 2+

Silnik wyszukiwania i przechowywania logów (fork Elasticsearch)

4 GB heap

Graylog Server

Web UI, REST API, inputs, processing pipeline

2 GB heap

Nginx reverse proxy

SSL termination, autentykacja

50 MB

## Instalacja przez Docker Compose

Najszybsza droga to Docker Compose - nie musisz walczyć z zależnościami Java i inicjalizacją OpenSearch. Utwórz plik `docker-compose.yml`:

```
version: "3.8"
services:
  mongodb:
    image: mongo:6.0
    volumes:
      - mongodb_data:/data/db
    restart: unless-stopped

  opensearch:
    image: opensearchproject/opensearch:2
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - DISABLE_INSTALL_DEMO_CONFIG=true
      - DISABLE_SECURITY_PLUGIN=true
      - "OPENSEARCH_JAVA_OPTS=-Xms4g -Xmx4g"
    ulimits:
      memlock: { soft: -1, hard: -1 }
    volumes:
      - opensearch_data:/usr/share/opensearch/data
    restart: unless-stopped

  graylog:
    image: graylog/graylog:6.0
    environment:
      - GRAYLOG_PASSWORD_SECRET=zmien-to-na-mocny-sekret-16-znakow-minimum
      - GRAYLOG_ROOT_PASSWORD_SHA2=sha256-hasla-admin
      - GRAYLOG_HTTP_EXTERNAL_URI=https://logs.example.com/
      - GRAYLOG_ELASTICSEARCH_HOSTS=http://opensearch:9200
      - GRAYLOG_MONGODB_URI=mongodb://mongodb:27017/graylog
    depends_on: [mongodb, opensearch]
    ports:
      - "127.0.0.1:9000:9000"  # Web UI
      - "1514:1514/udp"         # Syslog UDP
      - "1514:1514"             # Syslog TCP
      - "12201:12201/udp"       # GELF UDP
      - "12201:12201"           # GELF TCP
    restart: unless-stopped

volumes:
  mongodb_data:
  opensearch_data:
```

```
# Wygeneruj haslo admin
echo -n "twoje-haslo-admin" | sha256sum

# Wpisz wynik jako GRAYLOG_ROOT_PASSWORD_SHA2
# Uruchom stack
docker compose up -d

# Sprawdz logi
docker compose logs -f graylog

# Po 1-2 minutach web UI jest dostepny na http://127.0.0.1:9000
# Login: admin, haslo: twoje-haslo-admin
```

## Inputs - jak wprowadzać logi do Graylog

W Graylog web UI przejdź do `System -> Inputs`. Wybierz typ inputa i kliknij Launch new input. Najważniejsze typy:

-   **Syslog UDP/TCP (port 1514)** - dla systemowych logów z rsyslog na serwerach Linux
-   **GELF UDP/TCP (port 12201)** - natywny format Graylog, strukturalne pola, dla własnych aplikacji
-   **GELF HTTP (port 12202)** - REST endpoint do wysyłania GELF przez HTTP POST
-   **Beats (port 5044)** - dla Filebeat/Metricbeat z Elastic stack
-   **Raw/Plaintext TCP** - dla niestandardowych formatów, parser w processing pipeline

## Konfiguracja rsyslog na kliencie

```
# /etc/rsyslog.d/90-graylog.conf
# Wysylaj wszystkie logi na Graylog (UDP, port 1514)
*.* @logs.example.com:1514

# Dla TCP (gwarantuje dostarczenie):
# *.* @@logs.example.com:1514

# Reload rsyslog
sudo systemctl restart rsyslog

# Weryfikacja - test log
logger -t test "Hello Graylog"
```

## GELF z aplikacji Python (graypy)

```
pip install graypy

# app.py
import logging
import graypy

handler = graypy.GELFUDPHandler('logs.example.com', 12201)
logger = logging.getLogger('myapp')
logger.setLevel(logging.INFO)
logger.addHandler(handler)

logger.info('User logged in', extra={'user_id': 42, 'ip': '203.0.113.10'})
logger.error('Payment failed', extra={'order_id': 999, 'amount': 150.00})
# W Graylog zobaczysz strukturalne pola user_id, ip, order_id jako osobne kolumny
```

## Streams - routing logów

Stream to filtr który przekierowuje wpasowane wiadomości do osobnego "kanału". Dzięki temu możesz: wydzielić logi z produkcji od developmentu, filtrować po aplikacji, budować dashboardy per zespół, ustawiać różne alerty per stream. Przykład reguły streamu "nginx errors":

-   `source` match exactly `www01.example.com`
-   `level` less than or equal `4` (error i wyższe)
-   `facility` equals `local0` (nginx wysyła na local0)

## Alerts - powiadomienia

Graylog obsługuje alerty na streams: `Event Definitions` pozwalają zdefiniować warunek (np. "więcej niż 10 wiadomości z level=error w ciągu 5 minut w streamie nginx-errors"), a `Notification` wysyła powiadomienie przez email, Slack, webhook, PagerDuty. Przykłady reguł:

-   Alert gdy pojawi się `OutOfMemoryError` w logach Java - natychmiastowy webhook na Slack
-   Alert gdy count 502/503 z nginx przekroczy 50 w ciągu minuty - email + PagerDuty
-   Alert gdy failed SSH login przekroczy 20 z jednego IP w 10 minut - webhook do fail2ban/firewall

## Dashboards i wyszukiwanie

Dashboardy w Graylog to panele z widgetami: wykres słupkowy wiadomości w czasie, top N source/user/URL, histogram kodów HTTP, licznik błędów. Wyszukiwanie używa Lucene Query Syntax:

```
# Wszystkie errory z ostatniej godziny
level:3 AND timestamp:[now-1h TO now]

# Errory HTTP 5xx z nginx
source:www01 AND response_code:[500 TO 599]

# Logi z uzytkownika admin w kilku streamach
user_id:admin AND (stream:nginx OR stream:app)

# Wyklucz health checki
NOT request:/healthz AND level:<=4

# Regex
message:/.*timeout after \d+ ms.*/
```

## Retention i index rotation

Graylog dzieli logi na indexes (porcja danych w OpenSearch). W `System -> Indices` konfigurujesz rotation strategy: Size-based (np. 1 GB na index), Time-based (np. 1 index dziennie), Message Count. Retention strategy: Delete (usuwaj najstarsze), Close (tylko zamykaj aby oszczędzić RAM, można otworzyć). Dla 30 dni retencji i 1 index per dzień ustaw: Time-based + Delete + max 30 indexes.

## Nginx reverse proxy z SSL

```
server {
    listen 443 ssl http2;
    server_name logs.example.com;
    ssl_certificate /etc/letsencrypt/live/logs.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/logs.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:9000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Graylog-Server-URL https://$host/;
    }
}
```

## Najczęstsze pytania

Graylog vs ELK stack - co wybrać do centralizacji logów? +

ELK (Elasticsearch + Logstash + Kibana) jest bardziej elastyczny ale trudniejszy w utrzymaniu - Logstash pipeline wymaga dużo pamięci, Kibana jest mocno rozbudowana. Graylog ma wbudowany web UI, input management, alerting i streams bez dodatkowych komponentów - to gotowe rozwiązanie do logów. Graylog używa Elasticsearch/OpenSearch jako backendu więc dostajesz tę samą wyszukiwarkę, ale z przyjazniejszym interfejsem. Dla małych i średnich firm Graylog jest prostszy i tańszy w utrzymaniu.

Ile RAM potrzebuje Graylog stack? +

Minimum to 4 GB RAM (2 GB dla Elasticsearch, 1 GB Graylog server, 500 MB MongoDB) dla laboratorium lub bardzo małego workloadu. Produkcyjny setup dla kilku serwerów wysyłających logi to 8 GB RAM (4 GB ES heap, 2 GB Graylog heap, 1 GB MongoDB, 1 GB system). Duże instancje obsługujące tysiące requestów per sekundę potrzebują 16-32 GB RAM i oddzielnych węzłów. Elasticsearch/OpenSearch to zawsze największy konsument pamięci - heap ustaw na połowę RAM maszyny, nie więcej niż 32 GB.

GELF, Syslog czy Beats - który input wybrać? +

Syslog to standard Linux - każdy serwer ma rsyslog/syslog-ng wbudowany, konfiguracja to jedna linia (przekierowanie na port UDP/TCP 514). Dobry dla systemowych logów (auth, cron, mail). GELF jest natywnym formatem Graylog - ma pola strukturalne, kompresję, duże message size, obsługuje GELF HTTP i GELF UDP. Używaj GELF dla własnych aplikacji przez biblioteki (log4j2 GelfAppender, Python graypy, Node winston-gelf). Filebeat/Elastic Beats jest popularny w ELK ale wymaga dodatkowej konfiguracji w Graylog. Dla typowej firmy: Syslog dla systemów + GELF dla aplikacji.

Jak długo trzymać logi w Graylog i ile to zajmie? +

RODO nie wymaga konkretnej retencji logów, ale często stosuje się 30-90 dni dla operacyjnych logów i jeden rok dla logów bezpieczeństwa (SIEM). Rozmiar zależy od ruchu - typowy mały serwer www generuje 100-500 MB logów nginx dziennie, aplikacja Django może być 10x więcej. Plan pojemnościowy: oblicz GB/dzień i pomnóż przez dni retencji. Graylog obsługuje rotation przez Index Sets - możesz ustawić max size per index + max count indexes, stare automatycznie są usuwane.

## 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 8-16 GB RAM i dużym dyskiem - idealny Graylog collector dla kilku serwerów

VPS Logs

[Aktywuj rabat →](/out/contabo/#reklama "Contabo")

#Reklama · link partnerski

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

Mikrus

Tani VPS do testowania Graylog przed produkcją

Dev/Test

[Aktywuj rabat →](/out/mikrus/#reklama "Mikrus")

#Reklama · link partnerski

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

LH.pl

Hosting z panelem - alternatywa bez setupu własnego stack logów

Managed

[Aktywuj rabat →](/out/lh-pl/#reklama "LH.pl")

#Reklama · link partnerski

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

## Powiązane strony

-   [ELK stack - logi serwera](/baza-wiedzy/elk-stack-logi-serwera/)
-   [logrotate - konfiguracja rotacji](/baza-wiedzy/logrotate-konfiguracja-linux/)
-   [Logi Apache i Nginx](/baza-wiedzy/logi-serwera-apache-nginx/)
-   [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/)
-   [MongoDB na VPS - instalacja, konfiguracja i replica set
    
    MongoDB 7 na VPS: instalacja apt, mongod.conf (auth/TLS), użytkownicy, replica set 3 węzły, mongodump/restore backup,…
    
    ](/baza-wiedzy/mongodb-vps-instalacja/)
-   [Fluent Bit - lekki agent do forwarding logów na VPS
    
    Fluent Bit - instalacja, konfiguracja inputs/filters/outputs, wysyłka do Elasticsearch/Grafana Loki/S3, parsowanie…
    
    ](/baza-wiedzy/fluent-bit-log-forwarding/)
-   [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/)