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 GitHubstefanprodanTieni 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 WatchConfigurazione 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 GitHubstefanprodanSe hai commenti o suggerimenti, non esitare a condividere le tue opinioni nella sezione sottostante.