【DevOps-监控】生产环境是如何落地一套全方位的监控系统

2023-11-03

生产环境监控究竟需什么样的功能?

我们试想一下,如果部署一个监控系统到生产环境,需要满足哪些功能呢?既然是监控,肯定需要监控我们的主机资源信息包括cpu,内存,网络,磁盘等信息吧,其次还得监控容器的相关资源信息,然后我们可能还需要历史数据 几周,几个月甚至几年的,那么监控到最后如果资源达到某个阈值或者OOM的时候,可以第一时间通知到正在结婚的,正在睡觉的,正在......的你。那么我们总结一下上面的功能:

  1. 监控主机的CPU、内存、磁盘、网络等方面的指标

  2. 监控容器的CPU、内存、磁盘、网络等方面的指标

  3. 指标数据持久化

  4. 指标数据可视化展示

  5. 资源达到某个阈值需要做预警通知(这个这篇不详细展开只预留功能入口)

那么基于上面的这些功能,我们来看看怎么选型?

监控采集软件及方案介绍

通过上面的介绍我们知道了一个完善的监控大概都需要什么功能,那么接下来我们就开始选合适的软件,这里就直接给结果了,这些是我们k8s里面线上用的一套,当然这些也可以适用于Docker。

  1. 主机监控: 可以选 node-exporter,node_exporter 就是抓取用于采集服务器节点的各种运行指标,目前 node_exporter 支持几乎所有常见的监控点,比如 conntrack,cpu,diskstats,filesystem,loadavg,meminfo,netstat 等。

  2. 容器监控:说到容器监控我们自然会想到 cAdvisor,上篇文章【后端必备】深度揭秘Docker监控采集数据原理&可视化监控方案 ,详细的介绍过 cAdvisor  可以提供对容器的实时监控和性能分析,包括CPU、内存、磁盘、网络等方面的指标。

  3. 指标数据持久化Prometheus Server 用于抓取指标、存储时间序列数据, 可以从满足 prometheus 格式要求的 /metrics 接口中获取所需数据并进行持久化存储。目前大部分采集软件都支持。

  4. 指标数据可视化展示: 这个肯定选grafana, grafana是与prometheus 配套的可视化监控软件,支持各种维度各种形状的可视化组件。

  5. 预警通知:预警通知,可以用premetheus的预警模块:alertmanager,它可以通过 Email、Wechat(Robot)、Dingtalk(webhook)等方式来接受警报通知。

图片

Docker监控系统

如图所示,我们可以通过 node-exporter 可以获取主机数据,cAdvisor 获取主机上的镜像信息,prometheus 定时调用node-exportercAdvisor的 /metrics 接口获取数据并存储到磁盘,然后grafana展示的时候直接从 prometheus里面获取数据进行展示。我们还可以在premetheus alertmanager 配置相应的规则,当数据达到一定的阈值的时候触发预警策略。

通过上面的了解我们大概知道监控的逻辑是什么样了,那么我们如果基于Docker的话要如何落地实施呢?下面我们来看一下详细的安装脚本及一键部署脚本。

详细的安装方案

一、环境信息

软件 版本 说明
Ubuntu 22.04.1 IP: 192.168.111.37
Docker 20.10.21
Prometheus bitnami/prometheus:2.45.0 开放端口: 8093
node-exporter bitnami/node-exporter:1.6.1 开放端口: 8092
cAdvisor todocoder/cadvisor:v0.47.2 开放端口: 8091
Grafana grafana/grafana:9.5.6 开放端口: 8094

二、安装监控系统

1. cAdvisor 的安装与使用

cAdvisor的简介可以查看上一篇文章【【后端必备】深度揭秘Docker监控采集数据原理&可视化监控方案

下面我们以 cAdvisor 0.47.2 版本为例,演示一下 cAdvisor 的安装与使用。

cAdvisor 官方提供了 Docker 镜像,我们只需要拉取镜像并且启动镜像即可。

由于 cAdvisor 镜像存放在谷歌的 gcr.io 镜像仓库中,国内无法访问到。我把最新版的打好的镜像放在了 Docker Hub。你可以直接使用 docker pull todocoder/cadvisor:v0.47.2 命令从 Docker Hub 拉取。

