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

Monitoraggio dei container Docker:vantaggi, best practice e strumenti indispensabili

Otto anni fa i container erano una tecnologia nota, ma con poca adozione da parte del pubblico. Quindi, Solomon Hykes ha creato Docker, una tecnologia di container, che rende i container molto più facili da usare. Oggi, i container dominano il mondo IT. Gartner prevede che il 70% delle organizzazioni eseguirà applicazioni containerizzate entro il 2023.

Come mai? Le organizzazioni realizzano i vantaggi di una configurazione più semplice, un'implementazione più rapida e la possibilità di eseguire più carichi di lavoro sullo stesso hardware con applicazioni containerizzate.

Per utilizzare al meglio i container, è necessario monitorare i container Docker. Senza il monitoraggio dei container, stai viaggiando al buio. Non puoi letteralmente vedere quanto bene funzionino i tuoi container, cosa stiano facendo o quanto bene stiano facendo il loro lavoro.

Inoltre, senza il monitoraggio dei container Docker, non puoi sapere come funzionano i microservizi e le applicazioni basate sui container. Il monitoraggio dei container ti consente di sapere cosa sta succedendo ai container stessi e ai tuoi programmi più grandi rivolti agli utenti.

Monitoraggio del container Docker:le basi

Uno dei motivi principali per cui i container sono popolari è perché si prestano a integrazione continua/distribuzione continua (CI/CD). Questa è una metodologia DevOps progettata per consentire ai programmatori di integrare il proprio codice in un repository condiviso in modo tempestivo e frequente. Una volta lì, i programmi containerizzati vengono distribuiti in modo rapido ed efficiente.

Docker consente inoltre agli sviluppatori di imballare, spedire ed eseguire qualsiasi applicazione come un contenitore leggero, portatile e autosufficiente, che può essere eseguito praticamente ovunque. I container ti offrono la portabilità istantanea delle applicazioni.

I contenitori consentono agli sviluppatori di isolare il codice in un unico contenitore, rendendo più efficiente la modifica e l'aggiornamento del programma. Consente alle aziende di suddividere grandi progetti di sviluppo tra più team Agile più piccoli utilizzando pipeline CI/CD per automatizzare la consegna di codice nuovo e aggiornato tramite container.

Infine, e forse il punto più importante per le aziende, i container consentono alle aziende di massimizzare le risorse hardware e cloud. Come ha spiegato James Bottomley, in precedenza CTO di Parallels per la virtualizzazione dei server e uno dei principali sviluppatori di kernel Linux, “gli hypervisor VM, come Hyper-V, KVM e Xen, sono tutti basati sull'emulazione di hardware virtuale. Ciò significa che sono grassi in termini di requisiti di sistema."

I container, tuttavia, utilizzano sistemi operativi condivisi, quindi sono molto più magri degli hypervisor in termini di risorse di sistema. Invece di virtualizzare l'hardware, i container riposano su una singola istanza Linux. Ciò significa che puoi "lasciarti alle spalle l'inutile spazzatura VM del 99,9%, lasciandoti con una piccola capsula ordinata contenente la tua applicazione", come affermato da Bottomley. In altre parole, con un sistema di container ben ottimizzato, puoi avere da quattro a sei container in esecuzione su un sistema che, in passato, poteva eseguire solo una singola istanza.

Oggi esistono molti tipi di piattaforme container. Mentre Docker è il più noto, ci sono anche LXC, runC, container epodman. Svolgono tutte funzioni simili e possono essere gestite in gran parte con gli stessi strumenti.

Cos'è Docker?

Quindi, cos'è Docker in particolare? Docker è costruito su LXC. Come con qualsiasi altro contenitore, per quanto riguarda qualsiasi programma in esecuzione su Docker, ha il proprio file system, memoria, CPU e RAM. La differenza fondamentale tra container e VM è che mentre l'hypervisor astrae un intero dispositivo, i container astraggono semplicemente il kernel del sistema operativo. Tutti i vantaggi di Docker derivano solo da quel semplice meccanismo.

Perché ha avuto successo quando i suoi predecessori come FreeBSD Jails, Oracle Solaris Zones e OpenVZ hanno consentito ai container di funzionare bene e in sicurezza, ma hanno avuto scarso successo sul mercato? In una certa misura, i container hanno avuto successo ma sono invisibili. Ad esempio, Google ha utilizzato il proprio container programlmctfy (Let Me Contain That For You) open source per oltre un decennio. Ogni volta che hai utilizzato la funzionalità di Google, ad esempio Ricerca, Gmail, Google Docs, era in esecuzione in un contenitore invisibile.

