Graylog 7.1 – inštalácia na Ubuntu Server 24.04 cez Docker Compose

Čo je Graylog a na čo slúži?
Graylog je platforma na centralizovaný zber, ukladanie, vyhľadávanie a analýzu logov z rôznych systémov a zariadení v IT infraštruktúre.
Namiesto toho, aby administrátor kontroloval logy samostatne na každom serveri, Graylog ich zhromažďuje na jednom mieste a umožňuje ich jednoducho prehľadávať a analyzovať.
Graylog je možné využiť napríklad na:
- centralizovaný zber logov zo serverov, aplikácií, firewallov, switchov a ďalších zariadení,
- monitorovanie Windows a Linux serverov,
- rýchle vyhľadávanie chýb a udalostí v logoch,
- troubleshooting problémov v infraštruktúre,
- sledovanie bezpečnostných udalostí a podozrivých aktivít,
- vytváranie dashboardov, grafov a prehľadov,
- vytváranie alertov a notifikácií pri definovaných udalostiach,
- uchovávanie historických logov na neskoršiu analýzu.
Logy môže prijímať rôznymi spôsobmi, napríklad cez Syslog, GELF, Beats alebo API.
V našom prípade Graylog beží v Docker kontajneroch na Ubuntu Serveri a pozostáva z Graylog servera, Data Node pre indexovanie a vyhľadávanie logov a MongoDB pre konfiguráciu a metadata.
Jednoducho povedané: Graylog vytvorí jedno centrálne miesto, kde vidíme, čo sa deje naprieč celou IT infraštruktúrou.
Minimálne požiadavky pre Graylog
Pre menšie prostredie, testovanie alebo domácu infraštruktúru, kde Graylog spracováva menšie množstvo logov:

