Prometheus中的关键设计

1、标准先行,注重生态

Prometheus 最重要的规范就是指标命名方式,数据格式简单易读。比如,对于应用层面的监控,可以要求必须具备这几个信息。

  • 指标名称 metric

Prometheus 内置建立的规范就是叫 metric(即 __name__)。如果是 Counter 类型,单调递增的值,指标名称以 _total 结尾。

  • 服务名称 service

服务名称 service 要全局唯一,比如 n9e-webapi,p8s-alertmanager,一般是系统名称加上模块名称,组成最终的服务名称。

  • 实例名称 instance

一个服务一般会部署多个实例,可以直接使用机器名或 Pod 名作为 instance 名称。如果在物理机部署,有实例混部的情况,就要把端口加上,比如实例一是 10.1.2.3:3306,实例二是 10.1.2.3:3307。

  • 服务类型 job

比如所有的 MySQL 的监控数据,都统一打上 job=mysql 的标签,Redis 的监控数据,就打上 job=redis 的标签。如果是自研的模块,也可以使用 webserver backend frontend 这种分类方式。

  • 地域可用区 zone

把地域信息放到标签里,有个巨大的好处,比如某个 zone 出问题了,就比较容易看出来,带有某个特定的 zone 的指标数据异常,快速执行切流止损即可。有了 zone 的信息,region 就可有可无了,zone 的前缀一般就是 region。

  • 集群名称 cluster

有的时候一个可用区会部署多个集群,特别是一些中间件,比如 ElasticSearch,给每个重要的业务单独部署一个集群,一个大公司可能有几百套 ElasticSearch 集群,几千套 ZooKeeper 集群。

  • 环境类型 env

环境类型 env 用来标识是生产环境还是测试环境。当然了,如果监控系统不复用(推荐这么做),生产用生产的监控系统,测试用测试的监控系统,就无需这个标签了。

2、主要使用拉模式

Prometheus 主要使用拉模式获取指标,辅以推模式(Pushgateway 的职能)。很多监控系统都是推模式,比如 Datadog、Open-Falcon、Telegraf+InfluxDB 组合。

 拉模式有个最重要的优势,就是解耦。Prometheus 支持各种服务发现机制,尤其是基于 Kubernetes 的服务发现机制,是最常见的。如果服务没有部署在 Kubernetes 中,而是部署在传统物理机或虚拟机上,这个时候就需要使用 Consul 之类的服务发现机制。

中间件类使用拉模式,自研的服务使用推模式,自研的服务如果都接入了注册中心,则也可以使用拉模式。

3、监控目标动态发现机制

云原生之后,基础设施动态化,监控目标的创建、销毁都比较频繁,就需要有一个更自动化的机制来获取监控目标列表。

Prometheus 内置了多种服务发现机制,最常见的有四种。

  • 基于配置文件的发现机制:这种方式看起来很低端,其实非常常用,因为可以配合配置管理工具一起使用,非常方便。使用配置管理工具批量更新配置,然后让监控系统重新加载一下就可以了,比较丝滑。
  • 基于 Kubernetes 的发现机制:Kubernetes 中有很多元信息,通过调用 kube-apiserver,可以轻易拿到 Pod、Node、Endpoint 等列表,Prometheus 内置支持了 Kubernetes 的服务发现机制,让这个过程变得更简单,Prometheus 基本成为了 Kubernetes 监控的标配。
  • 基于公有云 API 的发现机制:比如要监控公有云上所有的 RDS 服务,一条一条配置比较麻烦,这个时候就可以基于公有云的 OpenAPI 做一个服务发现机制,自动拉取相关账号下所有 RDS 实例列表,大幅降低管理成本。
  • 基于注册中心的发现机制:社区里最为常用的是 Consul,典型场景是 PING 监控和 HTTP 监控,把所有目标注册到 Consul 中,然后读取 Consul 生成监控对象列表即可。