Ciò che Docker offre è che rende i contenitori più sicuri ed efficienti da distribuire e utilizzare rispetto agli approcci precedenti. Inoltre, poiché la partnership di Docker con le altre potenze di container, tra cui Canonical, Google, Red Hat e Parallels, sul suo componente keyopen source libcontainer, porta la standardizzazione tanto necessaria ai container.

Docker dona il formato contenitore libcontainers e il suo runtime, nonché le specifiche associate, all'Open Container Project della Linux Foundation. In particolare questo include l'intero contenuto del progetto libcontainer, incluso nsinit, e tutte le modifiche necessarie per farlo funzionare indipendentemente da Docker.

Docker continua a lavorare su altri sforzi di standardizzazione dei container. Ad esempio, Docker ha donato containerd, il suo runtime di container open source, alla Cloud Native Computing Foundation (CNCF). La standardizzazione gioca un ruolo fondamentale nel successo di Docker.

A differenza di altre tecnologie container, Docker supporta anche il networking definito dal software (SDN). Ciò consente ai team DevOps di definire le reti per i container, senza preoccuparsi degli switch hardware. Al contrario, impostano topologie di rete complesse e definiscono le reti tramite file di configurazione.

Contemporaneamente, SDN e Docker consentono di sfruttare i microservizi. Insieme, rendono più efficiente la creazione di applicazioni da servizi ad accoppiamento libero che lavorano insieme tra loro tramite protocolli noti come HTTP e TCP.

Infine, il successo di Docker ha un grosso debito con il fatto di essere semplicemente la giusta tecnologia aperta al momento giusto per aiutare gli utenti a trarre vantaggio dalla rivoluzione del cloud computing.

Cos'è il monitoraggio dei container?

Uno scenario comune per le aziende è che utilizzino Docker e abbiano da centinaia a centinaia di migliaia di container che eseguono applicazioni vitali per la tua azienda. Per orchestrarli, è probabile che stiano usando Kubernetes. Come afferma il CTO di CNCF Chris Aniszczyk, c'è un vuoto crescente nella comprensione del fatto che Kubernetes e container sono essenzialmente un pacchetto. Esistono altri programmi di orchestrazione dei container, ma Kubernetes è il leader di mercato travolgente. Di questi, Datadog segnala che quasi il 90% degli utenti Kubernetes sfrutta i servizi gestiti dal cloud, rispetto a quasi il 70% nel 2020.

È fantastico per quanto va. Ma Kubernetes controlla, distribuisce e ridimensiona i container. Non li monitora.

Il monitoraggio è complicato. I contenitori sono effimeri. Girano su e giù in pochi minuti. Il contenitore medio di Kubernetes dura un solo giorno. Gli strumenti che utilizzi per monitorare le applicazioni tradizionali in esecuzione su server virtuali o server bare metal non sono all'altezza del compito. Quando il tuo programma di monitoraggio richiede un rapporto, il container potrebbe essere scomparso dalla vista, portando con sé tutti i registri al suo interno.

I vantaggi del monitoraggio dei container

Sebbene sia complesso, il monitoraggio dei container è fondamentale. Come dice l'amministratore di sistema Gary Williams, "Non puoi avere troppo monitoraggio". Gary ha ragione.

I vantaggi del monitoraggio dei container includono:

  • Identificazione proattiva dei problemi per evitare interruzioni del sistema.
  • Monitoraggio dei dati delle serie temporali per migliorare il funzionamento delle applicazioni.
  • Ottimizza l'allocazione delle risorse.
  • Rilevare i problemi il prima possibile per risolverli rapidamente.

Anche il monitoraggio dei container è fondamentale poiché le applicazioni basate su container sono costantemente sotto attacco da attacchi di ransomware e criptovalute. In breve, sia per la sicurezza che per le prestazioni, il monitoraggio dei container è d'obbligo. Questi sono gli stessi motivi per cui monitori tutti i tuoi sistemi e i container non sono diversi.

I programmi di monitoraggio affrontano altre sfide per la raccolta di dati di osservabilità dai contenitori. Esistono diversi metodi di raccolta dei dati. Includono:

  • Distribuzione di un agente di monitoraggio dedicato come applicazione host o contenitore.
  • Distribuzione di un router di log per raccogliere automaticamente i log generati dai container.
  • Utilizzo del driver di registrazione Docker per archiviare i log del contenitore nell'host.
  • Raccolta delle metriche tramite le statistiche Docker, la pipeline di metriche Kubernetes o un'API simile.

Il monitoraggio del contenitore copre metriche di base come l'utilizzo della memoria, l'utilizzo della CPU, il limite della CPU e il limite di memoria. I tuoi programmi di monitoraggio dovrebbero anche offrire log di streaming, traccia e osservabilità in tempo reale.

