Docker容器监控-CIG
目录
一、CIG说明
1. CAdvisor
2. InfluxDB
3. Grafana
二、环境搭建
1. 创建目录
2. 编写 docker-compose.yml
3. 检查并运行容器
三、进行测试
1. 查看 influxdb 存储服务 是否能正常访问
2. 查看 cAdvisor 收集服务能否正常访问
3. 查看 grafana 展现服务,并且配置展现模板
1. 进行登录
2 .配置数据源
3. 配置面板panel
一、CIG说明
由 CAdvisor+InfluxDB+Granfana 组成的CIG的监控。
1. CAdvisor
CAdvisor 是由 Google 开源的一个用于监控容器资源使用情况的工具。它能够实时收集 Docker 容器的 CPU 使用率、内存使用量、磁盘 I/O、网络流量 等指标,并将这些数据暴露为 Prometheus 格式的监控端点,供 Prometheus 或其他监控系统使用。cAdvisor 还提供了一个简单的 Web 界面,可以用于实时查看容器的监控数据。
2. InfluxDB
InfluxDB 是一个开源的时序数据库,专门设计用于处理时间序列数据。在 CIG 监控系统中,InfluxDB 用于存储由 cAdvisor 收集的容器监控数据。用户可以通过查询 InfluxDB 数据库来获取 历史的容器监控指标,并利用其强大的时序查询语言进行数据分析和可视化。
3. Grafana
Grafana 是一个开源的数据可视化工具,用于创建、查看和共享监控仪表盘。在 CIG 监控系统中,Grafana 与 InfluxDB 集成,可以直接从 InfluxDB 中查询容器监控数据,并通过可视化方式展示在用户界面上。用户可以根据自己的需求定制仪表盘,选择合适的 图表类型、添加 告警规则,并将仪表盘分享给其他用户。
通过将 cAdvisor、InfluxDB 和 Grafana 这三个组件结合在一起,用户可以构建一个强大而灵活的容器监控系统,实现对 Docker 容器的全面监控和管理。该系统具有 实时性、可扩展性 和 易用性 等特点,适用于各种规模的容器化环境。
二、环境搭建
1. 创建目录
mkdir /mydocker/cig
cd /mydocker/cig
2. 编写 docker-compose.yml
vim docker-compose.yml
version: '3.1'volumes:grafana_data: {}services:influxdb:image: tutum/influxdb:0.9restart: alwaysenvironment:- PRE_CREATE_DB=cadvisorports:- "8083:8083"- "8086:8086"volumes:- ./data/influxdb:/datacadvisor:image: google/cadvisorlinks:- influxdb:influxsrvcommand: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb:8086restart: alwaysports:- "8080:8080"volumes:- /:/rootfs:ro- /var/run:/var/run:rw- /sys:/sys:ro- /var/lib/docker/:/var/lib/docker:rografana:user: "104"image: grafana/grafanauser: "104"restart: alwayslinks:- influxdb:influxsrvports:- "3000:3000"volumes:- grafana_data:/var/lib/grafanaenvironment:- HTTP_USER=admin- HTTP_PASS=admin- INFLUXDB_HOST=influxsrv- INFLUXDB_PORT=8086- INFLUXDB_NAME=cadvisor- INFLUXDB_USER=root- INFLUXDB_PASS=root
ps:配置注释
version: '3.1'volumes:grafana_data: {} # 定义 Grafana 数据卷,用于持久化数据services:influxdb:image: tutum/influxdb:0.9 # 使用 InfluxDB 0.9 版本镜像restart: always # 总是重启容器environment:- PRE_CREATE_DB=cadvisor # 预创建名为 cadvisor 的数据库ports:- "8083:8083" # InfluxDB Web 可视化页面端口- "8086:8086" # InfluxDB API 端口volumes:- ./data/influxdb:/data # 挂载 InfluxDB 数据到本地目录cadvisor:image: google/cadvisor # 使用 Google/cAdvisor 镜像links:- influxdb:influxsrv # 链接到 InfluxDB 服务command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb:8086 # 定义 cadvisor 启动命令restart: always # 总是重启容器ports:- "8080:8080" # cAdvisor 端口volumes:- /:/rootfs:ro # 挂载根目录为只读- /var/run:/var/run:rw # 挂载/var/run目录为读写- /sys:/sys:ro # 挂载/sys目录为只读- /var/lib/docker/:/var/lib/docker:ro # 挂载/var/lib/docker目录为只读grafana:user: "104" # 指定容器用户image: grafana/grafana # 使用 Grafana 镜像restart: always # 总是重启容器links:- influxdb:influxsrv # 链接到 InfluxDB 服务ports:- "3000:3000" # Grafana 端口volumes:- grafana_data:/var/lib/grafana # 挂载 Grafana 数据到数据卷environment:- HTTP_USER=admin # 设置 Grafana 登录用户名- HTTP_PASS=admin # 设置 Grafana 登录密码- INFLUXDB_HOST=influxsrv # 设置 InfluxDB 主机- INFLUXDB_PORT=8086 # 设置 InfluxDB 端口- INFLUXDB_NAME=cadvisor # 设置 InfluxDB 数据库名称- INFLUXDB_USER=root # 设置 InfluxDB 用户名- INFLUXDB_PASS=root # 设置 InfluxDB 密码
ps:如果出错记得检查是否有空格没有删除
3. 检查并运行容器
# 检查配置,有问题才有输出
docker compose config -q
# -d 后台启动
docker compose up -d
检查容器是否正常启动
docker ps
# 如果运行出错别忘记了查看日志
docker logs 【容器名称/容器ID】
三、进行测试
1. 查看 influxdb 存储服务 是否能正常访问
http://192.168.xxx.xxx:8083/
进入之后查看我们在 docker-compose.yml 配置文件中默认创建的数据库是否已经创建
Show databases
2. 查看 cAdvisor 收集服务能否正常访问
http://192.168.xxx.xxx:8083/
3. 查看 grafana 展现服务,并且配置展现模板
1. 进行登录
grafana 默认帐户密码(admin/admin),在登录之后需要设置一个新的密码。
http://192.168.xxx.xxx:3000/
2 .配置数据源
找到 InfluxDB 数据库
填写数据源链接 http://influxdb:8086
然后向下滑动,配置数据库连接账号密码。
- Database:cadvisor
- User:root
- Password:root
在 docker-compose.yml 配置文件中在创建 influxdb 时创建
3. 配置面板panel
FROM:cpu_usage_total(Grafana会自动获取InfluxDB数据库中的元数据,可以直接选择对应表名)
WHERE:添加一个条件,container_name=/
ALIAS:配置一个别名,CPU使用情况汇总
相关文章:

Docker容器监控-CIG
目录 一、CIG说明 1. CAdvisor 2. InfluxDB 3. Grafana 二、环境搭建 1. 创建目录 2. 编写 docker-compose.yml 3. 检查并运行容器 三、进行测试 1. 查看 influxdb 存储服务 是否能正常访问 2. 查看 cAdvisor 收集服务能否正常访问 3. 查看 grafana 展现服务&#…...

python调用golang中函数方法
一、原因说明:由于simhash方法有多种实现方式,现python中simhash方法与golang中的不一样,需要两者代码生成结果保持一致,故采用python中的代码调用golang编译的so文件来实现。 环境配置:①Windows10系统要有gcc环境&a…...

Ps:颜色取样器工具
颜色取样器工具 Color Sampler Tool允许用户从图像中设置特定的颜色取样点,然后利用“信息”面板查看该点在不同颜色模式下(包括:RGB、CMYK、Lab、灰度等)的颜色值,因此可为色彩分析、颜色校正、色彩匹配等提供精确的数…...

Rust引用、借用和所有权详解
在Rust中,引用、借用和所有权是语言的核心概念,它们共同构成了内存管理的基石。本篇博客将介绍Rust中的这些概念,并通过具体的例子深入探讨它们的用法和优势。 所有权 Rust中的所有权是一种独特的内存管理机制,它规定了在特定作…...