4、基于配置文件的管理方式

Prometheus 的告警规则管理、记录规则管理、抓取配置管理与发送策略管理,全部是基于配置文件的,这虽然不是一个关键设计,但确实是一个非常有特色的设计。

这个方式有两个好处,一个是简单,简单到令人发指,很多监控系统都是使用数据库来存储各类配置的,Prometheus 则直接使用 Yaml 文件,非常直观。第二个好处就是便于自动化,配合配置管理工具、Git、Kubernetes 等,与 Infrastructure as Code 的管理风潮非常契合。

可以把各个 Prometheus 中的核心关键指标抽取到一个统一的地方来呈现,比如使用 Prometheus 联邦机制,只共享核心指标,其余指标不需要抽取到中心,自己团队消化就好。

5、灵活的查询语言

PromQL(Prometheus Query Language)是 Prometheus 的查询语言,非常灵活。这也是 Prometheus 的一个关键设计。

采集侧是无法穷举所有计算场景的,采集侧应该采集原始数据,后续的二次计算还是应该放到中心来搞定。

PromQL 为二次计算提供了能力支持,多个指标的关联计算、多条件联合告警,都可以用 PromQL 来实现,作为现代监控系统,Query Language 已经是必备要求了。

此文章为7月Day30学习笔记,内容来源于极客时间《运维监控系统实战笔记》,推荐该课程。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 用指针处理数组元素

指针加减运算的特点使得指针特别合适于处理存储在一段连续内存空间中的同类数据。而数组恰好是具有一定顺序关系的若干同类型变量的集合体,数组元素的存储在物理上也是连续的,数组名就是数组存储的首地址。这样,便可以使用指针来对数组及其元…

使用docker 搭建nginx + tomcat 集群

创建3个Tomcat容器,端口分别映射到 8080,8081,8082,使用数据卷挂载,分别将宿主机目录下的 /opt/module/docker/tomcat3/ROOT1/,/opt/module/docker/tomcat3/ROOT2/,/opt/module/docker/tomcat3/ROOT2/ 挂载到 容器内部…

Gitignore忽略文件

默认情况下,Git会监视我们项目中的所有内容,但是有些内容比如mode_modules中的内容,我们不希望他被Git所管理。 我们可以在我们项目目录中添加一个 .gitignore 文件来设置那些需要git忽略的文件。

rest-apiV2.0.0升级为simplest-api开源框架生态之simplest-jpa发布

什么是 simplest simplest 追求存粹简单和极致。 旨在为项目快速开发提供一系列的基础能力,方便用户根据项目需求快速进行功能拓展 不在去关心一些繁琐。重复工作,而是把重点聚焦到业务。 前言 程序 10 年。作为一个多年程序。深知每个项目和程序&a…

通用商城项目(中)

金山编译器出问题了。下面段落标号全出问题了,排版也出问题了。懒得改了。 使用对象存储OSS,保存品牌logo 新建Module,提供上传、显示服务 有些不明所以的,按照steinliving-commodity配置了一通pom.xml 新建application.yml&…

实现邮箱管理之gmail邮箱、office365(Azure)邮箱之披荆斩棘问题一览

要进行Office365邮箱的授权对接,你需要先申请一个应用,并获取授权访问令牌。 以下是一个简单的步骤: 登录 Azure 门户:https://portal.azure.com/创建一个新的应用程序,或者使用现有的应用程序。要创建新的应用程序&…

从0到1开发go-tcp框架【3-读写协程分离、引入消息队列、进入连接管理器、引入连接属性】【基础篇完结】

从0到1开发go-tcp框架【3-读写协程分离、引入消息队列、进入连接管理器、引入连接属性】 1 读写协程分离[v0.7] 添加一个Reader和Writer之间通信的channel添加一个Writer goroutineReader由之前直接发送给客户端改为发送给通信channel启动Reader和Writer一起工作 zinx/znet/co…

