摘要:原文地址介绍如何使用的机制,自动发现并抓取网络中的容器所提供的指标。我们需要一种动态发现容器的方法。使用的机制,半自动的发现容器。文章最开始说到的半自动就是这个意思,我们得事先知道记录有哪些,然后让去发现这些记录背后对应的容器有哪些。
原文地址
介绍如何使用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,那么等一会儿再试)。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/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模式 在...
阅读 2064·2021-10-11 10:59
阅读 923·2021-09-23 11:21
阅读 3539·2021-09-06 15:02
阅读 1609·2021-08-19 10:25
阅读 3363·2021-07-30 11:59
阅读 2360·2019-08-30 11:27
阅读 2572·2019-08-30 11:20
阅读 2962·2019-08-29 13:15