C# 字体大小的相关问题
设置字体大小无法这么写, button1.Font.Size 20; 这个是只读属性; 把字体大小改为16, button2.Font new Font(button2.Font.Name, 16); 程序运行的时候先看一下窗体和控件的默认字体尺寸,都是9;然后点b…...

使用 Express.js 和 MySQL 构建 Web 应用程序
Express.js 是一个流行的 Node.js Web 框架,而 MySQL 是一种广泛使用的关系型数据库。本文将介绍如何结合使用 Express.js 和 MySQL 构建功能强大的 Web 应用程序。 一、安装和设置 首先,确保您已经安装了 Node.js 和 MySQL。然后,通过以下…...

1306. 跳跃游戏 III
经过测试,两种写法耗时差距10倍,我也不知道原因是啥 用访问次数的是更快的 class Solution { public:int n;bool dfs(vector<int>& arr, int start, vector<int>& visited){if(start<0||start>n || visited[start]1) return …...

List与数组相互转换
文章目录 将 List 转 数组List.toArra()Stream().toArray() 将 数组 转 ListLists.newArrayList()Stream.of() 将 List 转 数组 List.toArra() List<Integer> list Lists.newArrayList(1, 2, 3);// 无需转换类型 --> [1,2,3]Integer[] intArray list.toArray(new I…...

Linux openKylin(开放麒麟)系统SSH服务安装配置与公网远程连接
文章目录 前言1. 安装SSH服务2. 本地SSH连接测试3. openKylin安装Cpolar4. 配置 SSH公网地址5. 公网远程SSH连接6. 固定SSH公网地址7. SSH固定地址连接8. 结语 前言 openKylin是中国首个基于Linux 的桌面操作系统开发者平台,通过开放操作系统源代码的方式ÿ…...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之AlphabetIndexer组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之AlphabetIndexer组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、AlphabetIndexer组件 可以与容器组件联动用于按逻辑结构快速定位容器显…...

java学习07---综合练习
飞机票 1.需求: 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。 按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7…...

【RL】Bellman Equation (贝尔曼等式)
Lecture2: Bellman Equation State value 考虑grid-world的单步过程: S t → A t R t 1 , S t 1 S_t \xrightarrow[]{A_t} R_{t 1}, S_{t 1} StAt Rt1,St1 t t t, t 1 t 1 t1:时间戳 S t S_t St:时间 t t t时所处的sta…...

PyTorch 2.2大更新!集成FlashAttention-2,性能提升2倍
【新智元导读】新的一年,PyTorch也迎来了重大更新,PyTorch 2.2集成了FlashAttention-2和AOTInductor等新特性,计算性能翻倍。 新的一年,PyTorch也迎来了重大更新! 继去年十月份的PyTorch大会发布了2.1版本之后&#…...

2.9日学习打卡----初学RabbitMQ(四)
2.9日学习打卡 一.RabbitMQ 死信队列 在MQ中,当消息成为死信(Dead message)后,消息中间件可以将其从当前队列发送到另一个队列中,这个队列就是死信队列。而在RabbitMQ中,由于有交换机的概念,实…...

大数据Flume--入门
文章目录 FlumeFlume 定义Flume 基础架构AgentSourceSinkChannelEvent Flume 安装部署安装地址安装部署 Flume 入门案例监控端口数据官方案例实时监控单个追加文件实时监控目录下多个新文件实时监控目录下的多个追加文件 Flume Flume 定义 Flume 是 Cloudera 提供的一个高可用…...

【SQL高频基础题】550.游戏玩法分析IⅣ
这个SQL花了很久。但是有挺多启发的。 如果我们做不出来,就去看答案。 但是看完答案之后,不要着急就去看下一道题,先把这道题吃透,后面的题目就会更有思路。 题目: Table: Activity ----------------------- | Co…...

sheng的学习笔记-部署-目录
标题传送门 sheng的学习笔记-docker部署,原理图,命令,用idea设置docker sheng的学习笔记-docker部署,原理图,命令,用idea设置docker sheng的学习笔记-docker部署springboot sheng的学习笔记-docker部署spri…...

【Java】悲观锁和乐观锁有什么区别?
Java中的悲观锁和乐观锁的主要区别体现在以下几个方面: 加锁策略:悲观锁在操作数据时,总是假设最坏的情况,即认为其他线程会修改数据,因此在读取或操作数据时,会先对数据进行加锁,以保证数据的…...

Elasticsearch:使用查询规则(query rules)进行搜索
在之前的文章 “Elasticsearch 8.10 中引入查询规则 - query rules”,我们详述了如何使用 query rules 来进行搜索。这个交互式笔记本将向你介绍如何使用官方 Elasticsearch Python 客户端来使用查询规则。 你将使用 query rules API 将查询规则存储在 Elasticsearc…...

Java核心设计模式:代理设计模式
一、生活中常见的代理案例 房地产中介:客户手里没有房源信息,找一个中介帮忙商品代购:代理者一般有好的资源渠道,降低购物成本(如海外代购,自己不用为了买东西出国) 二、为什么要使用代理 对…...

JSP编程
JSP编程 您需要理解在JSP API的类和接口中定义的用于创建JSP应用程序的各种方法的用法。此外,还要了解各种JSP组件,如在前一部分中学习的JSP动作、JSP指令及JSP脚本。JSP API中定义的类提供了可借助隐式对象通过JSP页面访问的方法。 1. JSP API的类 JSP API是一个可用于创建…...

【Flink入门修炼】1-1 为什么要学习 Flink?
流处理和批处理是什么? 什么是 Flink? 为什么要学习 Flink? Flink 有什么特点,能做什么? 本文将为你解答以上问题。 一、批处理和流处理 早些年,大数据处理还主要为批处理,一般按天或小时定时处…...

刘谦龙年春晚魔术模拟
守岁共此时 代码 直接贴代码了,异常处理有点问题,正常流程能跑通 package com.yuhan.snginx.util.chunwan;import java.util.*;/*** author yuhan* since 2024/02/10*/ public class CWMS {static String[] num {"A", "2", &quo…...

re:从0开始的CSS学习之路 9. 盒子水平布局
0. 写在前面 过年也不能停止学习,一停下就难以为继,实属不应 1. 盒子的水平宽度 当一个盒子出现在另一个盒子的内容区时,该盒子的水平宽度“必须”等于父元素内容区的宽度 盒子水平宽度: margin-left border-left padding-lef…...

【MySQL基础】:深入探索DQL数据库查询语言的精髓(上)
🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. DQL1.1 基本语法1.2 基础查询1.3 条件查询1.3 聚合函数 🌤️ 全篇…...

JavaScript实现轮播图方法
效果图 先来看下效果图,嫌麻烦就不用具体图片来实现了,主要是理清思路。(自动轮播,左右按钮切换图片,小圆点切换图片,鼠标移入暂停轮播,鼠标移出继续轮播) HTML 首先是html内容&am…...

Web课程学习笔记--jsonp的原理与简单实现
jsonp的原理与简单实现 原理 由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源,为了实现跨域请求,可以通过script标签实现跨域请求,然后在服务端输出JSON数据并执行回调函数&…...

第78讲 修改密码
系统管理实现 修改密码实现 前端 modifyPassword.vue: <template><el-card><el-formref"formRef":model"form":rules"rules"label-width"150px"><el-form-item label"用户名:&quo…...

Docker 容器网络:C++ 客户端 — 服务器应用程序。
一、说明 在下面的文章中, 将向您概述 docker 容器之间的通信。docker 通信的验证将通过运行 C 客户端-服务器应用程序和标准“ping”命令来执行。将构建并运行两个单独的 Docker 映像。 由于我会关注 docker 网络方面,因此不会提供 C 详细信息。…...

Android 识别车牌信息
打开我们心爱的Android Studio 导入需要的资源 gradle //开源车牌识别安卓SDK库implementation("com.github.HyperInspire:hyperlpr3-android-sdk:1.0.3")button.setOnClickListener(v -> {Log.d("Test", "");try (InputStream file getAs…...