Come eseguire Graylog Server nei contenitori Docker
Tutte le applicazioni generano informazioni durante l'esecuzione, queste informazioni vengono archiviate come registri. In qualità di amministratore di sistema, è necessario monitorare questi registri per garantire il corretto funzionamento del sistema e quindi prevenire rischi ed errori. Questi registri sono normalmente sparsi sui server e la gestione diventa più difficile con l’aumentare del volume dei dati.
Graylog è uno strumento di gestione dei log gratuito e open source che può essere utilizzato per acquisire, centralizzare e visualizzare i log in tempo reale da diversi dispositivi su una rete. Può essere utilizzato per analizzare sia i log strutturati che quelli non strutturati. La configurazione di Graylog è composta da MongoDB, Elasticsearch e il server Graylog. Il server riceve i dati dai client installati su più server e li visualizza sull'interfaccia web.
Di seguito è riportato un diagramma che illustra l'architettura Graylog
Graylog offre le seguenti funzionalità:
- Raccolta di log: la moderna architettura incentrata sui log di Graylog può accettare quasi tutti i tipi di dati strutturati, inclusi i messaggi di log e il traffico di rete da; syslog (TCP, UDP, AMQP, Kafka), AWS (AWS Logs, FlowLogs, CloudTrail), percorso JSON dall'API HTTP, Beats/Logstash, testo semplice/non elaborato (TCP, UDP, AMQP, Kafka) ecc.
- Analisi dei log: Graylog brilla davvero quando esplora i dati per capire cosa sta succedendo nel tuo ambiente. Utilizza; ricerca avanzata, flusso di lavoro di ricerca e dashboard.
- Estrazione dei dati: ogni volta che il sistema di gestione dei registri è in funzione, saranno presenti dati di riepilogo che dovranno essere trasmessi da qualche altra parte nel tuo Centro operativo. Graylog offre diverse opzioni che includono; report pianificati, motore di correlazione, API REST e data forwarder.
- Sicurezza e prestazioni migliorate: Graylog spesso contiene dati sensibili e regolamentati, quindi è fondamentale che il sistema stesso sia sicuro, accessibile e veloce. Ciò si ottiene utilizzando il controllo degli accessi basato sui ruoli, l'archiviazione, la tolleranza agli errori ecc
- Estendibile – con la fenomenale comunità Open Source, le estensioni vengono create e rese disponibili sul mercato per migliorare la funzionalità di Graylog
Questa guida ti spiegherà come eseguire il server Graylog nei contenitori Docker. Questo metodo è preferibile poiché puoi eseguire e configurare Graylog con tutte le dipendenze, Elasticsearch e MongoDB già in bundle.
Configurazione Prerequisiti.
Prima di iniziare, è necessario aggiornare il sistema e installare i pacchetti richiesti.
## On Debian/Ubuntu
sudo apt update && sudo apt upgrade
sudo apt install curl vim git
## On RHEL/CentOS/RockyLinux 8
sudo yum -y update
sudo yum -y install curl vim git
## On Fedora
sudo dnf update
sudo dnf -y install curl vim git
1. Installa Docker e Docker-Compose su Linux
Naturalmente, è necessario il motore docker per eseguire i contenitori docker. Per installare il motore docker, utilizzare la guida dedicata di seguito:
- Come installare Docker CE su sistemi Linux
Una volta installato, controlla la versione installata.
$ docker -v
Docker version 20.10.13, build a224086
È inoltre necessario aggiungere l'utente di sistema al gruppo docker. Ciò ti consentirà di eseguire comandi docker senza utilizzare sudo
sudo usermod -aG docker $USER
newgrp docker
Con docker installato, procedi e installa docker-compose utilizzando la guida seguente:
- Come installare Docker Compose su Linux
Verificare l'installazione.
$ docker-compose version
Docker Compose version v2.3.3
Ora avvia e abilita la finestra mobile per l'esecuzione automatica all'avvio del sistema.
sudo systemctl start docker && sudo systemctl enable docker
2. Fornire il contenitore Graylog
Il contenitore Graylog sarà composto dal server Graylog, Elasticsearch e MongoDB. Per poter raggiungere questo obiettivo, cattureremo le informazioni e le impostazioni in un file YAML.
Crea il file YAML come di seguito:
vim docker-compose.yml
Nel file, aggiungi le righe seguenti:
version: '2'
services:
# MongoDB: https://hub.docker.com/_/mongo/
mongodb:
image: mongo:4.2
networks:
- graylog
#DB in share for persistence
volumes:
- /mongo_data:/data/db
# Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
#data folder in share for persistence
volumes:
- /es_data:/usr/share/elasticsearch/data
environment:
- http.host=0.0.0.0
- transport.host=localhost
- network.host=0.0.0.0
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
mem_limit: 1g
networks:
- graylog
# Graylog: https://hub.docker.com/r/graylog/graylog/
graylog:
image: graylog/graylog:4.2
#journal and config directories in local NFS share for persistence
volumes:
- /graylog_journal:/usr/share/graylog/data/journal
environment:
# CHANGE ME (must be at least 16 characters)!
- GRAYLOG_PASSWORD_SECRET=somepasswordpepper
# Password: admin
- GRAYLOG_ROOT_PASSWORD_SHA2=e1b24204830484d635d744e849441b793a6f7e1032ea1eef40747d95d30da592
- GRAYLOG_HTTP_EXTERNAL_URI=http://192.168.205.4:9000/
entrypoint: /usr/bin/tini -- wait-for-it elasticsearch:9200 -- /docker-entrypoint.sh
networks:
- graylog
links:
- mongodb:mongo
- elasticsearch
restart: always
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_journal:
driver: local
networks:
graylog:
driver: bridge
Nel file sostituire:
- GRAYLOG_PASSWORD_SECRET con la tua password che deve contenere almeno 16 caratteri
- GRAYLOG_ROOT_PASSWORD_SHA2 con una password SHA2 ottenuta utilizzando il comando:
echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
- GRAYLOG_HTTP_EXTERNAL_URI con l'indirizzo IP del tuo server.
Puoi anche impostare più configurazioni per il tuo server utilizzando GRAYLOG_, ad esempio, per abilitare SMTP per l'invio di avvisi;
.......
graylog:
......
environment:
GRAYLOG_TRANSPORT_EMAIL_ENABLED: "true"
GRAYLOG_TRANSPORT_EMAIL_HOSTNAME: smtp
GRAYLOG_TRANSPORT_EMAIL_PORT: 25
GRAYLOG_TRANSPORT_EMAIL_USE_AUTH: "false"
GRAYLOG_TRANSPORT_EMAIL_USE_TLS: "false"
GRAYLOG_TRANSPORT_EMAIL_USE_SSL: "false"
.....
3. Creare volumi permanenti
Per rendere persistenti i dati, utilizzerai volumi esterni per archiviarli. In questa guida abbiamo già mappato i volumi nel file YAML. Crea i 3 volumi per MongoDB, Elasticsearch e Graylog come di seguito:
sudo mkdir /mongo_data
sudo mkdir /es_data
sudo mkdir /graylog_journal
Imposta i permessi corretti:
sudo chmod 777 -R /mongo_data
sudo chmod 777 -R /es_data
sudo chmod 777 -R /graylog_journal
Nei sistemi basati su Rhel, è necessario impostare SELinux in modalità permissiva affinché i percorsi siano accessibili.
sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
4. Esegui il server Graylog nei contenitori Docker
Con il provisioning del contenitore, ora possiamo ruotarlo facilmente utilizzando il comando:
docker-compose up -d
Output di esempio:
[+] Running 30/30
⠿ graylog Pulled 23.2s
⠿ f7a1c6dad281 Pull complete 8.0s
⠿ ea8366d5a4a5 Pull complete 9.7s
⠿ 3c38647db2f9 Pull complete 10.2s
⠿ 8c1622fde1b3 Pull complete 12.9s
⠿ a51becc643cd Pull complete 17.6s
⠿ a363c7a2d0d7 Pull complete 18.5s
⠿ 208d9143b0ee Pull complete 19.1s
⠿ c30263374f43 Pull complete 19.4s
⠿ mongodb Pulled 17.5s
⠿ cf06a7c31611 Pull complete 2.2s
⠿ 5e8cbd051978 Pull complete 2.5s
⠿ 22d2e18323fe Pull complete 3.0s
⠿ ea17d81261d5 Pull complete 3.6s
⠿ ec6d044e0932 Pull complete 3.9s
.......
Una volta che tutte le immagini sono state estratte e i contenitori avviati, controlla lo stato come di seguito:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f969caa48f5 graylog/graylog:4.2 "/usr/bin/tini -- wa…" 30 seconds ago Up 27 seconds (health: starting) 0.0.0.0:1514->1514/tcp, :::1514->1514/tcp, 0.0.0.0:9000->9000/tcp, 0.0.0.0:1514->1514/udp, :::9000->9000/tcp, :::1514->1514/udp, 0.0.0.0:12201->12201/tcp, 0.0.0.0:12201->12201/udp, :::12201->12201/tcp, :::12201->12201/udp thor-graylog-1
1a21d2de4439 docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2 "/tini -- /usr/local…" 31 seconds ago Up 28 seconds 9200/tcp, 9300/tcp thor-elasticsearch-1
1b187f47d77e mongo:4.2 "docker-entrypoint.s…" 31 seconds ago Up 28 seconds 27017/tcp thor-mongodb-1
Se hai un firewall abilitato, consenti il passaggio della porta del servizio Graylog.
##For Firewalld
sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent
sudo firewall-cmd --reload
##For UFW
sudo ufw allow 9000/tcp
5. Accedi all'interfaccia utente Web di Graylog
Ora apri l'interfaccia web di Graylog utilizzando l'URL http://IP_address:9000.
Accedi utilizzando il nome utente admin e la password SHA2 (StrongPassw0rd) impostati in YAML.
Nella dashboard, creiamo il primo input per ottenere i log accedendo alla scheda sistemi e selezionando input.
Ora cerca TCP raw/testo normale e fai clic su avvia nuovo input
Una volta avviato, verrà visualizzata una finestra pop-up come di seguito. Devi solo modificare il nome dell'input, port(1514), e selezionare il nodo o "Globale" per la posizione dell'input. Lascia gli altri dettagli così come sono.
Salva il file e prova a inviare un messaggio di testo semplice all'input TCP Graylog Raw/Plaintext sulla porta 1514.
echo 'First log message' | nc localhost 1514
##OR from another server##
echo 'First log message' | nc 192.168.205.4 1514
Nell'input di testo non elaborato/normale in esecuzione, mostra i messaggi ricevuti
Il messaggio ricevuto dovrebbe essere visualizzato come di seguito.
Puoi anche esportarlo in una dashboard come di seguito.
Crea la dashboard fornendo le informazioni richieste.
La dashboard verrà visualizzata nella scheda dashboard.
Conclusione
Questo è tutto!
Abbiamo illustrato trionfalmente come eseguire il server Graylog nei contenitori Docker. Ora puoi monitorare e accedere facilmente ai registri su diversi server. Spero che questo sia stato significativo per te.
Post correlati:
- Installa Graylog Server su Debian con Let's Encrypt
- Installa Graylog Server su Ubuntu con Let's Encrypt SSL
- Installa Graylog su CentOS 8/RHEL 8