[单master节点k8s部署]16.监控系统构建(一)Prometheus介绍

prometheus

prometheus是继k8s之后,第二个被托管到CNCF的项目,是一个开源的监控报警系统。

1.prometheus支持多维数据模型,每一个时间序列数据都由metric度量指标名称和它的标签label组成一组键值对。

2.Prometheus有自己的PromQL查询语言。

3.Prometheus可以直接在本地部署,不依赖分布式存储。

4.基于HTTP的pull方式采集时序数据。

5.可以通过中间网关pushgateway的方式把时间序列数据推送到Prometheus server端。

6.可以配置动态静态的服务发现。

7.搭配granfa进行可视化。

8.高效存储,每个采样数据占3.5 bytes左右。

9.可以对数据做异地备份,实现高可用。

prometheus结构

下图为Prometheus的结构,可以看到retrieval用来收集数据,要么是从例如sql、nginx等有自己exporter的服务里面收集,要么是从一些动态创建的jobs里面收集,这些生命周期较短的job会把自己的数据推送到pushgateway,然后统一由retrieval收集。

TSDB全称为time series database,是存储时序数据的数据库,由promQL语言进行操作

HTTP server 是一个关键组件,它主要负责处理外部的 HTTP 请求。这包括接收来自用户(通过 Prometheus 的 Web UI)、API 客户端(如 Grafana)或其他系统(如 Alertmanager)的查询和命令。

服务发现:可以配置静态的服务发现如file_sd,或者动态的服务发现如k8s集群中的服务发现。

TSDB可以配置报警规则,但是真正报警的是alertmanager。

zbbix

zbbix是一个发展了十年的监控插件。prometheus是用go开发的,zbbix是用C++开发的。zbbix用的是关系型数据库,而Prometheus使用的是时序数据库,更适合数据聚合。Prometheus安装比较复杂,而zbbix安装比较简单。

部署方式

基本高可用:每个节点部署一个Prometheus,共享数据,但是一旦一个节点上的Prometheus坏掉,就会导致数据丢失。这种方式在Prometheus server前面放置一个elastic load balancer,用来负载均衡。基本的 HA 模式只能确保 Promthues 服务的可用性问题,但是不解决 Prometheus Server 之间的数据 一致性问题以及持久化问题(数据丢失后无法恢复),也无法进行动态的扩展。因此这种部署方式适合监 控规模不大,Promthues Server 也不会频繁发生迁移的情况,并且只需要保存短周期监控数据的场景。

高可用+远程存储:在解决了 Promthues 服务可用性的基础上,同时确保了数据的持久化,当 Promthues Server 发生宕 机或者数据丢失的情况下,可以快速的恢复。 同时 Promthues Server 可能很好的进行迁移。因此,该 方案适用于用户监控规模不大,但是希望能够将监控数据持久化,同时能够确保 Promthues Server 的可 迁移性的场景。

基本高可用+远程存储+联邦集群:Promthues 的性能瓶颈主要在于大量的采集任务,因此用户需要利用 Prometheus 联邦集群的特性, 将不同类型的采集任务划分到不同的 Promthues 子服务中,从而实现功能分区。

三种方式如下图

数据类型

counter:只能增加的指标,一般用于计数。重启进程后会被重置。

gauge: 是一个可以增加也可以减小的类型,常用于度量当前的数值,如当前内存使用量、正在处理的任务数量或温度。重启进程后会被重置。

histogram: 柱状图。

summary: 用于表示一段时间内的数据采样结果(通常是请求持续时间或响应大小等),但它直接存储了分位数(通过客户端计算,然后展示出来),而不是通过区间来计算。

