Prometheus监控Docker Swarm集群(一)
cAdvisor简介
为了解决容器的监控问题,Google开发了一款容器监控工具cAdvisor(Container Advisor),它为容器用户提供了对其运行容器的资源使用和性能特征的直观展示。 它是一个运行守护程序,用于收集,聚合,处理和导出有关正在运行的容器的信息。
cAdvisor可以对节点机器上的资源及容器进行实时监控和性能数据采集,包括CPU、内存、网络及文件系统使用情况。
cAdvisor使用go语言开发,如果想了解更多请访问其官方github
安装cAdvisor
cAdvisor
有两种方法来运行,一种是以二进制可执行文件安装运行,配置 systemd
来管理,另一种是以 Docker
容器运行,使用docker-compose来管理,在这里我们只讲docker方式部署与管理方法。
我们可以通过以下命令来在实验环境的虚拟机运行cAdvisor容器:
Docker方式启动
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=18080:18080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest
以上的启动方式对于管理来说稍显繁琐,为了方便管理,我们使用docker-compose来管理
安装docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
mkdir -p /data/docker-monitor/
docker-compose文件
cat > docker-compose.yml <<EOF
version: '3.2'
volumes:
prometheus_data: {}
grafana_data: {}
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- 9090:9090
command:
- --config.file=/etc/prometheus/prometheus.yml
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
depends_on:
- cadvisor
cadvisor:
image: google/cadvisor:latest
container_name: cadvisor
ports:
- 8080:8080
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
depends_on:
- redis
redis:
image: redis:latest
container_name: redis
ports:
- 6379:6379
EOF
# Prometheus.yml文件
cat > prometheus.yml <<EOF
global:
scrape_interval: 15s # 每15秒抓取一次数据,默认值为1分钟
evaluation_interval: 15s # 每15秒检测一次可用性,默认值为1分钟
scrape_timeout: 60s # 抓取的超时时间
# Alertmanager
alerting:
alertmanagers:
- static_configs:
#- targets: ['127.0.0.1:9093']
# 抓取配置配置
scrape_configs:
- job_name: 'cadvisor'
scrape_interval: 10s
static_configs:
- targets: ['localhost:8080']
labels:
instance: 'cadvisor-server'
alias: 'cadvisor'
EOF
# 启动
docker-compose up -d
docker会自动去pull images,需要等一会,等待启动完成后,我们直接可以访问 http://192.168.1.220:8080
以上是我们为了大家能了解docker是如何监控实现的方法的,现在我们进入docker监控具体环节,GitHub上已经有了已经配置好的开源,直接拿来用即可。
git clone https://github.com/stefanprodan/dockprom.git
ADMIN_USER=admin ADMIN_PASSWORD=admin docker-compose up -d
先决条件:
- Docker Engine >= 1.13
- Docker Compose >= 1.11
Containers:
- Prometheus (metrics database) http://
:9090 - Prometheus-Pushgateway (push acceptor for ephemeral and batch jobs) http://
:9091 - AlertManager (alerts management) http://
:9093 - Grafana (visualize metrics) http://
:3000 - NodeExporter (host metrics collector)
- cAdvisor (containers metrics collector)
- Caddy (reverse proxy and basic auth provider for prometheus and alertmanager)
启动完成以后,我们直接访问http://192.168.1.220:3000端口,使用初始化的账号密码,admin:admin进入,此时会提示你修改密码,修改成你需要的密码即可。
redis:
image: redis:latest
container_name: redis
restart: unless-stopped
expose:
- 6379
networks:
- monitor-net
labels:
org.label-schema.group: "monitoring"
# 重启
docker-compose up -d
这时访问CAdvisor,会发现container中已经有了redis这个容器了。