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

Monitoraggio dei container Docker con Grafana utilizzando Dockprom

Il monitoraggio è una delle attività essenziali nel mondo DevOps. e non ho nemmeno bisogno di convincerti del motivo per cui il monitoraggio è una buona idea. Lo sai già, vero?

Ovviamente puoi attenerti agli strumenti della riga di comando per monitorare il tuo server e i contenitori docker in esecuzione su di esso, un approccio basato su GUI aggiunge la comodità di analizzare le metriche delle prestazioni con un'esperienza intuitiva per osservare più parametri contemporaneamente sullo schermo Rende anche è più facile condividere la dashboard di monitoraggio con persone meno tecniche.

In questo tutorial, ti mostrerò come impostare il monitoraggio per i container docker con dockprom e presentarlo in una forma visivamente accattivante grazie a Grafana.

Monitoring-docker-host e container con Dockprom

Dockprom è uno di questi stack che esegue diversi strumenti di monitoraggio come set di strumenti collettivi per le tue esigenze di monitoraggio del server.

stefanprodan/dockprom Monitoraggio host e container Docker con Prometheus, Grafana, cAdvisor, NodeExporter e AlertManager - stefanprodan/dockprom GitHubstefanprodan

Tieni presente che l'esempio qui sarà basato sulla configurazione del proxy inverso di Nginx. La configurazione ufficiale della Dockprom è basata su Caddy.

In Linux Handbook e High On Cloud, utilizziamo Nginx nella pratica standard. Quindi, ho riprogettato la configurazione Dockprom in modo che fosse basata su Nginx anziché su Caddy. Il risultato sembra molto semplicistico come le nostre precedenti implementazioni Nginx.

Indispensabili per la configurazione di Dockprom

Dockprom utilizza i seguenti strumenti per fornire una soluzione di monitoraggio per il tuo host Docker e i tuoi container.

Grafa

Grafana ti consente di interrogare, visualizzare e avvisare su metriche e registri, indipendentemente da dove sono archiviati. Questo sarà il principale e unico frontend web attraverso il quale utilizzerai tutte le restanti applicazioni di backend condivise nelle restanti sezioni degli strumenti.

Pertanto, è qui che devi aggiungere le popolari variabili di ambiente basate su Nginx che hai utilizzato per accedere alle nostre applicazioni da qualsiasi punto del Web:

environment:
  - VIRTUAL_HOST=dockprom.domain.com
  - LETSENCRYPT_HOST=dockprom.domain.com

Assicurati di modificarlo in base al tuo dominio o sottodominio.

Prometheus

Prometheus è un toolkit di monitoraggio e avviso di sistemi open source utilizzato da migliaia di persone in tutto il mondo.

Pushgateway

Il Pushgateway è un servizio intermediario che ti consente di trasferire le metriche da lavori che non possono essere eliminati. Potresti voler leggere questo per sapere davvero se ne hai davvero bisogno. Questo perché ci sono casi limitati in cui sarebbe necessario.

Gestione avvisi

Alertmanager gestisce gli avvisi inviati dalle applicazioni client come il server Prometheus. Si occupa di deduplicarli, raggrupparli e instradarli alla corretta integrazione del ricevitore come e-mail, PagerDuty o OpsGenie. Si occupa anche della tacitazione e dell'inibizione degli avvisi.

cAdvisor

cAdvisor è uno strumento open source di Google che fornisce agli utenti di container una comprensione dell'utilizzo delle risorse e delle caratteristiche prestazionali dei container in esecuzione.

In questa particolare configurazione, stavo affrontando un problema relativo al recupero di due metriche in base a due rispettivi errori dopo aver distribuito la configurazione ufficiale di cAdvisor indicata nello Stack Dockprom:

Failed to get system UUID: open /etc/machine-id: no such file or directory
Could not configure a source for OOM detection, disabling OOM events: open /dev/kmsg: no such file or directory

Ho cercato il repository ufficiale di cAdvisor in cui erano state fornite le soluzioni. Il primo funzionava ma il secondo non era proprio quello che stavo cercando, poiché questa soluzione era basata su un docker run comando di avvio basato.