在大多数情况下人们都倾向于使用某些量化指标的平均值,例如 CPU 的平均使用率、页面的平均响应时间。这种方式的问题很明显,以系统 API 调用的平均响应时间为例:如果大多数 API 请求都维持在 100ms 的响应时间范围内,而个别请求的响应时间需要 5s,那么就会导致某些 WEB 页面的响应时间落到中位数的情况,而这种现象被称为长尾问题。
为了区分是平均的慢还是长尾的慢,最简单的方式就是按照请求延迟的范围进行分组。例如,统计
延迟在 0~10ms 之间的请求数有多少,而 10~20ms 之间的请求数又有多少。通过这种方式可以快速分析系统慢的原因。Histogram 和 Summary 都是为了能够解决这样问题的存在,通过 Histogram 和 Summary 类型的监控指标,我们可以快速了解监控样本的分布情况。
Prometheus对k8s的监控

对于k8s而言,资源可以分为以下几类:

基础设置层(Node):集群节点,为整个集群和应用提供运行时资源。

容器基础设置(Container):为应用提供环境。

用户应用(Pod): 包含一组容器。

内部负载均衡(Service): 在集群内通过Service暴露应用功能,集群内应用和应用之间访问时提供内部的负载均衡。(可以对外暴露端口,但是功能比较单一)

外部访问入口(Ingress): 通过ingress提供集群外的访问入口,从而可以使外部客户端访问到部署在kubernetes中的服务。

  • service

    • 内部负载均衡:默认情况下(ClusterIP 类型),Service 提供集群内部的负载均衡和服务发现。
    • 外部暴露:可以使用 NodePort 或 LoadBalancer 类型来暴露服务,使其可以从集群外部访问,但这些方法相对简单,适用于特定场景。
  • Ingress

    • 外部访问入口:Ingress 提供了一个更灵活和强大的方式来管理外部流量。通过 Ingress 资源,可以定义复杂的路由规则,并通过 Ingress Controller(如 Nginx Ingress Controller)来管理这些规则。
    • 高级功能:支持基于路径和主机名的路由、SSL 终结等高级功能。

基于以上分析,在不考虑k8s本身组件的情况下,对它进行监控要考虑以下5个方面:

  • 集群节点状态的监控:获取最基本的节点运行状态。
  • 节点资源用量监控:通过daemonset的形式在各个节点部署node exporter,采集节点资源的使用情况。
  • 容器运行情况的监控:通过内置在container中的cadvisor来监控容器。
  • 对Prometheus内置的监控pod的数据采集
  • k8s本身的kubelet等组件进行监控。
NodeExporter对node监控

在每个节点上部署node-exporter,以daemonset的方式

[root@master prometheus]# cat node-export.yaml 
apiVersion: apps/v1
kind: DaemonSet
metadata: 
  name: node-exporter
  namespace: monitor-sa
spec:
  selector:
    matchLabels:
       app: node-exporter
  template:
    metadata:
      name: node-exporter
      labels:
        app: node-exporter
   spec:
     hostIPC: true
     hostPID: true
     hostNetwork: true
# hostNetwork、hostIPC、hostPID 都为 True 时,表示这个 Pod 里的所有容器,
# 会直接使用宿主机的网络,直接与宿主机进行 IPC(进程间通信)通信,
# 可以看到宿主机里正在运行的所有进程。
     containers:
     - name: node-exporter
       image: prom/node-exporter:v0.16.0
       imagePullPolicy: IfNotPresent
       ports:
       - containerPort: 9100
       securityContext:
         privileged: true
       resource:
         requests:
           cpu: 0.15
       args:
       - --path.procfs
       - /host/profc
       - --path.sysfs
       - /host/sys
       - --controller.filesystem.ignored-mount-points
       - '"^/(sys|proc|dev|host|etc)($|/)"'
       volumeMounts:
       - name: dev
         mountPath: /host/dev
       - name: proc
         mountPath: /host/proc
       - name: sys 
         mountPath: /host/sys 
       - name: rootfs 
         mountPath: /rootfs
     tolerations:
     - key: "node-role.kubernetes.io/master"
       effect: "NoSchedule"
       operator: "Exists" 
     volumes: 
     - name: proc 
       hostPath: 
         path: /proc
     - name: dev 
       hostPath: 
         path: /dev 
     - name: sys 
       hostPath: 
         path: /sys 
     - name: rootfs 
       hostPath: 
         path: /

