 Autor: [Piotr Wasilewski](/autorzy/piotr-wasilewski) Architekt rozwiązań chmurowych · Zweryfikowano Kwiecień 2026

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

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 1 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 · link partnerski

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

Mikrus

Tani VPS do testowania Graylog przed produkcją

Dev/Test

[Aktywuj rabat →](/out/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 · 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/)