【Golang 接口自动化05】使用yml管理自动化用例

目录 YAML 基本语法 对象:键值对的集合(key:value) 数组:一组按顺序排列的值 字面量:单个的、不可再分的值(数字、字符串、布尔值) yml 格式的测试用例 定义yml文件 创建结构体 读取yml文件中的用例数据 调试…

【1.3】Java微服务:Spring Cloud版本说明

✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。 🍎个人主页:Meteors.的博客 💞当前专栏: 微服务 ✨特色专栏: 知识分享 &#x…

【后端面经】微服务构架 (1-6) | 隔离:如何确保心悦会员体验无忧?唱响隔离的鸣奏曲!

文章目录 一、前置知识1、什么是隔离?2、为什么要隔离?3、怎么进行隔离?A) 机房隔离B) 实例隔离C) 分组隔离D) 连接池隔离 与 线程池隔离E) 信号量隔离F) 第三方依赖隔离二、面试环节1、面试准备2、基本思路3、亮点方案A) 慢任务隔离B) 制作库与线上库分离三、章节总结 …

深度学习各层负责什么内容?

1、深度学习——神经网络简介 深度学习(Deep Learning)(也称为深度结构学习【Deep Structured Learning】、层次学习【Hierarchical Learning】或者是深度机器学习【Deep Machine Learning】)是一类算法集合,是机器学习的一个分支。 深度学习方法近年来&#xff0c…

元宇宙虚拟展厅的特点是什么呢?优势有哪些?

元宇宙是一个很广阔的虚拟世界,它可以创造出更为丰富、沉浸式的体验,这种全新的体验为展览和艺术领域带来了更多的可能性,元宇宙虚拟展厅以其多样化、互动性、沉浸式展示的特点,带领大家进入一个虚拟现实的全新世界。 元宇宙虚拟展…

MACOM EDI 需求分析

MACOM 是一家全球性半导体公司,专注于设计和制造高性能射频、微波和光电元件,其产品被广泛应用于通信、航空航天、国防、工业和医疗等领域。随着 MACOM 的不断发展,传统数据传输方式效率较低,无法满足 MACOM 的需求。为了提高企业…

使用自适应去噪在线顺序极限学习机预测飞机发动机剩余使用寿命(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

代理模式--静态代理和动态代理

1.代理模式 定义:代理模式就是代替对象具备真实对象的功能,并代替真实对象完成相应的操作并且在不改变真实对象源代码的情况下扩展其功能,在某些情况下,⼀个对象不适合或者不能直接引⽤另⼀个对象,⽽代理对象可以在客户…

【前端知识】React 基础巩固(三十六)——RTK中的异步操作

React 基础巩固(三十六)——RTK中的异步操作 一、RTK中使用异步操作 引入RTK中的createAsyncThunk,在extraReducers中监听执行状态 import { createSlice, createAsyncThunk } from "reduxjs/toolkit"; import axios from "axios";export cons…

Spring事务传播机制、实现方式、失效场景即原理

贴一篇源码分析的好文章:https://blog.csdn.net/qq_30905661/article/details/114400417 本质: 一个事务对应一个数据库连接。 通过 this 来调用某个带有 Transactional 注解的方法时,这个注解是失效的,可以看做这个方法&#x…

安防视频汇聚平台EasyCVR视频广场面包屑侧边栏支持拖拽操作

智能视频监控平台EasyCVR能在复杂的网络环境中,将海量设备实现集中统一接入与汇聚管理,实现视频的处理与分发、录像与存储、按需调阅、平台级联等。 TSINGSEE青犀视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协…

2023年中职组“网络安全”赛项吉安市竞赛任务书

2023年中职组“网络安全”赛项 吉安市竞赛任务书 一、竞赛时间 总计:360分钟 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略配置 A-3 流量完整性保护 A-4 事件监控 A-5 服务加固…