Stai cercando un sistema in grado di interpretare i tuoi file di registro, archiviarli in un ambiente sicuro e raccogliere dati ben organizzati per l'analisi? Bene, centralizzare la gestione dei registri con Graylog utilizzando Docker potrebbe essere quello che stai cercando!
In questo tutorial imparerai come usare Graylog e Docker per costruire un sistema di log centralizzato per la raccolta di dati Syslog dalla tua macchina Ubuntu.
Continua a leggere e inizia a centralizzare la gestione dei registri!
Prerequisiti
Questo post sarà un tutorial passo dopo passo. Per seguire, assicurati di avere quanto segue:
- Due macchine Ubuntu (un host e un client) – Questo tutorial utilizza Ubuntu 20.04, ma altre distribuzioni Linux funzioneranno.
- Rsyslog sul computer client.
- Docker installato sulla macchina host. La versione di Docker utilizzata per questo tutorial è 20.10.7
- Docker-Compose installato sul computer host.
- L'utilità Pwgen deve essere installata sulla macchina host per generare una password segreta casuale.
Distribuzione di Graylog utilizzando Docker Compose
Che cos'è Graylog comunque? Graylog è una piattaforma di gestione dei log open source. Graylog può raccogliere, indicizzare e analizzare dati strutturati e non strutturati dalle origini. Una di queste fonti sono i sistemi operativi in tempo reale.
Prima di distribuire Graylog, devi prima installare Graylog sul tuo computer host utilizzando Docker Compose.
Supponiamo che tu stia usando un computer Ubuntu 20.04 basato su cloud. In tal caso, dovrai modificare il gruppo di sicurezza o le regole del firewall per consentire le seguenti porte:
1514
e12201
per entrambe le connessioni TCP e UDP e9000
solo per connessioni TCP.
1. Apri il tuo client SSH preferito e connettiti al tuo computer.
2. Quindi, esegui i comandi seguenti per creare una nuova directory nella tua directory home e passare a quella directory. Puoi nominare la directory come preferisci. Ma per questa demo, la directory si chiama ~/graylog.
mkdir graylog
cd graylog
3. Crea un file YAML denominato docker-compose.yml nel tuo ~/graylog directory, quindi popolare il file con la configurazione seguente. Ma non salvare ancora le modifiche. Per proteggere l'accesso al Graylog e limitare l'accesso ai tuoi dati, dovrai generare una password segreta.
Nel file appena creato troverai la configurazione per impostare i componenti Graylog, MongoDB ed ElasticSearch. Graylog richiede che tutti questi componenti siano configurati ed eseguiti contemporaneamente affinché Graylog funzioni in modo efficace.
version: '2'
services:
# MongoDB: https://hub.docker.com/_/mongo/
MongoDB: # Mongodb service
image: mongo:4.2 # Version of Mongodb docker image
volumes:
- mongo_data:/data/db # Persisted mongodb data
# Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html
elasticsearch: # ElasticSearch service
image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2 # Version of elasticsearch image
volumes:
- es_data:/usr/share/elasticsearch/data # Persisted elasticsearch data
environment:
- http.host=0.0.0.0
- transport.host=localhost
- network.host=0.0.0.0
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
# Unlimited amount of memory set for elasticsearch container
memlock:
soft: -1
hard: -1
# Resource limit for elasticsearch set to 1 gigabyte
mem_limit: 1g
# Graylog: https://hub.docker.com/r/graylog/graylog/
graylog:
image: graylog/graylog:4.2 # Version of Graylog docker image
volumes:
- graylog_data:/usr/share/graylog/data # Persisted Graylog data
environment:
# CHANGE ME (must be at least 16 characters)!
- GRAYLOG_PASSWORD_SECRET=somepasswordpepper
# Password: admin
- GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
- GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
- GRAYLOG_WEB_ENDPOINT_URI=http://127.0.0.1:9000/api
# Command to run as soon as components are started
entrypoint: /usr/bin/tini -- wait-for-it elasticsearch:9200 -- /docker-entrypoint.sh
# Containers that Graylog depends on
links:
- mongodb:mongo
- elasticsearch
restart: always # Graylog container set to always restart when stopped
depends_on:
- mongodb
- elasticsearch
ports:
# Graylog web interface and REST API
- 9000:9000
# Syslog TCP
- 1514:1514
# Syslog UDP
- 1514:1514/udp
# GELF TCP
- 12201:12201
# GELF UDP
- 12201:12201/udp
# Volumes for persisting data, see https://docs.docker.com/engine/admin/volumes/volumes/
volumes:
mongo_data:
driver: local
es_data:
driver: local
graylog_data:
driver: local
4. Ora esegui pwgen
comando seguente per generare una singola password casuale (-N
) con 96 (-s 96
) caratteri.
pwgen -N 1 -s 96
5. La password segreta generata sarà simile a quella di seguito. Annota la tua password segreta poiché la imposterai nella docker-compose.yml file (passaggio sei).
6. Torna alla docker-compose.yml file e sostituisci somepasswordpepper
in GRAYLOG_PASSWORD_SECRET
con la password segreta appena generata (passaggio cinque). Utilizzerai questa password per la crittografia e il salting della password. Senza questa password segreta, il contenitore Graylog non si avvierà.
7. Esegui il comando seguente per generare un hash SHA2 di una password a tua scelta. Questa password è richiesta per l'accesso iniziale a Graylog.
echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
Inserisci una password amministratore a tua scelta quando richiesto, come mostrato di seguito, e premi INVIO. Dopo aver inserito una password, viene generata la password con hash.
Prendi nota della tua password con hash poiché la imposterai in docker-compose.yml file (passo otto).
8. Sostituisci il valore di GRAYLOG_ROOT_PASSWORD_SHA2
variabile di ambiente in docker-compose.yml file con la password hash SHA2 che hai generato in precedenza (passaggio sette). Salva le modifiche nella docker-compose.yml file ed esci dall'editor.
9. Infine, esegui docker-compose up
comando seguente per distribuire i container ElasticSearch, MongoDB e Graylog Docker in modalità separata (-d
). Questo comando li estrae dall'hub Docker e li avvia come contenitori per il corretto funzionamento di Graylog.
# Starting up MongoDB, ElasticSearch, and Graylog containers in detached mode
sudo docker-compose up -d
L'immagine seguente mostra che le immagini MongoDB, ElasticSearch e Graylog Docker sono state estratte dall'hub Docker e avviate come contenitori.
Modifica del valore degli shard di indice per ElasticSearch
Hai appena implementato Graylog e questo è un grande passo avanti nella centralizzazione della gestione dei registri. Ma ora è il momento di configurare Graylog. Cambierai il valore degli shard di ElasticSearch in base al numero di nodi/contenitori ElasticSearch in esecuzione.
Uno shard è un'unità in cui Elasticsearch distribuisce i dati su più nodi. Il numero ottimale di shard per nodo è uno.
1. Apri il tuo browser web preferito e vai a https://
Inserisci amministratore come nome utente e inserisci la password di amministratore che hai creato nella sezione "Distribuzione di Graylog utilizzando Docker Compose" (passaggio sette). Per questo tutorial, la password è adamtheautomator.
Dopo aver effettuato l'accesso, vedrai la pagina introduttiva di Graylog, come mostrato di seguito.
2. Quindi, fai clic su Sistema menu —> Indici , come mostrato di seguito, per accedere agli Indici e indici pagina (passaggio tre), in cui è possibile scegliere di modificare il set di indici predefinito.
3. Fare clic su Modifica per gestire il set di indici predefinito di Graylog e modificare il valore dello shard di ElasticSearch. Il valore predefinito per gli shard ElasticSearch è quattro e dovrai cambiarlo (passaggio quattro).
4. Infine, cambia il numero di shard ElasticSearch in uno (1 ) poiché stai eseguendo un solo nodo/contenitore ElasticSearch e fai clic su Salva Nella parte inferiore della pagina.
Configurazione di Graylog per raccogliere i log da Syslog
Hai appena configurato Graylog modificando il valore per gli shard di indice per ElasticSearch. Ma dovrai anche configurare Graylog per raccogliere i dati di registro da Syslog nel computer client. Come? Imposterai gli input Graylog per ricevere i dati di registro inviati dal tuo computer client tramite Syslog per l'analisi nel computer host.
Con Syslog come protocollo di registrazione standard basato sulla rete, puoi trasportare i messaggi di evento del tuo computer client o registrare i dati su Graylog.
1. Fare clic su Sistema menu —> Ingressi per accedere agli Input pagina, dove imposterai un input UDP Syslog.
2. Cerca e seleziona Syslog UDP nella casella di ricerca, come mostrato di seguito, quindi fai clic su Avvia nuovo input .
3. Infine, configura il nuovo input Syslog UDP con quanto segue e fai clic su Salva nella parte inferiore della finestra a comparsa per mantenere e applicare le modifiche:
- Seleziona il tuo nodo dal Nodo casella a discesa.
- Imposta il Titolo a qualsiasi parola desideri. Per questa demo, il titolo è syslog .
- Imposta l'Indirizzo di associazione a 0.0.0.0, così Graylog può ascoltare gli eventi in arrivo ovunque.
- Imposta la Porta alla porta Syslog UDP
1514
come definito in docker-compose.yml file inSyslog UDP
.
Di seguito, vedrai l'input Syslog UDP in esecuzione come parte di Input locali dopo la configurazione.
Configurazione di Rsyslog per inviare dati Syslog a Graylog
Hai impostato un input Syslog UDP per ricevere i dati inviati dal tuo computer client, ma come fai a inviare i dati a Graylog? Rsyslog farà il trucco!
Creerai un file di configurazione per Rsyslog per inviare i tuoi dati Syslog dal tuo computer client a Graylog in esecuzione nel tuo computer host.
1. Crea un file di configurazione in /etc/rsyslog.d directory sul computer client. Puoi nominare il file come preferisci, ma il file si chiama 90-graylog.conf per questa demo.
2. Successivamente, aggiungi la seguente riga a 90-graylog.conf file, salva le modifiche e chiudi l'editor. Sostituisci 34.76.103.44
con l'indirizzo IP della macchina host su cui è in esecuzione Graylog.
La configurazione seguente invia i dati Syslog (RSYSLOG_SyslogProtocol23Format
) dal computer host (@34.76.103.44
) a Graylog.
*.* @34.76.103.44:1514;RSYSLOG_SyslogProtocol23Format
3. Eseguire il comando seguente per riavviare rsyslog
affinché le modifiche abbiano effetto.
sudo systemctl restart rsyslog
4. Torna all'interfaccia web di Graylog e fai clic su Cerca menu per vedere i tuoi dati Syslog raccolti ordinatamente analizzati in modo simile a quello seguente.
Conclusione
In questo tutorial, hai imparato a creare il tuo sistema di gestione dei log centralizzato con Graylog utilizzando Docker e hai verificato i dati Syslog raccolti con successo dal tuo computer client.
A questo punto, ti sei reso conto che raccogliere e archiviare dati ben organizzati in un ambiente sicuro per l'analisi non sarà più un problema.
Quali altri registri puoi raccogliere con Graylog? Forse configurare un host web per inviare i registri NGINX a Graylog per ulteriori analisi e analisi?