Era necessaria una correzione di Docker Compose. Per prima cosa ho provato a montare /dev/kmsg ma non avrebbe funzionato. Infine, sulla base di docker run soluzione basata, ho scoperto che su righe simili, Docker Compose fornisce un flag separato chiamato devices che può essere utilizzato per montare /dev/kmsg come dispositivo. Puoi leggerlo qui.

Quindi, la soluzione per il primo problema è stata aggiungere quanto segue alle righe nella sezione dei volumi:

	volumes:
  	  ---
      ---
      - /etc/machine-id:/etc/machine-id:ro
      - /var/lib/dbus/machine-id:/var/lib/dbus/machine-id:ro

Il secondo è come appena discusso:

Dispositivi
    devices:
      - /dev/kmsg:/dev/kmsg

Nota come tali metriche sono importanti per il montaggio dall'host poiché è l'host che desideri monitorare tramite Docker.

Esportatore di nodi

Prometheus Node Exporter espone un'ampia varietà di parametri relativi all'hardware e al kernel. È simile al modo in cui le metriche vengono esposte in cAdvisor.

Sommando tutto quanto sopra, il tuo file Docker Compose completo sarà simile a questo:

version: '3.7'

networks:
  net:
    external: true

volumes:
    prometheus_data: {}
    grafana_data: {}

services:

  prometheus:
    image: prom/prometheus:v2.24.0
    container_name: prometheus
    volumes:
      - ./prometheus:/etc/prometheus
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'
      - '--storage.tsdb.retention.time=200h'
      - '--web.enable-lifecycle'
    restart: on-failure
    networks:
      - net
    labels:
      org.label-schema.group: "monitoring"

  alertmanager:
    image: prom/alertmanager:v0.21.0
    container_name: alertmanager
    volumes:
      - ./alertmanager:/etc/alertmanager
    command:
      - '--config.file=/etc/alertmanager/config.yml'
      - '--storage.path=/alertmanager'
    restart: on-failure
    networks:
      - net
    labels:
      org.label-schema.group: "monitoring"

  nodeexporter:
    image: prom/node-exporter:v1.0.1
    container_name: nodeexporter
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.rootfs=/rootfs'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
    restart: on-failure
    networks:
      - net
    labels:
      org.label-schema.group: "monitoring"

  cadvisor:
    image: gcr.io/cadvisor/cadvisor:v0.38.7
    container_name: cadvisor
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker:/var/lib/docker:ro
      - /etc/machine-id:/etc/machine-id:ro
      - /var/lib/dbus/machine-id:/var/lib/dbus/machine-id:ro
      #- /dev/kmsg:/dev/kmsg:rw
    #command: ["start", "--privileged"]
    restart: on-failure
    devices:
      - /dev/kmsg:/dev/kmsg
    networks:
      - net
    labels:
      org.label-schema.group: "monitoring"

  grafana:
    image: grafana/grafana:7.3.7
    container_name: grafana
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_USERS_ALLOW_SIGN_UP=false
    restart: on-failure
    networks:
      - net
    environment:
      - VIRTUAL_HOST=dockprom.domain.com
      - LETSENCRYPT_HOST=dockprom.domain.com

    labels:
      org.label-schema.group: "monitoring"

  pushgateway:
    image: prom/pushgateway:v1.3.1
    container_name: pushgateway
    restart: on-failure
    networks:
      - net
    labels:
      org.label-schema.group: "monitoring"

Se sei curioso, puoi controllare e confrontare il file sopra con il design ufficiale Dockprom.

Tempo di attività migliore - Pagina di stato e monitoraggio Web gratuitiPiattaforma di monitoraggio dei tempi di attività decisamente migliore con avvisi di chiamate telefoniche, pagine di stato e gestione degli incidenti integrati. Piano gratuito incluso! Jipi da Metrics Watch

Configurazione dell'host Docker e del monitoraggio del container

