GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Strumentazione container con lo stack elastico

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

  1. 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.

  2. 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.

  3. 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
    
  4. 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.

  1. Installa la chiave di firma del pacchetto Elastic APT ufficiale:

    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
    
  2. Installa apt-transport-https pacchetto, necessario per recuperare deb pacchetti serviti su HTTPS:

    sudo apt-get install apt-transport-https
    
  3. 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
    
  4. Aggiorna l'elenco dei pacchetti disponibili:

    sudo apt-get update
    
  5. 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
    
  6. 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.

  1. Considera attendibile la chiave di firma elastica:

    sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    
  2. 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
        
  3. Aggiorna il yum cache per garantire che eventuali nuovi pacchetti diventino disponibili:

    sudo yum update
    
  4. 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
    
  5. 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
  1. 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
    
  2. Con queste impostazioni in atto, avvia la elasticsearch servizio.

    sudo systemctl start elasticsearch
    
  3. 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.

  1. 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 configurazione filebeat.inputs :

    File:/ etc/filebeat/filebeat.yml
    1
    2
    3
    4
    5
    6
    
    filebeat.inputs:
    - type: docker
      containers.ids:
      - '*'
      processors:
      - add_docker_metadata: ~
  2. 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
  3. Infine, aggiungi il seguente autodiscover configurazione alla fine del filebeat.yml file:

    File:/ etc/filebeat/filebeat.yml
    1
    2
    3
    4
    
    filebeat.autodiscover:
      providers:
        - type: docker
          hints.enabled: true
  4. Abilita nginx modulo, che verrà utilizzato più avanti in questo tutorial:

    sudo /usr/bin/filebeat modules enable nginx
    
  5. 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.

  1. Metricbeat utilizza un modulo per raccogliere le metriche del contenitore. Emetti il ​​seguente comando per abilitare la docker e nginx moduli:

    sudo /usr/bin/metricbeat modules enable docker
    sudo /usr/bin/metricbeat modules enable nginx
    
  2. 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
  3. 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.

  1. 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.
  2. 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.
  3. Vai a http://localhost:5601 nel tuo browser, che visualizzerà la seguente pagina di destinazione iniziale per Kibana.

  4. 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.

  5. 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-*.

  6. 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.

  7. 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.

  8. Nella barra di ricerca, digita "contenitore" per visualizzare dashboard precompilati per i contenitori di sistema. Fai clic sulla Panoramica di [Metricbeat Docker] collegamento.

  9. 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.

  10. 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.

  11. 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
    
  12. 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.
  13. Prova a riemettere il precedente for ... comando per inviare altri dieci curl richieste al container e osserva come cambia l'istogramma del registro per riflettere i nuovi registri.

  14. 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.

  15. 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

Docker
  1. Come installare WordPress con Docker su Ubuntu

  2. Installa ModSecurity con Apache in un Docker Container

  3. Come installare la stampante con Ubuntu?

  4. Come installare Docker e distribuire uno stack LAMP

  5. Come installare Ghost su Debian con Nginx

Installa WordPress con LEMP Stack su Ubuntu 20.04

Installa phpMyAdmin con lo stack LAMP su Ubuntu 18.04 LTS

Come installare lo stack LAMP su CentOS 8

Come installare WordPress con lo stack LAMP su Ubuntu 20.04

Installa WordPress con LEMP Stack su Ubuntu 20.04

Utilizzo dei contenitori Docker dalla riga di comando