摘要:原文地址介紹如何使用的機制,自動發現并抓取網絡中的容器所提供的指標。我們需要一種動態發現容器的方法。使用的機制,半自動的發現容器。文章最開始說到的半自動就是這個意思,我們得事先知道記錄有哪些,然后讓去發現這些記錄背后對應的容器有哪些。
原文地址
介紹如何使用Prometheus的dns service discovery機制,自動發現并抓取Docker swarm overlay網絡中的容器所提供的指標。
使用docker service create/docker stack deploy能夠很方便管理多個docker host,并且對應用做擴縮容。那么我們如何抓取這些動態創建的容器應用所提供的指標呢?
在《使用Prometheus+Grafana監控JVM》一文里我們使用了static_config靜態配置指標抓取目標,這顯然在docker swarm環境里是不合適的。我們需要一種動態發現容器的方法。
解決思路如下:
使用《一種生產環境Docker Overlay Network的配置方案》提到的方法配置overlay網絡,并且把docker service、stack、standalone container都掛到這個overlay網絡里。
把Prometheus也掛到這個overlay網絡里。
使用Prometheus的DNS service discovery機制,半自動的發現容器。
本文所提到的腳本可以在這里下載
下面構建一個實驗環境以說明方法。
第一步:構建overlay network根據《一種生產環境Docker Overlay Network的配置方案》里提到的方法,創建Docker swarm,和一個overlay網絡,名字叫做test-overlay:
docker network create -d overlay --attachable test-overlay第二步:啟動容器
為了方便起見,使用prometheus-mock-data來模擬一個提供指標的應用,這樣就能夠避免繁瑣的jmx-exporter。
1) 新建一個目錄,名字叫做docker-swarm-demo
2) 新建一個文件scrape-data.txt,這個文件就是我們要提供的假指標,內容如下:
# HELP x mock metric # TYPE x gauge x 1 --- # HELP x mock metric # TYPE x gauge x 2 --- # HELP x mock metric # TYPE x gauge x 3 --- # HELP x mock metric # TYPE x gauge x 4
3) 為了演示docker service和standalone container都能被采集到,會啟動這兩種形式的容器:
4) 使用docker service create啟動一個service,replicas=3(注意--name參數):
docker service create --name mock --replicas 3 --network test-overlay --limit-memory 96M --mount type=bind,src=$(pwd)/scrape-data.txt,dst=/home/java-app/etc/scrape-data.txt chanjarster/prometheus-mock-data:latest
4) 使用docker run啟動一個standalone container(注意--name參數):
docker run -d -v $(pwd)/scrape-data.txt:/home/java-app/etc/scrape-data.txt --network test-overlay --name standalone-mock chanjarster/prometheus-mock-data:latest第三步:啟動Prometheus
1) 在之前新建目錄docker-swarm-demo里創建文件prom-config.yml,內容如下:
scrape_configs: - job_name: "swarm-service" scrape_interval: 30s dns_sd_configs: - names: - tasks.mock - standalone-mock type: A port: 8080 relabel_configs: - source_labels: ["__meta_dns_name"] target_label: "service"
注意到上面的兩個關鍵配置:
設定了兩個DNS A記錄,tasks.mock和standalone-mock。
tasks.mock是Docker自動為docker service mock創建的,而standalone-mock就是容器名。文章最開始說到的半自動就是這個意思,我們得事先知道DNS A記錄有哪些,然后讓Prometheus去發現這些DNS A記錄背后對應的容器有哪些。
把__meta_dns_name的值設置到指標的service 這個label里。
2) 啟動Prometheus:
docker run -d --name=prometheus --network test-overlay -p 9090:9090 -v $(pwd):/prometheus-config -v $(pwd)/prom-data:/prometheus prom/prometheus --config.file=/prometheus-config/prom-config.yml
3) 訪問 http://localhost:9090 看看Prometheus是否啟動成功,在輸入框里輸入x然后執行,應該可以看到如下圖的結果:
其中3個instance是屬于tasks.mock的,還有一個則是standalone container(如果沒有看到4個instance,那么等一會兒再試)。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/28048.html
摘要:配置網絡參照生產環境配置中的和子網章節。特別注意觀察和的子網是否與已有網絡沖突如果有沖突則參考網絡的中的方法修改子網。部署使用的是的監控方案。創建應用網絡創建你也可以改成自己的名字參考網絡的檢查子網與是否配置正確。 原文 大綱 本文只是一種實際部署方案的例子,涉及到的技術有(除Docker/Docker Swarm外): Docker overlay network Fluentd...
摘要:后續將其他節點加入集群都會用到這個值將節點加入集群查看節點信息相關命令創建服務更新服務刪除服務減少服務實例增加服務實例查看所有服務查看服務的容器狀態查看服務的詳細信息。前言本篇是Docker第十三篇,Docker的使用至此就介紹完成,接下來繼續Kubernetes。Docker系列文章:為什么要學習DockerDocker基本概念Docker鏡像基本原理Docker容器數據卷Dockerfi...
摘要:介紹的集群的自動發現有兩種方式與本文使用的是的方式準備安裝以上版本初始化集群創建一個名為的網絡開放端口初始化集群部份可看我之前的博客使用搭建多主機集群創建網絡查看當前的網絡也是一個網絡可以跨主機通信本教程會創建一個新的創建網絡 介紹 docker 1.12 的swarm 集群的自動發現有兩種方式, virtual IP address (VIP) 與 DNS round-robin, ...
摘要:由于沒有了中心化的負載均衡器,集群不會因某臺機器異常而導致整個服務對外不可用,很好的避免了單點問題,同時也帶了可擴展性。 Mesos/Marathon 折騰久了,我們一直希望有機會深入到 Swarm 內部一探究竟。 另外, Mesos 這一套東西雖然是久經企業級考驗的, 但是安裝、部署和使用相對復雜,上手有門檻。同時,在今年的 DockerCon 上,內置了Swarm 功能的 Dock...
摘要:本文將以多主機網絡環境為基礎,探討如何利用內置編排工具模式對各主機上的容器加以管理。在本文中,我們將立足于臺主機與在負載均衡之上部署應用程序容器,同時將其接入一套覆蓋網絡。管理節點會利用負載均衡以將服務公布至集群之外。 本文將以多主機網絡環境為基礎,探討如何利用內置編排工具 Docker Swarm模式對各主機上的容器加以管理。 Docker Engine – Swarm模式 在...
閱讀 2074·2021-10-11 10:59
閱讀 933·2021-09-23 11:21
閱讀 3560·2021-09-06 15:02
閱讀 1619·2021-08-19 10:25
閱讀 3374·2021-07-30 11:59
閱讀 2370·2019-08-30 11:27
閱讀 2583·2019-08-30 11:20
閱讀 2976·2019-08-29 13:15