Pri našom Docker nasadení treba počítať s tým, že na jednom serveri beží Graylog + Graylog Data Node + MongoDB, takže pamäť využívajú všetky tri služby.
Najdôležitejší je diskový priestor a výkon úložiska, pretože Data Node uchováva a indexuje prijaté logy. Čím viac zariadení posiela logy a čím dlhšiu retenciu nastavíme, tým väčšie úložisko potrebujeme.
Pre menšie firemné prostredie by som ako rozumný základ uviedol:
4–8 vCPU • 16 GB RAM • 100 GB+ SSD
Kapacitu disku potom dimenzovať podľa objemu prijatých logov a požadovanej doby ich uchovávania.
Na mojom serveri som Graylog postavili z troch kontajnerov:
- Graylog 7.1 – samotná aplikácia
- Graylog Data Node 7.1 – indexovanie a vyhľadávanie dát
- MongoDB 7.0 – konfigurácia a metadata Graylogu
Použili sme perzistentné Docker volumes, aby dáta zostali zachované aj po recreatnutí kontajnerov.
1. Vytvorenie adresára
mkdir -p ~/graylog
cd ~/graylog
2. Nastavenie vm.max_map_count
Data Node potrebuje zvýšenú hodnotu vm.max_map_count.
Dočasne:
sudo sysctl -w vm.max_map_count=1048576
A aby nastavenie zostalo aj po reštarte:
echo 'vm.max_map_count=1048576' | sudo tee /etc/sysctl.d/99-graylog.conf
sudo sysctl --system
Kontrola:
sysctl vm.max_map_count
Výsledok:
vm.max_map_count = 1048576
3. Vygenerovanie PASSWORD_SECRET
Graylog potrebuje náhodný password_secret.
Vygenerujeme ho napríklad:
openssl rand -hex 48
Výsledok si uložíme. Bude použitý ako:
Výsledok si uložíme. Bude použitý ako:
GRAYLOG_PASSWORD_SECRET
Po rozbehnutí Graylogu ho svojvoľne nemeň.
4. Vytvorenie admin hesla
Vyberieme si heslo pre Graylog administrátora.
Z hesla vytvoríme SHA-256:
echo -n 'TVOJE_ADMIN_HESLO' | sha256sum
Dostaneme:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -
Použijeme iba samotný hash bez -.
5. Vytvorenie .env
vim .env
Obsah:
GRAYLOG_PASSWORD_SECRET=SEM_VLOZ_VYGENEROVANY_SECRET
GRAYLOG_ROOT_PASSWORD_SHA2=SEM_VLOZ_SHA256_ADMIN_HESLA
Súbor ochránime:
chmod 600 .env
Admin používateľ bude:
admin
a heslo je pôvodné heslo, z ktorého sme vytvorili SHA-256.
6. Docker Compose
Vytvoríme:
vim docker-compose.yml
Základ stacku, ktorý sme použili, je:
services:
mongodb:
image: mongo:7.0
container_name: graylog-mongodb
restart: unless-stopped
volumes:
- graylog_mongodb_data:/data/db
datanode:
image: graylog/graylog-datanode:7.1
container_name: graylog-datanode
restart: unless-stopped
environment:
GRAYLOG_DATANODE_NODE_ID_FILE: /var/lib/graylog-datanode/node-id
GRAYLOG_DATANODE_PASSWORD_SECRET: ${GRAYLOG_PASSWORD_SECRET}
GRAYLOG_DATANODE_MONGODB_URI: mongodb://mongodb:27017/graylog
volumes:
- graylog_datanode_data:/var/lib/graylog-datanode
depends_on:
- mongodb
graylog:
image: graylog/graylog:7.1
container_name: graylog
restart: unless-stopped
environment:
GRAYLOG_NODE_ID_FILE: /usr/share/graylog/data/config/node-id
GRAYLOG_PASSWORD_SECRET: ${GRAYLOG_PASSWORD_SECRET}
GRAYLOG_ROOT_PASSWORD_SHA2: ${GRAYLOG_ROOT_PASSWORD_SHA2}
GRAYLOG_MONGODB_URI: mongodb://mongodb:27017/graylog
GRAYLOG_HTTP_BIND_ADDRESS: 0.0.0.0:9000
GRAYLOG_HTTP_EXTERNAL_URI: http://10.10.8.5:9000/
ports:
- "9000:9000"
# Syslog
- "5140:5140/tcp"
- "5140:5140/udp"
# GELF
- "12201:12201/tcp"
- "12201:12201/udp"
volumes:
- graylog_data:/usr/share/graylog/data
depends_on:
- mongodb
- datanode
volumes:
graylog_mongodb_data:
graylog_datanode_data:
graylog_data:
Pre iný server samozrejme zmeníme IP a prípadne port:
GRAYLOG_HTTP_EXTERNAL_URI: http://10.10.8.5:9000/
podľa jeho IP/DNS.
7. Spustenie Graylogu
docker-compose up -d
Kontrola:
docker ps --format "table {{.Names}}\t{{.Status}}"
Mali by sme vidieť:
graylog
graylog-datanode
graylog-mongodb
8. Sledovanie prvého štartu
Pri prvom štarte:
docker-compose logs graylog --tail=50
Graylog pri prvotnom nasadení zobrazí informácie potrebné na Preflight Setup.
Potom otvoríme:
http://10.10.8.5:9000
Pri prvom spustení sa ešte nezobrazuje normálne Graylog GUI, ale Preflight Configuration.
9. Preflight – Data Node
V Preflight GUI som vytvoril internú Graylog CA.
Ja som ju pomenoval:
IBASTERISK Graylog CA
Nastavil som automatickú obnovu certifikátov a následne som cez Preflight provisionovali certifikát pre Graylog Data Node.
Toto je interná komunikácia Graylog ↔ Data Node a nemá to nič spoločné s externým HTTPS certifikátom webového GUI.
Po úspešnom provisioningu Data Node sme dali:
Resume startup
Graylog potom dokončil normálny štart.
10. Kontrola
docker ps --format "table {{.Names}}\t{{.Status}}" | grep graylog
Po úspešnom štarte sme dostali stav približne:
graylog Up ... (healthy)
graylog-datanode Up ...
graylog-mongodb Up ...
A následne už bolo dostupné normálne Graylog GUI.
Prihlásenie:
Username: admin
Password: heslo, z ktorého sme vytvorili GRAYLOG_ROOT_PASSWORD_SHA2
Dôležitá poznámka k heslu
Toto ma pri inštalácii trochu potrápilo. 😄
Ak zabudneme admin heslo, vytvoríme hash nového:
echo -n 'NOVE_HESLO' | sha256sum
Nový hash vložíme do:
GRAYLOG_ROOT_PASSWORD_SHA2=
v .env.
Potom stačí recreatnúť iba Graylog:
docker-compose up -d --no-deps --force-recreate graylog
MongoDB ani Data Node kvôli zmene admin hesla nemusíme recreatovať.
Kontrola:
docker exec graylog printenv GRAYLOG_ROOT_PASSWORD_SHA2