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
naspäť