A un livello superiore, oltre a raccogliere e centralizzare i dati di monitoraggio dai container e dai relativi host, è necessario raccogliere e analizzare i dati dell'intera applicazione, piuttosto che i singoli container.

Come ha affermato Minh Dao di LogDNA, "immagina di avere un'applicazione Web a tre livelli, con ogni livello in esecuzione come un contenitore separato. Ora immagina che il tuo livello di back-end inizi improvvisamente a generare errori e di conseguenza i contenitori si arrestino in modo anomalo. L'estrazione di log e metriche dai singoli contenitori aiuterà con l'analisi della causa principale, ma ciò non ti aiuterà a vedere l'errore nel contesto dell'intera applicazione. Il problema può essere specifico del contenitore o può essere indicativo di un problema più ampio a livello di applicazione."

Metti tutto insieme e non ci sono dubbi. Devi monitorare i tuoi container.

I cinque migliori strumenti di monitoraggio dei container

Molti dei migliori programmi di monitoraggio dei container sono programmi open source. Linode fornisce le nozioni di base per iniziare con lo stack Elasticsearch, Logstash e Kibana (ELK) utilizzando Filebeat e Metricbeat con Kibana e l'analisi di serie temporali conGraphite e un dashboard Grafana. Con un po' di sforzo, puoi creare il tuo sistema di monitoraggio dei container.

I programmi nell'elenco seguente sono in ordine alfabetico, non dal migliore al peggiore. Questo perché non puoi classificarli in modo equo. Tutti hanno i propri punti di forza e di debolezza e spesso misurano metriche diverse. Quindi è probabile che se sei seriamente intenzionato a tenere d'occhio i tuoi container, devi utilizzare molti di questi programmi.

Consulente container (cAdvisor)

Google'sContainer Advisor (cAdvisor) è un programma di monitoraggio open source. Funziona come un demone che raccoglie, aggrega ed esporta i dati sull'utilizzo delle risorse e sulle prestazioni dei contenitori mirati. Tiene traccia dei parametri di isolamento delle risorse di ciascun container, dell'utilizzo cronologico delle risorse, degli istogrammi dell'utilizzo cronologico completo delle risorse e delle statistiche di rete. Questi dati vengono esportati per container e a livello di computer.

Il programma viene fornito con il supporto del contenitore Docker nativo ed è progettato per supportare praticamente tutti gli altri tipi di contenitori pronti all'uso. Espone anche le metriche di Prometheus. In altre parole, cAdvisor raccoglie i dati, mentre Prometheus li raschia. L'astrazione del contenitore di CAdvisor si basa su lmctfy, quindi i contenitori sono intrinsecamente nidificati in modo gerarchico.

Puoi installare le build di cAdvisor come immagini sui tuoi host Docker. Il programma fornisce anche un'interfaccia utente Web (UI) e un'interfaccia di programmazione dell'applicazione REST (API). In questo modo puoi monitorare direttamente i tuoi container Docker e integrare le metriche in un'applicazione esterna tramite gli endpoint del servizio Web.

Datadog

Datadog è consigliato da Docker per una buona ragione. Fornisce numerosi strumenti di monitoraggio che tengono traccia di metriche relative a container, infrastruttura e applicazioni.

Anche la sua interfaccia utente e dashboard sono molto utili. Con i suoi dati in tempo reale puoi impostare varie visualizzazioni, tra cui serie temporali, valore della query, elenco superiore, tabella, mappa termica, mappa ad albero, grafico a torta, mappa host, flusso di registro, elenco, valore di avviso, mappa di servizio e altro ancora . Correla automaticamente i dati e visualizza comportamenti insoliti.

Il cuore di Datadog è proprietario, ma l'agente Datadog e tutti gli altri programmi che girano sulle tue macchine e sui tuoi cloud sono open-source.

Il monitoraggio è disponibile tramite le richieste di traccia, che alimentano le sue visualizzazioni grafiche e gli avvisi. Il programma raccoglie dati relativi a servizi, applicazioni e piattaforme tramite dati di registro dettagliati.

Il programma è un ecosistema di monitoraggio. Oltre ai tuoi container, monitora praticamente qualsiasi cosa. Lo fa in parte supportando la maggior parte dei programmi e protocolli di telemetria come StatsD, OpenMetrics e OpenTelemetry.

Sebbene sia venduto principalmente come software-as-a-service (SaaS), può anche essere distribuito in locale.

Ricerca elastica e Kibana

Elasticsearch è un motore di ricerca open source basato su Java derivato dalla libreria Apache Lucene. Fornisce un motore di ricerca full-text distribuito, multi-tenant con un'interfaccia Web HTTP e documenti JSON privi di schemi. È il cuore dello stack ELK.

