1. 开启docker metrics API特性

注意使用的docker版本必须为1.13

# 编辑docker daemon启动选项
vim /etc/docker/daemon.json

该文件修改内容如下:

{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
   "insecure-registries":["10.45.10.31:5000"],
   "experimental": true,
"metrics-addr": "0.0.0.0:4999"
}

解释:

  1. 第一行指明了第三方docker hub mirror,加速访问。这里采用中国科学技术大学mirror
  2. 第二行指明注册的私人registry
  3. 第三第指明开启试验性特性
  4. 第四行指明docker metrics的访问端口

2 创建服务(会自动下载镜像)

在swarm manager node上创建如下服务:

#1. 设定overlay网络,用于跨节点的容器网络访问
docker \
  network create --driver overlay monitoring

#2. cadvisor服务,用于提供容器的资源使用率、性能等监控指标
docker \
  service create --name cadvisor \
  --mode global \
  --network monitoring \
  --label com.docker.stack.namespace=monitoring \  
  --container-label com.docker.stack.namespace=monitoring \
  --mount type=bind,src=/,dst=/rootfs:ro \
  --mount type=bind,src=/var/run,dst=/var/run:rw \
  --mount type=bind,src=/sys,dst=/sys:ro \
  --mount type=bind,src=/var/lib/docker/,dst=/var/lib/docker:ro \
  google/cadvisor:v0.24.1

#3. node-exporter服务,暴露节点相关的内容给prometheus,用于监控
docker \
  service create --name node-exporter \
  --mode global \
  --network monitoring \
  --label com.docker.stack.namespace=monitoring \
 --container-label com.docker.stack.namespace=monitoring \
  --mount type=bind,source=/proc,target=/host/proc \
  --mount type=bind,source=/sys,target=/host/sys \
  --mount type=bind,source=/,target=/rootfs \
  --mount type=bind,source=/etc/hostname,target=/etc/host_hostname \
  -e HOST_HOSTNAME=/etc/host_hostname \
  basi/node-exporter \
  -collector.procfs /host/proc \
  -collector.sysfs /host/sys \
  -collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)" \
  --collector.textfile.directory /etc/node-exporter/ \
  --collectors.enabled="conntrack,diskstats,entropy,filefd,filesystem,loadavg,mdadm,meminfo,netdev,netstat,stat,textfile,time,vmstat,ipvs"

#4. docker-exporter服务,用于将docker metrics API得到的监控指标暴露给prometheus。注意下面的172.18.0.1是桥接容器的网关地址。默认一般都是这个。
docker \
  service create \
  --mode global \
  --name docker-exporter \
  --network monitoring \
  --publish 4999 \
  -e IN=172.18.0.1:4999 \
  basi/socat:v0.1.0


#5. alertmanager用于对监控指标进行告警
docker \
  service create --name alertmanager \
  --network monitoring \
  --label com.docker.stack.namespace=monitoring \
  --container-label com.docker.stack.namespace=monitoring \
  --publish 9093:9093 \
  -e "SLACK_API=https://hooks.slack.com/services/TOKEN-HERE" \
  -e "LOGSTASH_URL=http://logstash:8080/" \
  basi/alertmanager \
    -config.file=/etc/alertmanager/config.yml

#6. prometheus是监控系统,内含时序数据库,能接入各种metrics,用图形展示。
docker \
  service create \
  --name prometheus \
  --network monitoring \
  --label com.docker.stack.namespace=monitoring \
  --container-label com.docker.stack.namespace=monitoring \
  --publish 9090:9090 \
  basi/prometheus-swarm \
    -config.file=/etc/prometheus/prometheus.yml \
    -storage.local.path=/prometheus \
    -web.console.libraries=/etc/prometheus/console_libraries \
    -web.console.templates=/etc/prometheus/consoles \
    -alertmanager.url=http://alertmanager:9093

#7. prometheus的图形展示比较渣,用grafana整合下,更加美观
docker \
  service create \
  --name grafana \
  --network monitoring \
  --label com.docker.stack.namespace=monitoring \
  --container-label com.docker.stack.namespace=monitoring \
  --publish 3000:3000 \
  -e "GF_SERVER_ROOT_URL=http://grafana.${CLUSTER_DOMAIN}" \
  -e "GF_SECURITY_ADMIN_PASSWORD=yourPassword" \
  -e "PROMETHEUS_ENDPOINT=http://prometheus:9090" \
  -e "ELASTICSEARCH_ENDPOINT=$ES_ADDRESS" \
  -e "ELASTICSEARCH_USER=$ES_USERNAME" \
  -e "ELASTICSEARCH_PASSWORD=$ES_PASSWORD" \
  basi/grafana

我这里五台机器,创建成功在swarm manager查看服务如下:

3. 查看prometheus

发现需要监控的目标都已经被prometheus管理即可:

点击graph按照如下操作

4. grafana

默认的管理员账号为admin,密码由GF_SECURITY_ADMIN_PASSWORD环境变量指定。

4.1 增加promethus数据源


填写具体内容,注意这里url不要填写IP,填写容器的名字。毕竟IP是可以变动的,灵活性差。


好了之后点击上面的Dashborads,并且点击蓝色的import,就导入了promethus的仪表盘了。仪表盘的内容是prometheus程序本身的一些监控指标。

4.2 增加docker metrics仪表盘

非常幸运的,basi/prometheus-swarm的作者提供了grafana的配置模板,直接导入即可用。下载地址:Docker Engine Metrics

在grafana里面选择导入新的仪表盘:


直接导入刚才下载的文件即可:


接下来就看到prometheus的一些监控指标就在grafana里面呈现了。自己可以增加其他ROW。

参考资料:

  1. https://medium.com/@basilio.vera/docker-swarm-metrics-in-prometheus-e02a6a5745a#.r7rehktdu