TheElastic Stack può monitorare una varietà di dati generati dai contenitori Docker. In questa guida, imposterai un Linode per analizzare e visualizzare i log e le metriche dei container utilizzando strumenti come Kibana, Beats ed Elasticsearch. Una volta terminato, sarai in grado di configurare il tuo sistema per raccogliere automaticamente i dati per contenitori aggiuntivi.
Prima di iniziare
-
Se non l'hai già fatto, crea un account Linode e un'istanza di calcolo. Consulta le nostre guide Introduzione a Linode e Creazione di un'istanza di calcolo.
-
Segui la nostra guida alla configurazione e alla protezione di un'istanza di calcolo per aggiornare il tuo sistema. Potresti anche voler impostare il fuso orario, configurare il tuo nome host, creare un account utente limitato e rafforzare l'accesso SSH.
-
Segui la nostra Guida UFW per installare e configurare un firewall (UFW) sul tuo sistema basato su Ubuntu o Debian, o la nostra Guida FirewallD per sistemi basati su rpm o CentOS. Dopo aver configurato il firewall, assicurati che le porte necessarie siano aperte per poter procedere con le connessioni tramite SSH per il resto di questa guida:
sudo ufw allow ssh
-
Installa Docker sul tuo Linode seguendo la guida all'installazione dal progetto Docker.
Nota I servizi in questa guida si legano solo a localhost, il che significa che non sono accessibili al di fuori di Linode da host remoti. Ciò garantisce che l'API REST di Elasticsearch rimanga privata su localhost e non sia accessibile in remoto da Internet. Se esegui passaggi oltre questa guida per configurare ulteriormente Elasticsearch e i relativi componenti, assicurati che il tuo firewall sia in posizione e blocchi correttamente il traffico verso i nodi Elasticsearch e Kibana da Internet (porte 9200 e 9300 per Elasticsearch e 5601 per Kibana) per mantenerli adeguatamente protetto.
Installa componenti dello stack elastico
Prima di configurare il tuo sistema per monitorare i container in esecuzione, installa prima i componenti necessari per raccogliere e spedire log e metriche a Elasticsearch.
Distribuzioni basate su Debian
Configurare l'elastico apt
repository e installare i pacchetti necessari e le relative dipendenze.
-
Installa la chiave di firma del pacchetto Elastic APT ufficiale:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
-
Installa
apt-transport-https
pacchetto, necessario per recuperaredeb
pacchetti serviti su HTTPS:sudo apt-get install apt-transport-https
-
Aggiungi le informazioni del repository APT all'elenco delle fonti del tuo server:
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
-
Aggiorna l'elenco dei pacchetti disponibili:
sudo apt-get update
-
Prima di installare Elasticsearch, deve essere presente il runtime Java. Su sistemi come Ubuntu 18.04 LTS, utilizzando
default-jre-headless
pacchetto installa un runtime Java compatibile:sudo apt-get install default-jre-headless
-
Installa Elasticsearch, Kibana, Filebeat e Metricbeat:
sudo apt-get install elasticsearch kibana filebeat metricbeat
Distribuzioni basate su Redhat
Configura il rpm
repository per yum
e relativi strumenti di confezionamento.
-
Considera attendibile la chiave di firma elastica:
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
-
Crea una configurazione del repository yum per utilizzare il repository yum elastico:
- File:/ etc/yum.repos.d/elasticsearch.repo
1 2 3 4 5 6 7 8 9
[elasticsearch-6.x] name=Elastic repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
-
Aggiorna il
yum
cache per garantire che eventuali nuovi pacchetti diventino disponibili:sudo yum update
-
Prima di installare Elasticsearch, deve essere presente il runtime Java. Su CentOS, ad esempio, è possibile installare un runtime Java compatibile utilizzando un pacchetto OpenJDK headless:
sudo yum install java-11-openjdk-headless
-
Installa Elasticsearch, Kibana, Filebeat e Metricbeat:
sudo yum install elasticsearch kibana filebeat metricbeat
Configura lo stack elastico
Per rilevare e acquisire correttamente le metriche del contenitore, è necessario configurare ogni componente dello stack elastico.
Ricerca elastica
Nel file /etc/elasticsearch/jvm.options
due valori che iniziano con -Xm
dovrebbe essere non commentato. Queste impostazioni indicano alla JVM di allocare una quantità specifica di memoria. Il valore consigliato per queste impostazioni è il 50% della RAM di sistema disponibile. Ad esempio, su un sistema con 1G di RAM, queste impostazioni dovrebbero essere:
- File:/ etc/elasticsearch/jvm.options
1 2
-Xms512m -Xmx512m
-
Prima di avviare Elasticsearch, installa alcuni plugin necessari per elaborare i dati geoip e user-agent.
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-user-agent sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-geoip
-
Con queste impostazioni in atto, avvia la
elasticsearch
servizio.sudo systemctl start elasticsearch
-
Attendi un breve periodo di tempo per l'avvio di Elasticsearch, quindi verifica che Elasticsearch risponda tramite l'API REST:
curl http://localhost:9200
Dovresti vedere un output simile al seguente:
{ "name" : "iQEk_-M", "cluster_name" : "elasticsearch", "cluster_uuid" : "tQeLgbKrTNOp2AoqdmTItw", "version" : { "number" : "6.5.4", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "d2ef93d", "build_date" : "2018-12-17T21:17:40.758843Z", "build_snapshot" : false, "lucene_version" : "7.5.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
Elasticsearch è pronto per indicizzare i documenti.
Kibana
La maggior parte delle impostazioni predefinite di Kibana sono adatte agli scopi di questa guida. Non sono necessarie modifiche alla configurazione; avvia il kibana
servizio.
sudo systemctl start kibana
Filebeat
Usa la docker
input per consentire a Filebeat di acquisire i contenitori avviati in modo dinamico. Ciò allevia la necessità di specificare i percorsi dei file di registro Docker e consente invece a Filebeat di rilevare i contenitori all'avvio.
-
Aggiungi quanto segue nella parte superiore del file di configurazione di Filebeat per istruire il
filebeat
demone per acquisire i log del contenitore Docker. Queste righe devono essere inserite nella chiave di configurazionefilebeat.inputs
:- File:/ etc/filebeat/filebeat.yml
1 2 3 4 5 6
filebeat.inputs: - type: docker containers.ids: - '*' processors: - add_docker_metadata: ~
-
Decommenta la riga seguente e cambia il suo valore in
true
, che consentirà a Filebeat di creare dashboard Kibana associati per i log dei contenitori acquisiti:- File:/ etc/filebeat/filebeat.yml
1
setup.dashboards.enabled: true
-
Infine, aggiungi il seguente
autodiscover
configurazione alla fine delfilebeat.yml
file:- File:/ etc/filebeat/filebeat.yml
1 2 3 4
filebeat.autodiscover: providers: - type: docker hints.enabled: true
-
Abilita
nginx
modulo, che verrà utilizzato più avanti in questo tutorial:sudo /usr/bin/filebeat modules enable nginx
-
Il resto del file di configurazione indicherà a Filebeat di inviare i log all'istanza Elasticsearch in esecuzione localmente, che può essere lasciata invariata. Avvia Filebeat:
sudo systemctl start filebeat
Metricbeat
Come Filebeat, configura Metricbeat in modo simile per rilevare dinamicamente i contenitori in esecuzione da monitorare.
-
Metricbeat utilizza un modulo per raccogliere le metriche del contenitore. Emetti il seguente comando per abilitare la
docker
enginx
moduli:sudo /usr/bin/metricbeat modules enable docker sudo /usr/bin/metricbeat modules enable nginx
-
Decommenta la riga seguente e cambia il suo valore in
true
, che consentirà a Metricbeat di creare dashboard Kibana associati per i log dei contenitori acquisiti:- File:/ etc/metricbeat/metricbeat.yml
1
setup.dashboards.enabled: true
-
Il resto del file di configurazione indicherà a Metricbeat di inviare i log all'istanza Elasticsearch in esecuzione locale, che può essere lasciata invariata. Ora è possibile avviare Metricbeat:
sudo systemctl start metricbeat
Visualizzazione di log e metriche del contenitore
L'esempio seguente mostra come Filebeat e Metricbeat acquisiscono automaticamente i dati del contenitore a cui è possibile accedere all'interno di Kibana.
-
Per iniziare, esegui un semplice contenitore Docker nginx sul tuo Linode.
sudo docker run --name nginx -P -d --label co.elastic.logs/module=nginx nginx
- Questo comando eseguirà il server Web in background ed esporrà il servizio HTTP in ascolto con un numero di porta casuale.
- Il
--label
argomento serve per consentire a Filebeat di analizzare automaticamente il formato del registro di determinati tipi di contenitori, che in questo caso è nginx.
-
Per aprire una connessione sicura a Kibana, apri un tunnel SSH per la porta 5601 sul tuo Linode.
ssh -L 5601:localhost:5601 <[email protected]>
- Sostituisci
<[email protected]>
con il nome utente e l'indirizzo IP del tuo Linode. - Questo inoltra la porta 5601 localmente alla porta 5601 sul tuo Linode.
- Una guida completa all'utilizzo dei tunnel SSH su una varietà di piattaforme è disponibile nella nostra guida Creare un tunnel SSH per MySQL.
- Sostituisci
-
Vai a
http://localhost:5601
nel tuo browser, che visualizzerà la seguente pagina di destinazione iniziale per Kibana. -
Fai clic su Gestione link nella barra laterale in basso a sinistra. Verrà visualizzata la pagina seguente. Quindi, fai clic su Modelli di indice per accedere alla pagina di configurazione del modello di indice.
-
I pattern degli indici determinano il modo in cui Kibana comprende gli indici presenti in Elasticsearch. Affinché alcune visualizzazioni vengano visualizzate correttamente, è necessario prima configurare un modello di indice predefinito. Seleziona filebeat-* sul lato sinistro della pagina per configurare il modello di indice filebeat-*.
-
Fai clic sull'icona a forma di stella nell'angolo in alto a destra della pagina per impostare questo modello di indice come predefinito in Kibana.
Kibana è ora configurato correttamente con un modello di indice predefinito.
-
Filebeat e Metricbeat sono configurati per configurare automaticamente Elasticsearch e Kibana, quindi dashboard e pattern di indicizzazione sono caricati e pronti per essere utilizzati. Fai clic su Dashboard nella barra laterale di sinistra, che mostra la pagina seguente.
-
Nella barra di ricerca, digita "contenitore" per visualizzare dashboard precompilati per i contenitori di sistema. Fai clic sulla Panoramica di [Metricbeat Docker] collegamento.
-
La Panoramica di [Metricbeat Docker] verrà caricata la dashboard, che mostra diversi aspetti delle metriche del contenitore attualmente in esecuzione. La dashboard mostra un elenco di container in esecuzione, il numero totale di container in esecuzione, in pausa e interrotti, nonché metriche sul consumo delle risorse del container.
Scorrendo più in basso, mostra anche i grafici che indicano l'utilizzo delle risorse del contenitore nel tempo, inclusi CPU, memoria e attività di rete.
-
Prima di passare ad altre visualizzazioni Kibana, genera alcune attività di log da nginx inviando richieste HTTP al container in ascolto. Per prima cosa, trova quale porta il container sta ascoltando le richieste usando la
docker
comando:docker ps
Dovresti vedere un output simile al seguente:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3f0c6d284f1f nginx "nginx -g 'daemon of…" 23 minutes ago Up 23 minutes 0.0.0.0:32769->80/tcp nginx
Da questo output, sappiamo che il server HTTP può essere raggiunto inviando richieste alla porta 32769, che viene inoltrata alla porta 80 nel contenitore. La porta sul tuo sistema potrebbe essere diversa.
-
Invia diverse richieste a questa porta usando il
curl
comando, sostituendo<port>
con il numero trovato nel passaggio precedente:for i in $(seq 1 10) ; do curl localhost:<port> ; done
-
Ora in Kibana sono presenti numerosi log per questo container. Fai clic su Scopri nella barra laterale sinistra in Kibana. Viene visualizzata la seguente schermata.
- L'istogramma nella parte superiore della pagina indica il numero totale di log del contenitore nel tempo.
- La tabella sotto il grafico contiene i contenuti dei singoli log.
- Facendo clic sulle frecce a sinistra del timestamp di ciascun registro verranno visualizzate le informazioni per ciascun registro acquisito.
-
Prova a riemettere il precedente
for ...
comando per inviare altri diecicurl
richieste al container e osserva come cambia l'istogramma del registro per riflettere i nuovi registri. -
Fai clic su Dashboard nella barra laterale di sinistra, quindi fare clic una seconda volta per accedere alla schermata di selezione del dashboard. Cerca "nginx" nella barra di ricerca.
-
Fare clic su [Filebeat Nginx] Access e log degli errori link, che visualizzerà una dashboard con una serie di visualizzazioni relative all'attività di nginx.
Moduli aggiuntivi
Questa esercitazione ha dimostrato come Filebeat e Metricbeat possono acquisire automaticamente le metriche e i registri del contenitore senza la necessità di configurare in modo esplicito percorsi o configurazioni dei file di registro. Oltre agli esempi di nginx presentati qui, i collegamenti aggiuntivi forniti di seguito enumerano altri moduli che possono essere caricati in Filebeat e Metricbeat per altri servizi.
Maggiori informazioni
Si consiglia di consultare le seguenti risorse per ulteriori informazioni su questo argomento. Sebbene questi siano forniti nella speranza che possano essere utili, tieni presente che non possiamo garantire l'accuratezza o la tempestività dei materiali ospitati esternamente.
- Moduli Filebeat
- Moduli Metricbeat
- Monitoraggio dei contenitori elastici
- Riferimento alla riga di comando di Docker