Il suo programma partner, Kibana, è un'interfaccia utente aperta e gratuita per visualizzare i dati di Elasticsearch e navigare nello stack ELK. Puoi tenere traccia dei carichi di query per vedere come le richieste fluiscono attraverso le tue app con esso. Kibana viene fornito con i soliti classici della dashboard dell'interfaccia utente:istogrammi, grafici a linee, grafici a torta, sunburst e altro ancora. E, naturalmente, puoi cercare in tutti i tuoi documenti.

Ai fini del monitoraggio del contenitore, utilizzi Filebeat e Metricbeat per acquisire automaticamente i dati del contenitore. Filebeat trova automaticamente i contenitori e archivia i loro log in Elasticsearch. Distribuisci Metricbeat automaticamente nei tuoi container. Una volta lì, raccoglie le statistiche sull'utilizzo della CPU a livello di sistema, sulla memoria, sul file system, sull'IO del disco e sull'IO di rete. I suoi moduli, scritti in Go, possono anche tenere d'occhio i programmi all'interno dei container come Apache, NGINX, MongoDB, MySQL, PostgreSQL e Prometheus. È quindi possibile accedere a tutti questi dati utilizzando Kibana.

È molto flessibile. Devi dedicare molto tempo all'apprendimento di come configurarlo e utilizzarlo, ma ne vale la pena.

Prometheus e Grafana

Come Elasticsearch e Kibana, Prometheus e Grafana sono programmi open source che puoi utilizzare per creare i tuoi sistemi di monitoraggio. È complesso, ma ne vale la pena.

Prometheus memorizza i dati come serie temporali. Nelle serie temporali, i dati vengono conservati come flussi di valori con timestamp per la stessa metrica e lo stesso insieme di dimensioni etichettate.

Prometheus, un progetto CNCF, estrae le metriche direttamente dai container o utilizzando un gateway push. I campioni raschiati vengono archiviati localmente e ai suoi dati vengono applicate regole per aggregare e generare nuove serie temporali o generare avvisi definiti dall'utente.

L'obiettivo principale di Prometheus è l'affidabilità piuttosto che l'accuratezza. Il programma fa questo rendendo ogni server Prometheus autonomo con un archivio di database di serie temporali locale per evitare di fare affidamento su qualsiasi servizio remoto. Questo design rende Prometheus uno strumento ideale su cui fare affidamento per identificare rapidamente i problemi e ottenere feedback in tempo reale. Pertanto, viene solitamente utilizzato in sistemi altamente dinamici come i microservizi basati su container in esecuzione su un cloud.

Prometheus ha la sua dashboard web, oppure puoi estrarne i dati usando la sua API. Grafana è usata come interfaccia predefinita.

Sysdig

Sysdig è una piattaforma di monitoraggio cloud commerciale che lavora di pari passo con Prometheus. Ciò ti consente di accedere ai dati di serie temporali senza dover creare il tuo sistema di monitoraggio Prometheus.

Sysdig tiene traccia dei dati Docker direttamente dai metadati del contenitore per consentire la sicurezza e il monitoraggio. Docker consiglia Sysdig come soluzione di monitoraggio per applicazioni containerizzate.

Sysdig integra anche i programmi di monitoraggio di Linux in un'unica interfaccia coerente. Il programma lo fa a livello di sistema operativo integrandosi con il kernel Linux. Cattura le chiamate di sistema e altri eventi del sistema operativo.

La sua combinazione unica di Prometheus e informazioni dettagliate sul sistema operativo di basso livello lo rende un potente strumento di monitoraggio.

Conclusione

Il monitoraggio dei container è un must, non una gentilezza. Senza monitoraggio, trasportare container è come guidare su un'autostrada buia e tortuosa senza fari.

Il programma di monitoraggio scelto dipende dal caso d'uso, dal budget e dalle risorse IT disponibili nell'organizzazione. Puoi creare i tuoi sistemi di monitoraggio dei container utilizzando i numerosi programmi open source disponibili o utilizzare un pacchetto commerciale. Indipendentemente dal programma di monitoraggio che decidi di utilizzare, è un componente essenziale per l'integrità e la stabilità delle tue applicazioni Web containerizzate.


Docker
  1. Come esportare e importare contenitori Docker

  2. differenza tra podman e docker.

  3. Che cos'è Docker (e contenitori Linux?)

  4. Come funzionano i contenitori cloud e i loro vantaggi

  5. Come condividere i dati tra contenitori Docker

Come utilizzare Docker Cp per copiare file tra host e contenitori

Come distribuire e gestire un contenitore Docker MongoDB

Come eseguire i contenitori Docker

Come rinominare o rinominare i contenitori Docker

ctop – Interfaccia simile a quella superiore per il monitoraggio dei contenitori Docker

Sviluppo su Docker con i nuovi e migliorati Visual Studio Container Tools (e WSL2)