前言
cAdvisor
cAdvisor (Container Advisor) 让容器的使用者了解的他们正在使用的容器的资源使用情况和性能指标。它是一个处于运行状态的守护进程,用于收集、聚合、处理和导出有关正在运行的容器的信息。具体来说,它为每个容器保存资源隔离参数、历史资源使用数据以及统计图。
Prometheus
Prometheus 是一个云原生计算基金会的项目,是一个系统并提供系统监控服务。它以给定的时间间隔从配置的目标中收集指标,聚合并展示数据处理的结果,当出现查到指定条件时可以触发警报。
Grafana
Grafana 是一个开源的、跨平台数据可视化 Web UI。用户配置连接的数据源后,Grafana 可以在浏览器中显示统计图表和警告。
环境搭建
部署说明
笔者使用两台阿里云 ECS 主机,它们均处于同一个 VPC 下,系统均为 Ubuntu 20.04。
主机 | 内网 IP | 运行组件 |
A | 10.0.0.77 | cAdvisor |
B | 10.0.0.91 | Prometheus Server、Grafana |
部署 cAdvisor
容器化部署
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
--privileged \
--device=/dev/kmsg \
gcr.io/cadvisor/cadvisor:latest
部署完成后访问 http://[主机A公网IP]:8080/
即可查看 cAdvisor 提供的时尚经典 Web UI
部署 Prometheus
创建 /etc/prometheus/prometheus.yml
配置文件,注意将 job_name 为 container 的 targets 改为对应的IP和端口号,笔者这里以 10.0.0.77:8080
为例。
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
evaluation_interval: 15s
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'codelab-monitor'
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
- job_name: 'container'
static_configs:
- targets: ['10.0.0.77:8080']
容器部署
docker run -d -p 9090:9090 \
-v /etc/prometheus:/etc/prometheus \
--name prometheus \
prom/prometheus
部署完成后,访问 http://[主机B公网IP]:9090
即可进入 Prometheus 的 Web UI
点击菜单 Status => Targets,可以看到所有监控目标的 Exporters
此时所有监控目标的状态都是 UP,表明 Prometheus Server 可以正常获取到监控数据
部署 Grafana
笔者这里使用开源版本的 Grafana(镜像名为 grafana/grafana-oss)
# create a persistent volume for your data in /var/lib/grafana (database and plugins)
docker volume create grafana-storage
# start grafana
docker run -d -p 3000:3000 --name=grafana -v grafana-storage:/var/lib/grafana --add-host=host.docker.internal:host-gateway grafana/grafana-oss
注意,在 Linux 系统下需要通过在启动容器前添加--add-host=host.docker.internal:host-gateway
参数,使得容器内部可以访问到宿主机的端口。
首次登录的账号密码为 admin/admin,登录成功后会要求重设密码。
点击 「Add your first data source」添加数据源。
选择 Prometheus 作为数据库,注意 URL 填写为 http://host.docker.internal:9090
,如果使用 localhost 的话是无法访问到 Prometheus 容器的,需要用 host.docker.internal 作为 DNS 名称解析到宿主机的网络上,使得 Grafana 的容器可以访问宿主机的网络,进而访问 Prometheus 容器。
点击「Save & test」保存配置文件
提示 Data source is working 表明网络通信正常。
回到 Dashboard,点击 Create your first dashboard。
点击 Sidebar 的 +,选择 Import 导入一个仪表盘。
笔者使用的是 Docker and system monitoring 的模板,https://grafana.com/grafana/dashboards/11600,ID 为 11600,点击 Import,即可使用该仪表盘。也可以在 https://grafana.com/grafana/dashboards 中搜索 docker 相关的 Dashboard。
参考资料
- 容器监控工具(2)Prometheus + cAdvisor + grafana. https://developer.aliyun.com/article/725867
- Run Grafana Docker image. https://grafana.com/docs/grafana/next/setup-grafana/installation/docker/
- Configure a Grafana Docker image. https://grafana.com/docs/grafana/latest/setup-grafana/configure-docker/
文章最后修订于 2023年8月21日
评论 (0)