文章目录
组件 | 角色分工 | 主要功能 | 默认端口 |
---|---|---|---|
cAdvisor | 数据采集器 (Data Collector) | 负责收集 Docker 主机上所有运行容器的资源使用和性能指标(如 CPU、内存、网络、磁盘等),并暴露给 Prometheus 抓取。 | 8080 |
Prometheus | 时序数据库和监控核心 (Monitoring Core) | 定时抓取、存储 cAdvisor 暴露的指标数据,并提供强大的查询语言 PromQL 来分析和聚合数据。 | 9090 |
Grafana | 数据可视化平台 (Visualization Platform) | 从 Prometheus 查询数据,并通过丰富的图表和仪表盘进行直观展示,也支持设置报警规则。 | 3000 |
下面是它们的协作方式:
由于使用arm64架构本地部署,这里使用了 docker network 方便容器间通信,通过 docker network create dev-network
创建了dev-network网络
一、Docker运行 cAdvisor
1. cAdvisor 通常直接运行在宿主机上,以提供对主机上所有容器的监控能力。
```bash
docker run -d \
--name=cadvisor \
--network=dev-network \
--restart=always \
-p 1922:8080 \
-v /:/rootfs:ro \
-v /var/run:/var/run:ro \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
--device=/dev/kmsg \
--platform=linux/arm64/v8 \
--privileged \
gcr.io/cadvisor/cadvisor:v0.47.0
```
2. 参数解释:
- `--name=cadvisor`:容器名称
- `--network=dev-network`:网络名称
- `--restart=always`:重启策略
- `-p 1922:8080`:端口映射
- `-v /:/rootfs:ro`:数据卷挂载
- `-v /var/run:/var/run:ro`:数据卷挂载
- `-v /sys:/sys:ro`:数据卷挂载
- `-v /var/lib/docker/:/var/lib/docker:ro`:数据卷挂载
- `--device=/dev/kmsg`:设备挂载
- `--platform=linux/arm64/v8`:平台架构
- `--privileged`:特权模式
- `gcr.io/cadvisor/cadvisor:v0.47.0`:镜像名称
3. 验证
访问 http://<你的服务器IP>:1922,能看到 cAdvisor 的 Web 界面。
二、Docker运行prometheus
1. 创建配置文件 prometheus.yml
```yaml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080'] # 这里配置 cadvisor 输出地址
```
2. 运行prometheus容器
```bash
docker run -d \
--name=prometheus \
--network=dev-network \
--restart=always \
-p 1923:9090 \
-v $(pwd)/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
-v prometheus_data:/prometheus \
--platform=linux/arm64/v8 \
prom/prometheus:v2.45.0 \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/prometheus \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.console.templates=/etc/prometheus/consoles \
--web.enable-lifecycle
```
3. 参数解释:
- `--name=prometheus`:容器名称
- `--network=dev-network`:网络名称
- `--restart=always`:重启策略
- `-p 1923:9090`:端口映射
- `-v $(pwd)/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml`:配置文件挂载
- `-v prometheus_data:/prometheus`:数据卷挂载
- `--platform=linux/arm64/v8`:平台架构
- `prom/prometheus:v2.45.0`:镜像名称
- `--config.file=/etc/prometheus/prometheus.yml`:环境变量,设置配置文件路径
- `--storage.tsdb.path=/prometheus`:环境变量,设置数据存储路径
- `--web.console.libraries=/etc/prometheus/console_libraries`:环境变量,设置控制台库路径
- `--web.console.templates=/etc/prometheus/consoles`:环境变量,设置控制台模板路径
- `--web.enable-lifecycle`:环境变量,启用生命周期管理
4. 验证
访问 http://<你的服务器IP>:1923/targets,能看到 prometheus 的 Web 界面。可以看到配置的 cadvisor
处于 UP
状态
三、Docker运行grafana
1. 运行grafana容器
```bash
docker run -d \
--name=grafana \
--restart=always \
--network=dev-network \
-p 1924:3000 \
-v grafana_data:/var/lib/grafana \
-e GF_SECURITY_ADMIN_PASSWORD=admin \
-e GF_USERS_ALLOW_SIGN_UP=false \
--platform=linux/arm64/v8 \
grafana/grafana:10.1.0
```
2. 参数解释:
- `--name=grafana`:容器名称
- `--network=dev-network`:网络名称
- `--restart=always`:重启策略
- `-p 1924:3000`:端口映射
- `-v grafana_data:/var/lib/grafana`:数据卷挂载
- `-e GF_SECURITY_ADMIN_PASSWORD=admin`:环境变量,设置管理员密码
- `-e GF_USERS_ALLOW_SIGN_UP=false`:环境变量,禁止用户注册
- `--platform=linux/arm64/v8`:平台架构
- `grafana/grafana:10.1.0`:镜像名称
3. 验证
访问 http://<你的服务器IP>:1924,能看到 grafana 的 Web 登录界面。输入 admin/admin
登录后修改登录密码
四、监控页面配置
1. 配置数据源
菜单栏-> Data sources -> Add data source -> Prometheus
我这里使用的是docker network,在server URL写入 http://prometheus:9090;如果没有docker network 或者不在同一个服务器,这里写http://<你的服务器IP>:1924即可。完成配置点击 save & test
按钮可以看到连接成功
2. 导入仪表盘
点击右上角加号选择 Import dashboard
进入导入页面
这里使用的是可以选择主机的docker监控模板,点击下载后选择Import dashboard 导入即可,当然也可以使用官方的ID加载,在Import via grafana.com 输入 193,然后选择 prometheus
数据源,点击导入按钮即可
最终效果