Jacky's Blog Jacky's Blog
  • 首页
  • 关于
  • 项目
  • 大事记
  • 留言板
  • 友情链接
  • 分类
    • 干货
    • 随笔
    • 项目
    • 公告
    • 纪念
    • 尝鲜
    • 算法
    • 深度学习
首页 › 干货 › 容器监控方案 cAdvisor + Prometheus + Grafana

容器监控方案 cAdvisor + Prometheus + Grafana

Jacky
6月 19, 2022干货阅读 579

前言

cAdvisor

cAdvisor (Container Advisor) 让容器的使用者了解的他们正在使用的容器的资源使用情况和性能指标。它是一个处于运行状态的守护进程,用于收集、聚合、处理和导出有关正在运行的容器的信息。具体来说,它为每个容器保存资源隔离参数、历史资源使用数据以及统计图。

容器监控方案 cAdvisor + Prometheus + Grafana-Jacky's Blog
cAdvisor Web UI

Prometheus

容器监控方案 cAdvisor + Prometheus + Grafana-Jacky's Blog
Prometheus 架构图

Prometheus 是一个云原生计算基金会的项目,是一个系统并提供系统监控服务。它以给定的时间间隔从配置的目标中收集指标,聚合并展示数据处理的结果,当出现查到指定条件时可以触发警报。

Grafana

Grafana 是一个开源的、跨平台数据可视化 Web UI。用户配置连接的数据源后,Grafana 可以在浏览器中显示统计图表和警告。

环境搭建

部署说明

笔者使用两台阿里云 ECS 主机,它们均处于同一个 VPC 下,系统均为 Ubuntu 20.04。

主机内网 IP运行组件
A10.0.0.77cAdvisor
B10.0.0.91Prometheus 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

容器监控方案 cAdvisor + Prometheus + Grafana-Jacky's Blog
cAdvisor Container Monitor Web UI

部署 Prometheus

创建 prometheus 的配置文件,注意将 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]:9000 即可进入 Prometheus 的 Web UI

容器监控方案 cAdvisor + Prometheus + Grafana-Jacky's Blog
Prometheus Web UI

点击菜单 Status => Targets,可以看到所有监控目标的 Exporters

容器监控方案 cAdvisor + Prometheus + Grafana-Jacky's Blog
Targets Status

此时所有监控目标的状态都是 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,登录成功后会要求重设密码。

容器监控方案 cAdvisor + Prometheus + Grafana-Jacky's Blog
Grafana Web UI

点击 「Add your first data source」添加数据源。

容器监控方案 cAdvisor + Prometheus + Grafana-Jacky's Blog
数据库选择

选择 Prometheus 作为数据库,注意 URL 填写为 http://host.docker.internal:9090,如果使用 localhost 的话是无法访问到 Prometheus 容器的,需要用 host.docker.internal 作为 DNS 名称解析到宿主机的网络上,使得 Grafana 的容器可以访问宿主机的网络,进而访问 Prometheus 容器。

容器监控方案 cAdvisor + Prometheus + Grafana-Jacky's Blog
Prometheus API 地址

点击「Save & test」保存配置文件

容器监控方案 cAdvisor + Prometheus + Grafana-Jacky's Blog

提示 Data source is working 表明网络通信正常。

回到 Dashboard,点击 Create your first dashboard。

点击 Sidebar 的 +,选择 Import 导入一个仪表盘。

容器监控方案 cAdvisor + Prometheus + Grafana-Jacky's Blog

笔者使用的是 Docker and system monitoring 的模板,https://grafana.com/grafana/dashboards/11600,ID 为 11600,点击 Import,即可使用该仪表盘。也可以在 https://grafana.com/grafana/dashboards 中搜索 docker 相关的 Dashboard。

容器监控方案 cAdvisor + Prometheus + Grafana-Jacky's Blog
Docker Container Dashboard

参考资料

  1. 容器监控工具(2)Prometheus + cAdvisor + grafana. https://developer.aliyun.com/article/725867
  2. Run Grafana Docker image. https://grafana.com/docs/grafana/next/setup-grafana/installation/docker/
  3. Configure a Grafana Docker image. https://grafana.com/docs/grafana/latest/setup-grafana/configure-docker/

文章最后修订于 2022年11月20日

赞(1)
Gin validator 翻译器的初始化
上一篇
Go 版本的 Pofile 解析器
下一篇
再想想
暂无评论
近期评论
  • Jacky发表在《Nginx UI》
  • daiwenzh5发表在《Nginx UI》
  • Jacky发表在《Nginx UI》
  • daiwenzh5发表在《Nginx UI》
  • Jacky发表在《Nginx UI》
1
  • 1
  • 0
Copyright © 2016-2023 Jacky's Blog. Designed by nicetheme.
粤ICP备16016168号-1
  • 首页
  • 关于
  • 项目
  • 大事记
  • 留言板
  • 友情链接
  • 分类
    • 干货
    • 随笔
    • 项目
    • 公告
    • 纪念
    • 尝鲜
    • 算法
    • 深度学习
# Mac # # Apple # # OS X # # iOS # # macOS #
Jacky
PHP C C++ Python | 舞象之年 | 物联网工程
174
文章
169
评论
267
喜欢