Ora, dal momento che ho condiviso ciò che Dockprom Stack implementa con le definizioni ufficiali degli strumenti di monitoraggio del server, vorrei ora elencare il processo passo passo per implementare questo design basato su Nginx di Dockprom insieme alle correzioni essenziali di cAdvisor.

A scopo di test, puoi utilizzare un nanode da 1 GB su Linode per provare la configurazione, ma per scopi di produzione, il server deve avere almeno 4 GB. Ciò è dovuto principalmente a Prometeo.

linode | The Independent Open Cloud for DevelopersLa nostra missione è accelerare l'innovazione rendendo il cloud computing semplice, conveniente e accessibile a tutti. Linode Presumo che tu abbia familiarità con il concetto di Docker e Docker Compose. Tieni inoltre presente che puoi monitorare solo i contenitori Docker in esecuzione sullo stesso server.

Passaggio 1:recupera la configurazione Dockprom ufficiale

Apri un terminale sul server e inserisci il seguente comando:

git clone https://github.com/stefanprodan/dockprom
cd dockprom

Passaggio 2:rivedi il file docker-compose.yml

Come ho discusso e condiviso il file docker-compose.yml basato su Nginx solo qualche tempo fa nella sezione Node Exporter. Modifica il file e rivedilo.

Fase 3:avvia la configurazione!

Supponendo che ti trovi nella stessa directory dockprom, esegui il comando Docker Compose per avviare Dockprom Stack:

docker-compose up -d

Fase 4:accedi allo stack Dockprom tramite Grafana

Ricordi che hai impostato il tuo URL di accesso anche all'interno della configurazione di Grafana per l'accesso al web? Ora puoi usarlo per ottenere l'accesso completo allo Stack.

Sia il nome utente che la password erano stati impostati su admin . Si consiglia vivamente di cambiarlo in una password complessa. Un tipico pannello di accesso Web è simile a:

Attendi un po' di tempo per il caricamento dell'interfaccia:

Suggerimento bonus

Dopo aver effettuato l'accesso a Grafana, la navigazione rapida alle statistiche delle metriche all'inizio può essere opprimente, motivo per cui condividerò il collegamento diretto al pannello della dashboard per l'accesso immediato:https://dockprom.domain.com/dashboards

Come puoi vedere, devi solo aggiungere /dashboards al tuo dominio o sottodominio. Da questa pagina puoi monitorare le metriche per:

  • Contenitori Docker
  • Sistema host
  • Prometeo
  • Nginx

Si noti che Nginx (4° e ultimo nell'elenco sopra) mostrerebbe statistiche vuote se non installato direttamente sull'host. Questo non deve essere confuso con Jwilder Nginx poiché è in esecuzione su Docker. Dovresti monitorare il container Nginx in modo specifico in questo caso.

Ecco la schermata Grafana per il monitoraggio dell'host Docker:

Avevo già condiviso lo screenshot del monitoraggio del contenitore all'inizio di questo articolo:

Spero che questo breve tutorial ti aiuti a configurare questo stack pieno di risorse sul tuo server. Ancora una volta, questo è utile per un singolo server. Se hai container su più server, puoi utilizzare Swarmprom dello stesso sviluppatore.

stefanprodan/swarmpromDocker Strumentazione Swarm con Prometheus, Grafana, cAdvisor, Node Exporter e Alert Manager - stefanprodan/swarmprom GitHubstefanprodan

Se hai commenti o suggerimenti, non esitare a condividere le tue opinioni nella sezione sottostante.


Docker
  1. Cos'è Docker? Scopri come utilizzare i contenitori - Spiegazione con esempi

  2. Configura Nextcloud con Redis usando Docker

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

  4. 3 strategie per implementazioni di produzione automatizzate con Docker

  5. Perché tutti usano Docker?

Come modificare il codice nei contenitori Docker con il codice di Visual Studio

Come centralizzare la gestione dei registri con Graylog utilizzando Docker

Come eseguire Jenkins in Docker usando Docker Compose con volumi

Come rimuovere i contenitori Docker

Utilizzo dei contenitori Docker dalla riga di comando

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