首先使用以下命令启动 cAdvisor:

$ docker run \
-v=/:/rootfs:ro \
-v=/var/run:/var/run:ro \
-v=/sys:/sys:ro \
-v=/var/lib/docker/:/var/lib/docker:ro \
-v=/dev/disk/:/dev/disk:ro \
-p=8091:8080 \
-d=true \
--privileged=true \
--name=todocoder-cadvisor \
todocoder/cadvisor:v0.47.2

命令说明:

-v,--volume: 挂载本地目录到镜像内目录: 宿主机目录:容器目录

-p,--publish: 指定端口映射,格式为:主机(宿主)端口:容器端口

-d, --detach: 指定容器在后台运行,默认为 false

--privileged=true: 放开容器的权限

--name: todocoder-cadvisor 为容器指定一个名称,名字叫 todocoder-cadvisor ;

可以看到,cAdvisor 已经成功启动,我们可以通过 http://192.168.111.37:8091 访问到 cAdvisor 的 Web 界面。

图片

cAdvisor 查看容器监控

查看Docker容器的使用情况,可以访问 http://192.168.111.37:8091/docker/,在这个页面会显示Docker的基本信息和容器的运行情况,如图:

图片

镜像资源使用情况

上图中的 Subcontainers 下会列出当前主机上Docker运行的所有容器,点击其中一个容器即可查看该容器的详细运行状态,如下图:

图片

cAdvisor的Web界面提供了容器的实时监控信息,包括CPU使用率、内存使用量、网络流量、磁盘IO等指标。你也可以通过界面上的图表和表格来查看这些指标的历史数据和趋势。

总体来说,使用 cAdvisor 监控容器具有以下特点:

  • 可以同时采集物理机和容器的状态;

  • 可以展示监控历史数据;

cAdvisor还提供了RESTful API  http://192.168.111.37:8091/metrics,可以通过API获取容器的监控数据,Prometheus 可以通过这个接口来拉取数据。这里就不贴图了

2. 安装node-exporter

node-exporter 主要是用来收集主机的指标信息,比cAdvisor 的数据要全面,node_exporter 支持几乎所有常见的监控点,比如 conntrack,cpu,diskstats,filesystem,loadavg,meminfo,netstat 等。

node-exporter的安装和使用
docker run -d -p 8092:9100 --name todocoder-node \
  -v "/proc:/host/proc:ro" \
  -v "/sys:/host/sys:ro" \
  -v "/:/rootfs:ro" \
  --privileged=true \
  -v /etc/localtime:/etc/localtime \
  bitnami/node-exporter:1.6.1
  # -v /etc/localtime:/etc/localtime 解决时区问题

命令说明:

-v,--volume: 挂载本地目录到镜像内目录: 宿主机目录:容器目录

-p,--publish: 指定端口映射,格式为:主机(宿主)端口:容器端口

-d, --detach: 指定容器在后台运行,默认为 false

--privileged=true: 放开容器的权限

--name:todocoder-node 为容器指定一个名称,名字叫 todocoder-node ;

等待几秒钟,查看端口8092是否起来了

netstat -anpt  | grep 8092

打开页面 http://192.168.111.37:8092/metrics可以看到一些指标数据

3. 安装prometheus

Prometheus 主要是用于抓取指标、存储时间序列数据,对于普通应用只需要能够提供一个满足 prometheus 格式要求的 /metrics 接口就可以让 Prometheus 来接管监控,比如上面的 node-exporter 的 /metrics 接口,prometheus就可以直接应用。

prometheus的安装和使用

1、创建prometheus存储数据目录:

mkdir -p /data/prometheus/data
chmod 777 /data/prometheus/data

2、prometheus 配置文件挂载出来,方便修改,vi /data/prometheus/conf/prometheus.yml

