Monitorování je jednou ze základních činností ve světě DevOps. a ani vás nemusím přesvědčovat o tom, proč je sledování dobrý nápad. Už to víte, že?
Můžete se samozřejmě držet nástrojů příkazového řádku a monitorovat váš server a kontejnery dockerů, které na něm běží, přístup založený na grafickém uživatelském rozhraní přidává pohodlí analýzy metrik výkonu s intuitivním zážitkem pro sledování více parametrů najednou na obrazovce. je jednodušší sdílet monitorovací panel s méně technickými lidmi.
V tomto tutoriálu vám ukážu, jak můžete nastavit monitorování dokovacích kontejnerů pomocí dockprom a prezentovat jej ve vizuálně přitažlivé podobě díky Grafaně.
Monitorování hostitele dockeru a kontejnerů pomocí Dockprom
Dockprom je jeden takový zásobník, který provozuje různé monitorovací nástroje jako kolektivní sadu nástrojů pro potřeby monitorování vašeho serveru.
stefanprodan/dockpromDocker monitorování hostitelů a kontejnerů pomocí Prometheus, Grafana, cAdvisor, NodeExporter a AlertManager - stefanprodan/dockprom GitHubstefanprodanMějte na paměti, že zde uvedený příklad bude založen na konfiguraci reverzního proxy serveru Nginx. Oficiální konfigurace Dockpromu je založena na Caddy.
V Linux Handbook a High On Cloud používáme Nginx ve standardní praxi. Takže jsem přepracoval konfiguraci Dockprom tak, aby byla založena na Nginx místo Caddy. Výsledek vypadá velmi zjednodušeně jako naše předchozí nasazení Nginx.
Základy nastavení Dockprom
Dockprom využívá následující nástroje pro poskytování řešení monitorování vašeho hostitele a kontejnerů Docker.
Grafana
Grafana vám umožňuje dotazovat se, vizualizovat a upozorňovat na metriky a protokoly bez ohledu na to, kde jsou uloženy. Toto bude primární a jediný webový frontend, jehož prostřednictvím budete využívat všechny zbývající backendové aplikace sdílené ve zbývajících sekcích nástrojů.
Proto zde musíte přidat oblíbené proměnné prostředí založené na Nginx, které jste po celou dobu používali pro přístup k našim aplikacím odkudkoli na webu:
environment:
- VIRTUAL_HOST=dockprom.domain.com
- LETSENCRYPT_HOST=dockprom.domain.com
Ujistěte se, že jste toto změnili podle vaší domény nebo subdomény.
Prometheus
Prometheus je sada nástrojů pro monitorování a varování systémů s otevřeným zdrojovým kódem, kterou používají tisíce lidí po celém světě.
Pushgateway
Pushgateway je zprostředkovatelská služba, která vám umožňuje posílat metriky z úloh, které nelze odstranit. Možná si budete chtít přečíst toto, abyste opravdu věděli, zda to skutečně potřebujete. Je to proto, že existují omezené případy, kdy by to bylo nutné.
Správce výstrah
Správce výstrah zpracovává výstrahy zasílané klientskými aplikacemi, jako je například server Prometheus. Postará se o jejich deduplikaci, seskupení a směrování do správné integrace přijímače, jako je e-mail, PagerDuty nebo OpsGenie. Postará se také o ztišení a potlačení výstrah.
cAdvisor
cAdvisor je nástroj s otevřeným zdrojovým kódem od společnosti Google, který uživatelům kontejnerů poskytuje informace o využití zdrojů a výkonnostních charakteristikách jejich běžících kontejnerů.
V této konkrétní konfiguraci jsem čelil problému s načítáním dvou metrik na základě dvou příslušných chyb po nasazení oficiální konfigurace cAdvisor uvedené v Dockprom Stack:
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
Vyhledal jsem oficiální úložiště cAdvisor, kde byla poskytnuta řešení. První fungoval, ale druhý nebyl úplně to, co jsem hledal, protože toto řešení bylo založeno na docker run
založený příkaz ke spuštění.
Byla potřeba oprava Docker Compose. Nejprve jsem zkusil připojit /dev/kmsg
ale to by tu práci nesplnilo. Konečně na základě docker run
Na základě řešení jsem zjistil, že na podobných řádcích poskytuje Docker Compose samostatný příznak nazvaný devices
který lze použít k připojení /dev/kmsg
jako zařízení. Můžete si o tom přečíst zde.
Oprava prvního problému tedy spočívala v přidání následujícího do řádků v sekci svazků:
volumes:
---
---
- /etc/machine-id:/etc/machine-id:ro
- /var/lib/dbus/machine-id:/var/lib/dbus/machine-id:ro
Druhý je právě probrán:
devices:
- /dev/kmsg:/dev/kmsg
Všimněte si, jak jsou tyto metriky důležité pro připojení z hostitele, protože je to hostitel, kterého chcete monitorovat prostřednictvím Dockeru.
Exportér uzlů
Prometheus Node Exporter odhaluje širokou škálu metrik souvisejících s hardwarem a jádrem. Je to podobné tomu, jak jsou metriky vystaveny v cAdvisor.
Po spojení všech výše uvedených prvků bude váš kompletní soubor Docker Compose vypadat takto:
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"
Pokud jste zvědaví, můžete zkontrolovat a porovnat výše uvedený soubor s oficiálním návrhem Dockpromu.
Lepší doba provozu – bezplatná stránka pro monitorování a stav webu Radikálně lepší platforma pro monitorování dostupnosti s vestavěnými upozorněními na telefonní hovory, stavovými stránkami a správou incidentů. Zdarma plán v ceně! Jipi z Metrics WatchNastavení monitorování hostitele dockeru a kontejneru
Nyní, když jsem se podělil o to, co Dockprom Stack implementuje, s oficiálními definicemi nástrojů pro monitorování serverů, dovolte mi nyní uvést podrobný postup nasazení tohoto návrhu Dockpromu založeného na Nginx spolu se základními opravami cAdvisor.
Pro testovací účely můžete použít 1 GB nanode na Linode k vyzkoušení konfigurace, ale pro produkční účely je vyžadováno, aby měl server alespoň 4 GB. Je to hlavně kvůli Prometheovi.
Linode | Nezávislý otevřený cloud pro vývojáře Naším posláním je urychlit inovace tím, že bude cloud computing jednoduchý, cenově dostupný a dostupný pro všechny. Linode Předpokládám, že znáte koncept Docker a Docker Compose. Všimněte si také, že můžete sledovat pouze kontejnery Docker běžící na stejném serveru.Krok 1:Načtěte oficiální konfiguraci Dockprom
Otevřete terminál na serveru a zadejte následující příkaz:
git clone https://github.com/stefanprodan/dockprom
cd dockprom
Krok 2:Revize souboru docker-compose.yml
Jak jsem před chvílí diskutoval a sdílel soubor docker-compose.yml založený na Nginx v sekci Node Exporter. Upravte soubor a upravte jej.
Krok 3:Spusťte Config!
Za předpokladu, že se nacházíte ve stejném adresáři dockprom, spusťte příkaz Docker Compose pro spuštění zásobníku Dockprom:
docker-compose up -d
Krok 4:Přístup k Dockprom Stack přes Grafana
Pamatujete si, že jste svou přístupovou adresu URL nastavili dodatečně v konfiguraci Grafana pro webový přístup? Nyní jej můžete použít k získání úplného přístupu do zásobníku.
Uživatelské jméno i heslo bylo nastaveno na admin . Důrazně se doporučuje změnit jej na silné heslo. Typický webový přihlašovací panel vypadá takto:
Počkejte, až se rozhraní načte:
Bonusový tip
Poté, co se přihlásíte do Grafany, může být rychlá navigace ke statistikám metrik zpočátku ohromující, a proto sdílím přímý odkaz na panel řídicího panelu pro okamžitý přístup:https://dockprom.domain.com/dashboards
Jak vidíte, stačí přidat /dashboards
na vlastní doménu nebo subdoménu. Na této stránce můžete sledovat metriky pro:
- Docker Containers
- Hostitelský systém
- Prometheus
- Nginx
Vezměte prosím na vědomí, že Nginx (4. a poslední ve výše uvedeném seznamu) bude zobrazovat prázdné statistiky, pokud není přímo nainstalován na hostiteli. To by nemělo být zaměňováno s Jwilder Nginx, protože běží na Dockeru. V takovém případě byste museli speciálně sledovat kontejner Nginx.
Zde je obrazovka Grafana pro monitorování hostitele Docker:
Snímek obrazovky monitorování kontejneru jsem již sdílel na začátku tohoto článku:
Doufám, že vám tento stručný návod pomůže s nastavením tohoto vynalézavého zásobníku na vašem serveru. Opět je to užitečné pro jeden server. Pokud máte kontejnery na více serverech, můžete použít Swarmprom od stejného vývojáře.
stefanprodan/swarmprom Instrumentace Docker Swarm s Prometheus, Grafana, cAdvisor, Node Exporter a Alert Manager - stefanprodan/swarmprom GitHubstefanprodanPokud máte nějaké připomínky nebo návrhy, neváhejte se podělit o své názory v sekci níže.