Migrace Graylogu na nový server

Nastala situace, na kterou jsem se vůbec netěšil - potřeboval jsem přemigrovat Graylog na jiný server (tedy kompletní stack Graylog/Elasticsearch/MongoDB). Po dvou hodinách studování a zkoušení se nakonec ukázalo, že to není až tak neřešitelný problém. Zde je tedy návod jak zmigrovat Graylog na jiný server (a zachovat konfiguraci i data).

Tato migrace funguje celkem jednoduše, protože používám single-node elasticsearch. Všechny zprávy do Graylogu sbírám pomocí RabbitMQ, takže při vypnutí se žádná nově příchozí data neztratí. Pokud fungujete jinak, musíte jít složitější cestou.

Migraci jsem rozdělil na jednotlivé služby - od MongoDB po Graylog. Vždy nainstalovat službu, přemigrovat data a službu spustit/restartovat. Instalace jsem prováděl dle příručky s pro tento návod nepodstatnými úpravami. Před migrací je více než vhodné starý server aktualizovat tak, aby verze všech použitých služeb byly stejné jako na novém. Závěrem upozorňuji, že Elasticsearch vůbec neznám a nijak do ní nesahám. Proto je pravděpodobné, že existuje lepší forma migrace než snapshot/restore, kterou jsem použil já (třeba přidání nového serveru do clusteru, automatická synchronizace/replikace a vypnutí starého nodu).

1. Vypnout Graylog

Před začátkem migrace je vhodné vypnout Graylog, takže během migrace nemůže zapsat nová data.

sudo systemctl stop graylog-server.service

2. MongoDB

Migrace databáze je velmi jednoduchá. Stačí 'dumpnout' databázi graylog a tento dump poté obnovit na novém serveru.

Export:

mongodump --db graylog --out /tmp/mongodbdump

Celou složku překopírovat na nový server.

Import:

Celou složku importovat.

mongorestore --db graylog mongodbdump/

3. ElasticSearch

Export

  1. Do konfiguračního souboru /etc/elasticsearch/elasticsearch.yml musíte vložit řádek, který popisuje, kam se snapshot vytvoří. Danou složku samozřejmě musíte vytvořit a jako vlastníka-skupinu nastavit elasticsearch.
path.repo: "/etc/elasticsearch/backups"
  1. Restartovat Elasticsearch
  2. Registrovat složku/filesystem z kroku 1
curl -XPUT 'localhost:9200/_snapshot/my_fs_backup?pretty' -H 'Content-Type: application/json' -d '{"type": "fs", "settings": {"location": "/etc/elasticsearch/backups", "compress": true}}'
  1. Opět restart
  2. Vytvořit snapshot
curl -XPUT 'localhost:9200/_snapshot/my_backup/snp1?pretty' -H 'Content-Type: application/json' -d '{"type": "fs", "settings": {"location": "/etc/elasticsearch/backups"}}'
  1. Celou složku se snapshotem přesunout na nový server.

Import

  1. Analogicky vytvořit složku /etc/elasticsearch/backups a přidat volbu path.repo do elasticsearch.yml.
  2. Nakopírovat do složky backups soubory získané při exportu a nastavit oprávnění tak, aby byla +r,w pro skupinu elasticsearch.
  3. Registrovat složku
curl -XPUT 'localhost:9200/_snapshot/my_fs_backup?pretty' -H 'Content-Type: application/json' -d '{"type": "fs", "settings": {"location": "/etc/elasticsearch/backups", "compress": true}}'
  1. Zahájit obnovování
curl -XPOST 'localhost:9200/_snapshot/my_fs_backup/snp1/_restore'
  1. Restartovat Elasticsearch
systemctl restart elasticsearch.service

4. Graylog server

Nyní je třeba nainstalovat Graylog server standardně dle příručky. Server zatím nespouštět. Po instalaci je třeba překopírovat konfigurační soubor a soubor node-id ze starého serveru, aby nebylo třeba upravovat databázi.

/etc/graylog/server/server.conf
/etc/graylog/server/node-id

Nakonec je nutné upravit hodnoty http_bind_address, http_publish_uri, http_external_uri v server.conf tak, aby odpovídaly novému serveru.

Nyní je možné server spustit. Při troše štěstí dojde k hladkému spuštění, původní data budou k dispozici a všechny Inputs budou fungovat.

5. Závěrem

Doufám že návod byl užitečný a ušetřil vám nějakou práci. Pokud znáte lepší způsob, poučte mě prosím v komentářích.

6. Pomocné zdroje

Add new comment

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.