proc和sys、dev里面有node的实时运行信息。

运行成功后,可以通过metrics查看node信息,比如过滤 node_cpu_seconds,node_load等信息。

[root@master prometheus]# curl http://100.64.252.90:9100/metrics > 1.txt
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  104k  100  104k    0     0  17.7M      0 --:--:-- --:--:-- --:--:-- 20.3M
[root@master prometheus]# curl http://100.64.252.90:9100/mtrics  | grep node_load
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   150  100   150    0     0   187k      0 --:--:-- --:--:-- --:--:--  146k

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/768227.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【刷题汇总--简写单词、dd爱框框、除2!】

C日常刷题积累 今日刷题汇总 - day0031、简写单词1.1、题目1.2、思路1.3、程序实现 - 思路11.4、程序实现 - 思路2(优化) 2、dd爱框框2.1、题目2.2、思路2.3、程序实现 - 蛮力法2.4、程序实现 - 同向双指针(滑动窗口) 3、除2!3.1、题目3.2、思路3.3、程序实现 4、题目链接 今日…

Trident Dehazing Network

Trident去雾网络 【Trident:三齿的,三叉戟】 摘要 针对现有的去雾方法对非均匀雾霾的鲁棒性差,以及高雾霾区域的信息未知且难以估计,导致去雾效果模糊的问题,提出了一种由粗到精的模型Trident Dehazing Network&…

基于iview.viewUI实现行合并(无限制/有限制合并)【已验证可正常运行】

1.基于iview.viewUI实现行合并(列之间没有所属对应关系,正常合并) 注:以下代码来自于GPT4o:国内直连GPT4o 只需要修改以下要合并的列字段,就可以方便使用啦 mergeFields: [majorNo, devNam, overhaulAdvic…

查找python包的安装路径

前提:自己已经安装过的包 1、打开任一python解析器,如VSCode 2、 以matplotlib为例,敲下面命令 import matplotlibprint(matplotlib.path) 3、运行代码就可以了 需要注意: 部分包没有path(比如time)&am…

使用 Java Swing 和 XChart 创建多种图表

在现代应用程序开发中,数据可视化是一个关键部分。本文将介绍如何使用 Java Swing 和 XChart 库创建各种类型的图表。XChart 是一个轻量级的图表库,支持多种类型的图表,非常适合在 Java 应用中进行快速的图表绘制。 1、环境配置 在开始之前&…

ElementUI中的el-table解决宽度问题 - 根据内容自动撑开

在使用element-ui中,会发现表格组件el-table在未指定宽度情况下,会自动计算并给表格宽度赋值。但实际开发中,有时需要根据内容实际长度自动撑开显示,由内容的多少而决定表格的宽度,而不是默认宽度为100%。在默认情况下…

韩语日常口语留学韩语旅游韩语口语柯桥语言培训

韩语每日一词打卡:행정적[행정적]【名词】行政 原文:나라는 항상 행정적 명령을 통해 경제운행을 조절합니다. 意思:国家经常通过行政命令去调节经济的运行。 【原文分解】 1、항상[항상]总是 ,经常 2、나라[나라]国家 3、명령[명:녕]命令 …

计算机网络——数据链路层(点对点协议PPP)

点对点协议PPP的概述 对于点对点的链路,目前使用得最广泛的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)。 它主要应用于两个场景: 用户计算机与ISP之间的链路层协议就是点对点协议 PPP,1999年公布了回以在以太网上运行的PPP协…

JAVA每日作业day7.1-7.3小总结