rule_files:
  - rule/record/*.yml
scrape_configs:
  - job_name: "todocoder-prometheus"
    static_configs:
      - targets: ["192.168.111.37:8093"]
  - job_name: "todocoder-cadvisor"
    static_configs:
      - targets: ["192.168.111.37:8091"]
  - job_name: "todocoder-node37" # 这个是监控node
    static_configs:
      - targets: ['192.168.111.37:8092']

job_name: "todocoder-prometheus"配置抓取Prometheus自身相关指标;

job_name: "todocoder-cadvisor" 配置抓取之前配置的cAdvisor组件指标。

job_name: "todocoder-node37"配置抓取Node相关指标;

3、Docker部署Prometheus:docker pull bitnami/prometheus:2.45.0

docker run \
-d=true \
-p=8093:9090 \
--name=todocoder-prometheus \
-v=/data/prometheus/conf:/opt/bitnami/prometheus/conf \
-v=/data/prometheus/data:/opt/bitnami/prometheus/data \
bitnami/prometheus:2.45.0 \
--web.enable-lifecycle --web.enable-admin-api \
--config.file=/opt/bitnami/prometheus/conf/prometheus.yml \
--storage.tsdb.path=/opt/bitnami/prometheus/data

--web.enable-lifecycle --web.enable-admin-api提供rest api接口方式管理prometheus,比如配置热加载:curl -XPOST http://192.168.111.37:8093/-/reload。

注意:这里将prometheus配置文件和存储目录外挂出来,避免容器重启后数据丢失。

我们可以打开web页面:http://192.168.111.37:8093/graph 并输入 container_spec_memory_limit_bytes 查看数据:

图片

prometheus graph

我们在上面配置了三个 metrics指标,我们看一下效果 http://192.168.111.37:8093/targets

图片

prometheus target

4. 安装Grafana

Grafana 是一跨平台的开源的可视化分析工具。目前网络架构和应用分析中最流行的时序数据展示工具,主要用于大规模指标数据的可视化展示。

它可以大大帮助你简化监控的复杂度,你只需要提供你需要监控的数据,它就可以帮你生成各种可视化仪表。同时它还有报警功能,可以在系统出现问题时通知你。

Grafana的安装和使用
docker run \
-d=true \
-p=3001:3000 \
-v=/data/grafana:/var/lib/grafana \
--name todocoder-grafana \
grafana/grafana:9.5.6

# 默认账号/密码:admin/admin
http://192.168.111.37:3001

如果有如下报错

You may have issues with file permissions, more information here: http://docs.grafana.org/installation/docker/#migrate-to-v51-or-later mkdir: can't create directory '/var/lib/grafana/plugins': Permission denied

# 查询镜像用户ID
docker run --entrypoint "id" grafana/grafana:9.5.6
uid=472(grafana) gid=0(root) groups=0(root)

# 指定uid目录权限
chown -R 472:472 /data/grafana/
# 启动
docker restart todocoder-grafana

图片

grafana7

以上是Docker安装的流程,另外还有一键安装脚本(篇幅有限) 微信搜 TodoCoder 关注公众号回复 201 可获取源代码

添加数据集

如图的流程

图片

图片

输入对应的prometheus 服务的地址

图片

添加可视化页面
https://grafana.com/grafana/dashboards/8919-1-node-exporter-for-prometheus-dashboard-cn-0413-consulmanager
1. 打开grafana dashboards页面 -> New -> import

http://192.168.111.37:3001/dashboards

图片

2. 在import页面输入 官方的模版连接
https://grafana.com/grafana/dashboards/8919-1-node-exporter-for-prometheus-dashboard-cn-0413-consulmanager

图片

3. 打开页面看一下效果图

图片

docker-node-exporter

图片

docker-node-exporter

这个是修改后的显示页面,官方的是基于云服务商集群显示,(篇幅有限) 微信搜 TodoCoder 关注公众号回复 201 可获取源代码及最新grafana模板

结语

本文详细介绍如何在生产环境中实施全套的监控方案,包括使用Docker进行容器化管理,利用Grafana进行可视化监控,使用Prometheus进行数据收集和分析,以及使用cAdvisor和Node-exporter监控容器资源。您将逐步了解每个工具的使用方法,并学会将它们整合到一起,以实现全面的生产环境监控。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【DevOps-监控】生产环境是如何落地一套全方位的监控系统 的相关文章

  • Linux中如何查看开启了哪些端口?

    在Linux中 端口是设备与外界通讯交流的出口 常用于指TCP IP协议中的端口 其按照端口号可以分为三类 分别是 公认端口 注册端口 动态端口 那么Linux中如何查看开启了哪些端口 以下是常用命令介绍 1 使用netstat命令 net
  • 【镜像压缩】linux 上 SD/TF 卡镜像文件压缩到实际大小的简单方法(树莓派、nvidia jetson)

    文章目录 1 备份 SD TF 卡为镜像文件 2 压缩镜像文件 2 1 多分区镜像文件的压缩 树莓派 普通 linux 系统等 2 2 单分区镜像文件的压缩 Nvidia Jetson Nano 等 3 还原镜像文件到 SD TF 卡
  • 如何解读服务器的配置和架构?

    在当今数字化时代 服务器作为企业或组织的重要基础设施 其配置和架构对于保障业务的稳定运行至关重要 如何解读服务器的配置和架构 成为了一个备受关注的话题 本文将围绕服务器配置和架构的解读进行深入探讨 帮助读者更好地理解服务器的性能 扩展性和安
  • 自定义编写zabbix_agent脚本

    vi usr lib systemd system zabbix agent servicce Unit Description Zabbix Agent After syslog target After network target S
  • sonar.analysis.mode 参数的替代方案

    我正在使用 Sonarqube 7 9 和 Gitlab 以及 Maven docker 映像 该映像使用以下命令调用我的 Sonarqubemvn batch mode verify sonar sonar DskipTests true
  • Azure Linux 应用服务:从 DevOps 管道部署后安装包

    我目前正在 Azure Devops 中设置 CI CD 管道 以在 Linux 托管应用程序服务 而不是 VM 上部署 NodeJS 应用程序 我的构建和部署都很顺利 但我需要确保在部署应用程序后在环境中安装一些软件包 问题是 无论如何a
  • 如何使用 IBM Bluemix Track & Plan 管理多个组件

    我们有一个由多个不同组件 不同功能 语言 组成的应用程序 在 IBM Bluemix 中是否可以使用单个 Track Plan 功能来管理组件的工作项 但将源代码保留在单独的 git 存储库中 例如 我希望整个应用程序有一个积压工作 然后由
  • 如何利用CHAT做简单的总结体会?

    问CHAT 在测试过程中使用appium python自动化的优点和体会 CHAT回复 使用 Appium 配合 Python 进行自动化测试主要有以下几点优点 1 跨平台性 Appium 支持 iOS 和 Android 平台的应用自动化
  • preStop 钩子和终止GracePeriodSeconds 之间的关系

    基本上我想做的是研究 Pod 生命周期 并检查我们是否可以在 Pod 终止之前进行一些清理 备份 例如复制日志 我需要的 在终止之前将日志 堆转储从容器复制到 hostPath S3 我尝试过的 我使用了带有 bash 命令的 preSto
  • Azure DevOps Webhooks(服务挂钩)缺少描述或重现步骤等字段

    我正在开发 ASP NET Core 5 项目 该项目将使用我组织的 Azure DevOps Service Hooks Webhooks 的订阅 我将分析事件有效负载的数据 和元数据 我从这里检查了事件有效负载包含哪些内容 https
  • Jenkins 插件下载速度慢、安装失败了!我教你怎么解决!

    Jenkins部署完毕 如果不安装插件的话 那它就是一个光杆司令 啥事也做不了 所以首先要登陆管理员账号然后点击系统管理再点击右边的插件管理安装CI CD必要插件 但是问题来了 jenkins下载插件速度非常慢 而且经常提示下载插件失败 真
  • messages,CentOS 7不收集日志或不存在 /var/log/messages

    var log message var log secure等都不记录了 并且都是空文件 重启机器 reboot 无效 重启日志 systemctl start rsyslog 无效 怀疑空间不足 删除 var log messages 重
  • 步骤详图 教你在linux搭建容器环境

    警告 切勿在没有配置 Docker YUM 源的情况下直接使用 yum 命令安装 Docker 1 准备工作 系统要求 要安装Docker CE 社区版 操作系统的最低要求是CentOS7 7以下版本都不被支持 卸载旧版本 Docker改版
  • 基于java的物业管理系统设计与实现

    基于java的物业管理系统设计与实现 I 引言 A 研究背景和动机 物业管理系统是指对物业进行管理和服务的系统 该系统需要具备对物业信息 人员信息 财务信息等进行管理的能力 基于Java的物业管理系统设计与实现的研究背景和动机主要体现在以下
  • Kubernetes (十二) 存储——Volumes配置管理

    一 卷的概念 官方地址 卷 Kubernetes https v1 24 docs kubernetes io zh cn docs concepts storage volumes 二 卷的类型及使用 emptyDir卷 1 创建编辑文件
  • 服务器VPS是什么意思?一文了解其含义与重要性

    在今天的数字时代 服务器扮演着至关重要的角色 它们是网站 应用程序和在线业务的基石 但是 你是否听说过VPS 本文将深入探讨什么是服务器VPS 以及为什么它在今天的互联网世界中如此重要 什么是服务器VPS 服务器的基本概念 在我们深入探讨V
  • Azure Devops 的工件页面中显示意外错误

    我想开始使用我的订阅在 Azure Devops 中创建源 但是当我单击 Artifacts 菜单时 出现此错误 每个人都会遇到这种情况吗 所以我猜这是他们试图实现的预览功能的问题 所以我们需要暂时将其关闭 用户设置 gt 预览功能 gt
  • 将 APK 发布到 Play 商店时出现构建版本问题

    我看过很多答案 但大多数都已经过时了 我正在尝试使用 Azure DevOps 管道将我的 Android 应用程序发布到 Play 商店 我遇到了 APK 版本代码的问题 出现以下错误 APK指定已使用的版本代码 任何人都知道如何增加存在
  • Terraform 规划自动化中人类可读的输出

    我已经通过 github jenkins 设置了自动化 以通过 jenkins 发布 repo 的 terraform plan 的输出 作为对 github 中拉取请求的评论 整个编排工作得很好 除了 terraform plan 的输出
  • 在 Subversion 中合并分支时预防冲突

    我最近在 Subversion 中观察到一个非常奇怪的合并冲突 我使用乌龟SVN作为客户端 干线和分行详细信息请参见以下信息 树干 两个用户正在研究这个问题 QA 是主干合并将发生的分支 为了简单起见 trunk ClassLibrary1

随机推荐

  • STM32 us精确延时方式

    STM32精确延时方式 使用TIM定时器方式延时 使用空代码方式延时 F103系列 F429系列 本文纯属记录自己学习历程 如有不妥之处 欢迎指正 使用TIM定时器方式延时 使用STM32CubeMX配制TIM1定时 如下图所示 自动重装载
  • Flutter 修改appBar 高度

    Scaffold appBar PreferredSize child AppBar title Text AppBar bottom appBarView preferredSize Size fromHeight 60 0 自定义高度
  • C++输出螺旋数组

    C 输出螺旋数组 思路 具体实现代码如下 1 建立二维数组 2 声明变量 3 循环开始 3 1 第一个循环 数组从左到右赋值 3 2 第二个循环 数组从上到下赋值 3 3 第三个循环 数组从右到左赋值 3 4 第四个循环 数组从下到上赋值
  • vue3调用摄像头,做校验,没有摄像头或者不成功,提示用户

    检查浏览器是否支持getUserMedia方法 if navigator mediaDevices navigator mediaDevices getUserMedia 请求访问相机设备 navigator mediaDevices ge
  • SpringMvc源码分析(二) 请求执行前的准备过程:@Controller/@RequestMapping注解解析为RequestMappingInfo的过程

    在SpringBoot项目中 应用在启动时会扫描项目中的 Controller和 RequestMapping注解 并将其解析为RequestMapping Bean类型的对象供DispatcherServlet调用 本文主要分析这个解析的
  • 前端js的event光标事件实现div方块移动

    方法一 普通做法 div div
  • python入门学习小工具制作系列各种小工具整理

    一 制作基于windows系统批量重命名文件小工具 参考博客 使用python做一个批量重命名文件的小工具 讷言丶的博客 CSDN博客 效果展示 临时01 代码实现 import os from tkinter import filedia
  • 全面了解环保HJ212协议和使用

    1 环保HJ212协议介绍 环保HJ212协议是在环保行业中使用的数据传输协议 数据终端 采集终端 环保仪等终端设备把采集好的数据发送到环保平台使用这个协议 这个协议是环保行业的标准协议 所以实现了各种终端和平台之间的完美对接 只要符合协议
  • 送书 | 《商品期货量化交易实战》

    今天是周三 又到了给大家送书的时刻啦 这次给大家带来的是 商品期货量化交易实战 文末查看送书规则 简介 本书首先讲解量化交易基础和Python编程入门 再讲解量化交易API 然后讲解CTA的趋势跟踪策略和回归策略 并且配合量化交易策略实战案
  • leetcode【2023】

    什么是华为OD机试 华为OD机试是华为的笔试 因为是在电脑上做题 所以称为机试 主要用于评估求职者是否适合所申请的职位 华为OD机试通常涵盖了多个测试领域 如算法构造 编程技巧以及错误修复等 其目标是全面评估求职者的基础知识 实践技能和编程
  • gojs 绘制UML连线图

  • A Survey on Deep Transfer Learning 2018 翻译

    A Survey on Deep Transfer Learning 2018 翻译 o 虽然这篇文章是2018年的 不是很新 但是写的通俗易懂 很适合刚接触迁移学习的同学 所以就翻译了 independent and identicall
  • Python基础知识(七):类、对象与魔法方法

    类与对象 1 对象 属性 方法 对象是类的实例 换句话说 类主要定义对象的结构 然后我们以类为模板创建对象 类不但包含方法定义 而且还包含所有实例共享的数据 封装 信息隐蔽技术 我们可以使用关键字 class 定义 Python 类 关键字
  • CSS3 SVG实现可爱的动物哈士奇和狐狸动画

    点击上方公众号 可快速关注 英文 David Khourshid 译文 码农网 小峰 www codeceo com article css3 svg husky and fox html 今天 我想向大家展示如何巧妙地使用HTML CSS
  • 论"大数据"时代下的海量数据存储技术

    高清 长周期呈现海量存储需求 高清已经在安防行业全面铺开应用 除了带给用户能够看得更清的良好视觉感受外 对存储容量的需求亦成几何式增长 例如 前端IPC有130W到500W像素 码流也从有2Mbps到8Mbps 而一个130W像素 8Mbp
  • 开源OCR引擎Tesseract-OCR

    Overview Tesseract的OCR引擎最先由HP实验室于1985年开始研发 至1995年时已经成为OCR业内最准确的三款识别引擎之一 然而 HP不久便决定放弃OCR业务 Tesseract也从此尘封 数年以后 HP意识到 与其将
  • VSCode 必装的 10 个高效开发插件

    本文介绍了目前前端开发最受欢迎的开发工具 VSCode 必装的 10 个开发插件 用于大大提高软件开发的效率 VSCode 的基本使用可以参考我的原创视频教程 VSCode 高效开发必装插件 VSCode Visual Studio Cod
  • jquery val() 获取不到值的问题排查

    表单校验用jquery validation 实现 基本功能很快实现 在测试时发现自定义的一个比较开始结束日期的校验不起作用 var begin param val var reg new RegExp g begin begin repl
  • arcgis 9.3 sde 安装 启动服务问题

    1 arcgis 9 3 注册 服务 命令 sdeservice o create d oracle orcl p sde i esri sde 2 启动 sde 服务 报错 3 以上1命令在机器上执行不认 用以下命令 sdeservice
  • 【DevOps-监控】生产环境是如何落地一套全方位的监控系统

    生产环境监控究竟需什么样的功能 我们试想一下 如果部署一个监控系统到生产环境 需要满足哪些功能呢 既然是监控 肯定需要监控我们的主机资源信息包括cpu 内存 网络 磁盘等信息吧 其次还得监控容器的相关资源信息 然后我们可能还需要历史数据 几