目录
[Cadvisor +InfluxDB+Grafana](#Cadvisor +InfluxDB+Grafana)
[1. Cadvisor](#1. Cadvisor)
[创建Cadvisor 容器](#创建Cadvisor 容器)
[添加数据源 Add data source](#添加数据源 Add data source)
[新建 Dashboard](#新建 Dashboard)
概述:
Docker作为目前十分出色的容器管理技术,得到大量企业的青睐,在生产环境中使用Docker容器部署服务及应用的场景越来越多。所以面对日益庞大的docker服务群应用,如何具有针对性的,有效的监控也变成了企业运维人员工作需求。
容器信息采集及监控的方案有很多,有docker自身的docker stats命令、Scout、Data Dog、Prometheus等,本次为大家分享两款比较经典的容器开源监控组合方案Cadvisor +InfluxDB+Grafana
Cadvisor +InfluxDB+Grafan a
1. Cadvisor
Cadvisor 是Google用来监测单节点资源信息的监控工具。 Cadvisor 提供了基础查询界面和http接口,方便其他组件如Grafana 、Prometheus等进行数据抓取。Cadvisor 可以对Docker主机上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况等。Cadvisor 使用Go语言开发,利用Linux的Cgroups获取容器的资源使用信息。
Google的Kubernetes中也默认地将其作为单节点的资源监控工具,各个节点默认会安装上Cadvisor组件。
Cadvisor 产品特点:
- 可以展示主机和容器两个层次的监控数据。
- 可以展示历史变化数据。
- 谷歌公司的开源产品。
- 监控指标齐全。
- 方便部署,有官方的docker镜像。
- 默认只在本地保存1分钟数据,可以集成InfluxDB等第三方存储使用。
由于 Cadvisor 提供的操作界面略显简陋,而且需要在不同页面之间跳转,并且只能监控一个 Host,这不免会让人质疑它的实用性。但 Cadvisor 的一个亮点是它可以将监控到的数据导出给第三方工具,由这些工具进一步加工处理。
我们可以把 Cadvisor 定位为一个监控数据收集器,收集和导出数据是它的强项,而非展示数据。
2 .InfluxDB
InfluxDB是一个由InfluxData开发的开源非关系型时序型数据库。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。同类型的数据库产品还有Elasticsearch、Graphite等。
InfluxDB应用场景:性能监控,应用程序指标,物联网传感器数据和实时分析等的后端存储。
InfluxDB主要功能
- 基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等);
- 可度量性:你可以实时对大量数据进行计算;
- 基于事件:它支持任意的事件数据;
InfluxDB主要特点
- 无结构(无模式):可以是任意数量的列;
- 支持拓展;
- 支持min, max, sum, count, mean, median 等一系列函数,方便统计;
- 原生的HTTP支持,内置HTTP API;
- 强大的类SQL语法;
- 自带管理界面,方便使用;
3 .Grafana
Grafana是一个可视化面板(Dashboard)工具,有着非常漂亮的图表和布局等展示功能,功能齐全的度量仪表盘和图形编辑器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB等组件作为数据源。
Grafana主要特性
- 灵活丰富的图形化选项;
- 可以混合多种风格;
- 支持白天和夜间模式;
- 支持多个数据源;
开始部署:
关闭防火墙规则
root@agent \~\]# iptables -F \[root@agent \~\]# setenforce 0 \[root@agent \~\]# systemctl stop firewalld 下载阿里云repo文件 \[root@agent \~\]# wget http://mirrors.aliyun.com/repo/Centos-7.repo > --2023-08-08 11:12:14-- http://mirrors.aliyun.com/repo/Centos-7.repo > > 正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 42.202.208.239, 42.202.208.240, 42.202.208.241, ... > > 正在连接 mirrors.aliyun.com (mirrors.aliyun.com)\|42.202.208.239\|:80... 已连接。 > > 已发出 HTTP 请求,正在等待回应... 200 OK > > 长度:2523 (2.5K) \[application/octet-stream
正在保存至: "Centos-7.repo"
100%[=============================================================>] 2,523 --.-K/s 用时 0.01s
2023-08-08 11:12:15 (231 KB/s) - 已保存 "Centos-7.repo" [2523/2523])
安装依赖包
root@agent \~\]# yum -y install yum-utils device-mapper-persistent-data lvm2 > 已安装: > > yum-utils.noarch 0:1.1.31-54.el7_8 > > 作为依赖被安装: > > libxml2-python.x86_64 0:2.9.1-6.el7_9.6 python-chardet.noarch 0:2.2.1-3.el7 > > python-kitchen.noarch 0:1.1.1-5.el7 > > 完毕! **设置docker阿里镜像安装docker** \[root@agent \~\]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo > 已加载插件:fastestmirror > > adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo > > grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo > > repo saved to /etc/yum.repos.d/docker-ce.repo \[root@agent \~\]# yum -y install docker-ce > 已安装: > > docker-ce.x86_64 3:24.0.5-1.el7 > > 作为依赖被安装: > > audit-libs-python.x86_64 0:2.8.5-4.el7 checkpolicy.x86_64 0:2.5-8.el7 > > container-selinux.noarch 2:2.119.2-1.911c772.el7_8 containerd.io.x86_64 0:1.6.22-3.1.el7 > > docker-buildx-plugin.x86_64 0:0.11.2-1.el7 docker-ce-cli.x86_64 1:24.0.5-1.el7 > > docker-ce-rootless-extras.x86_64 0:24.0.5-1.el7 docker-compose-plugin.x86_64 0:2.20.2-1.el7 > > fuse-overlayfs.x86_64 0:0.7.2-6.el7_8 fuse3-libs.x86_64 0:3.6.1-4.el7 > > libcgroup.x86_64 0:0.41-21.el7 libsemanage-python.x86_64 0:2.5-14.el7 > > policycoreutils-python.x86_64 0:2.5-34.el7 python-IPy.noarch 0:0.75-6.el7 > > setools-libs.x86_64 0:3.3.8-4.el7 slirp4netns.x86_64 0:0.4.3-4.el7_8 > > 完毕! 重启服务 开启开机自启 \[root@agent \~\]# systemctl start docker \[root@agent \~\]# systemctl enable docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. 查看版本 [root@agent ~]# docker version Client: Docker Engine - Community Version: 24.0.5 API version: 1.43 Go version: go1.20.6 Git commit: ced0996 Built: Fri Jul 21 20:39:02 2023 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 24.0.5 API version: 1.43 (minimum version 1.12) Go version: go1.20.6 Git commit: a61e2b4 Built: Fri Jul 21 20:38:05 2023 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.22 GitCommit: 8165feabfdfe38c65b599c4993d227328c231fca runc: Version: 1.1.8 GitCommit: v1.1.8-0-g82f18fe docker-init: Version: 0.19.0 GitCommit: de40ad0 **阿里镜像加速** > \[root@agent \~\]# cat \<\< END \> /etc/docker/daemon.json > > \> { > > \> "registry-mirrors":\[ "https://nyakyfun.mirror.aliyuncs.com"
> }
> END
重载
root@agent \~\]# systemctl daemon-reload \[root@agent \~\]# systemctl restart docker
下载组件镜像
root@agent \~\]# docker pull tutum/influxdb > Using default tag: latest > > latest: Pulling from tutum/influxdb > > a3ed95caeb02: Pull complete > > 23efb549476f: Pull complete > > aa2f8df21433: Pull complete > > ef072d3c9b41: Pull complete > > c9f371853f28: Pull complete > > a248b0871c3c: Pull complete > > 749db6d368d0: Pull complete > > db2492acfcc3: Pull complete > > b7e7d2e12d53: Pull complete > > 4272a53eef10: Pull complete > > 9b2fefdb5321: Pull complete > > Digest: sha256:5b7c5e318303ad059f3d1a73d084c12cb39ae4f35f7391b79b0ff2c0ba45304b > > Status: Downloaded newer image for tutum/influxdb:latest > > docker.io/tutum/influxdb:latest \[root@agent \~\]# docker pull google/cadvisor > Using default tag: latest > > latest: Pulling from google/cadvisor > > ff3a5c916c92: Pull complete > > 44a45bb65cdf: Pull complete > > 0bbe1a2fe2a6: Pull complete > > Digest: sha256:815386ebbe9a3490f38785ab11bda34ec8dacf4634af77b8912832d4f85dca04 > > Status: Downloaded newer image for google/cadvisor:latest > > docker.io/google/cadvisor:latest \[root@agent \~\]# docker pull grafana/grafana > Using default tag: latest > > latest: Pulling from grafana/grafana > > 97518928ae5f: Pull complete > > 5b58818b7f48: Pull complete > > d9a64d9fd162: Pull complete > > 4e368e1b924c: Pull complete > > 867f7fdd92d9: Pull complete > > 387c55415012: Pull complete > > 07f94c8f51cd: Pull complete > > ce8cf00ff6aa: Pull complete > > e44858b5f948: Pull complete > > 4000fdbdd2a3: Pull complete > > Digest: sha256:18d94ae734accd66bccf22daed7bdb20c6b99aa0f2c687eea3ce4275fe275062 > > Status: Downloaded newer image for grafana/grafana:latest > > docker.io/grafana/grafana:latest 查看镜像 > \[root@agent \~\]# docker images > > REPOSITORY TAG IMAGE ID CREATED SIZE > > grafana/grafana latest 9b957e098315 20 months ago 275MB > > google/cadvisor latest eb1210707573 4 years ago 69.6MB > > tutum/influxdb latest c061e5808198 6 years ago 290MB ### 创建自定义网络 为了把后期创建的Cadvisor+InfluxDB+Grafana这三个容器都加入自己定义的网络便于理解和管理,所以才新建一个自定义网络。 > \[root@agent \~\]# docker network create monitor > > 15c66b26909c893ddf4e643070f0a8be4735429d8eb240ccfd87181e912266e7 > > \[root@agent \~\]# docker network ls > > NETWORK ID NAME DRIVER SCOPE > > c797f68ebf72 bridge bridge local > > ad6923a67d61 host host local > > 15c66b26909c monitor bridge local > > 4176a96abea0 none null local #### 创建influxdb容器 > \[root@agent \~\]# docker run -d --name influxdb --net monitor -p 8083:8083 -p 8086:8086 tutum/influxdb > > a0010d5c535f2361b64750af6c926424ba71cacd76ab46afc301e1d7873f228d 查看容器是否启动 > \[root@agent \~\]# docker ps -a > > CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES > > a0010d5c535f tutum/influxdb "/run.sh" 22 seconds ago Up 22 seconds 0.0.0.0:8083-\>8083/tcp, :::8083-\>8083/tcp, 0.0.0.0:8086-\>8086/tcp, :::8086-\>8086/tcp influxdb 浏览器访问 http://192.168.50.50;8083   从上图可以看到,在Query Templates选项中提供了常用的操作模板,可根据这些模版来管理influxdb,下面我们就来 #### 创建数据库和数据库用户 CREATE USER "root1" WITH PASSWORD '123456' WITH ALL PRIVILEGES  创建Cadvisor 数据库cadvisor 、用户root,用户和数据库大家可以自行随意定义,用于后期grafana的配置: CREATE DATABASE "cadvisor"  ##### ******创建Cadvisor 容器****** > \[root@agent \~\]# docker run -d --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --net monitor --publish=8080:8080 --name=cadvisor google/cadvisor -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb:8086 > > 14c0398f35a287001525dbae439b2850e60d03a3c3820f8fd7f2eccc750d3d80 > > |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| > | 参数说明: 1. -d:后台运行此容器; 2. --name:启运容器分配名字Cadvisor ; 3. --net:把容器加入到新的网络monitor; 4. -p:映射端口8080; 5. --mout:把宿主机的相文目录绑定到容器中,这些目录都是Cadvisor 需要采集的目录文件和监控内容; 6. -storage_driver:需要指定Cadvisor 的存储驱动、数据库主机、数据库名; 7. google/Cadvisor :通过Cadvisor 这个镜像来运行容器,默认会在docker官方仓库把镜像pull下来; | > 查看Cadvisor容器 > \[root@agent \~\]# docker ps -a > > CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES > > 14c0398f35a2 google/cadvisor "/usr/bin/cadvisor -..." 4 seconds ago Up 3 seconds 0.0.0.0:8080-\>8080/tcp, :::8080-\>8080/tcp cadvisor > > a0010d5c535f tutum/influxdb "/run.sh" 6 minutes ago Up 2 minutes 0.0.0.0:8083-\>8083/tcp, :::8083-\>8083/tcp, 0.0.0.0:8086-\>8086/tcp, :::8086-\>8086/tcp influxdb 通过浏览器访问8080端口  下面会看到很多详细参数 我们这里主要用它来做数据采集。  ###### 准备测试镜像 > \[root@agent \~\]# docker run -itd --name nginx -p 8000:80 nginx > > Unable to find image 'nginx:latest' locally > > latest: Pulling from library/nginx > > a2abf6c4d29d: Pull complete > > a9edb18cadd1: Pull complete > > 589b7251471a: Pull complete > > 186b1aaa4aa6: Pull complete > > b4df32aa5a72: Pull complete > > a0bcbecc962e: Pull complete > > Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31 > > Status: Downloaded newer image for nginx:latest > > a76c56a3155b4a2e69187ddeca3808d0a2b8693947847162ea6d618d1168e8c8 查看镜像是否成功创建并启动 > \[root@agent \~\]# docker images nginx > > REPOSITORY TAG IMAGE ID CREATED SIZE > > nginx latest 605c77e624dd 19 months ago 141MB > > \[root@agent \~\]# docker ps -l > > CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES > > a76c56a3155b nginx "/docker-entrypoint...." 41 seconds ago Up 40 seconds 0.0.0.0:8000-\>80/tcp, :::8000-\>80/tcp nginx > > \[root@agent \~\]# 进入浏览器页面 点击下方  可以看到nginx  同样可以看到nginx参数  # ******创建granafa容器****** > \[root@agent \~\]# docker run -d --name grafana --net monitor -p 3000:3000 grafana/grafana > > c78b7f80fd41a0be87de6424d19dc260effa161961469193af94e5d6b561cdce **查看是否运行** \[root@agent \~\]# docker ps -l > CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES > > c78b7f80fd41 grafana/grafana "/run.sh" 9 seconds ago Up 9 seconds 0.0.0.0:3000-\>3000/tcp, :::3000-\>3000/tcp grafana ## 访问granfana 通过http://192.168.50.50:3000端口的方式访问,默认账户密码(admin/admin),首次登陆需要更新密码。   ### 添加数据源 Add data source 找到这个图案  找到 lnfluxDB    成功   #### 新建 Dashboard 如下图:  如果前面没问题 但现在找不到nginx可以手动输入nginx  保存   查看  OK 