ok了家人们前几天学了一些知识,接下来一起看看吧 一.API Java 的 API ( API: Application( 应用 ) Programming( 程序 ) Interface(接口 ) ) Java API 就是 JDK 中提供给我们使用的类,这些类将底层 的代码实现封装了起来&#x…

10 docker 安装 mysql详解

目录 一、安装mysql 1. 镜像获取 2. 简单版 2.1. 使用mysql镜像 2.2. 建库建表插入数据 2.3. 外部win 连接并插入中文数据测试 2.4. 简单版本问题 3. 创建容器-实战版 3.1. 新建容器实列并挂载卷 3.2. 新建my.cnf , 解决中文乱码 3.3. 重启容器验证 3.4. 总结 一、…

2024年精选推荐的16个向量数据库:提升你的AI应用性能

在人工智能时代,向量数据库已成为数据管理和AI模型不可或缺的一部分。向量数据库是一种专门设计用来存储和查询向量嵌入数据的数据库。这些向量嵌入是AI模型用于识别模式、关联和潜在结构的关键数据表示。随着AI和机器学习应用的普及,这些模型生成的嵌入…

聊一聊领域驱动和贫血

写在前面 前段时间跟领导讨论技术债概念时不可避免地提到了代码的质量,而影响代码质量的因素向来都不是单一的,诸如项目因素、管理因素、技术选型、人员素质等等,因为是技术债务,自然就从技术角度来分析,单纯从技术角…

UOS系统中JavaFx笔锋功能

关于笔锋功能,网上找了很久,包括Java平台客户端,Android端,相关代码资料比较少,找了很多经过测试效果都差强人意,自己也搓不出来,在UOS平台上JavaFX也获取不到压力值,只能用速度的变…

c++习题07-求小数的某一位

目录 一,问题 二,思路 三,代码 一,问题 二,思路 被除数a的类型设置为long long类型,a变量需要变大,需要更大的数据类型来存储除数b和指定的小数位置n为int类型,这两个变量的的…

计算机图形学入门23:蒙特卡洛路径追踪

1.前言 前面几篇文章介绍了Whitted-style光线追踪,还介绍了基于物理渲染的基础知识,包括辐射度量学、BRDF以及渲染方程,但并没有给出解渲染方程的方法,或者说如何通过该渲染方程计算出屏幕上每一个坐标的像素值。 Whitted-style光…

未来的钥匙在于过去:学历史的真正意义,震惊!历史竟然是偶然的?从历史中寻找未来的方向!

我们自幼接受的教育是,学历史是为了相信历史是必然的。中国人民必然战胜日寇的侵略,解放思想和改革开放必定会发生,和平和发展必定是世界的主题,中国经济必定是高速增长…… 然而,在真正的历史学家眼中,历史…

1分钟了解,预写日志WAL的核心思路...

上一篇《刷盘,还是不刷盘,是一个问题》中我们遇到了哪些问题? 1. 已提交事务未提交事务的ACID特性怎么保证? 画外音:上一篇中遇到的问题,主要是原子性与持久性。 2. 数据库崩溃,怎么实施故障恢复…

新声创新20年:无线技术给助听器插上“娱乐”的翅膀

听力损失并非现代人的专利,古代人也会有听力损失。助听器距今发展已经有二百多年了,从当初单纯的声音放大器到如今的全数字时代助听器,助听器发生了翻天覆地的变化,现代助听器除了助听功能,还具有看电视,听…

AD导入.step 3D封装

在网站查找想要的3D封装 https://www.3dcontentcentral.cn/ 下载 AD导入 在封装库下导入

融云上线 HarmonyOS NEXT 版 SDK,全面适配「纯血鸿蒙」生态

6 月 21 日,“2024 华为开发者大会”正式发布使用自研内核的原生鸿蒙系统 HarmonyOS NEXT,即 “纯血鸿蒙”。 同时,华为宣布开放“鸿蒙生态伙伴 SDK 市场”,甄选各类优质、安全的 SDK 加入聚合平台,助力各行业开发者轻…