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.mzph.cn/news/16183.shtml

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

相关文章

ICMP协议(网际报文控制协议)详解

ICMP协议(网际报文控制协议)详解 ICMP协议的功能ICMP的报文格式常见的ICMP报文差错报文目的站不可达数据报超时 查询报文回送请求或回答 ICMP协议是一个网络层协议。 一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络…

小白到运维工程师自学之路 第六十集 (docker的概述与安装)

一、概述 1、客户(老板)-产品-开发-测试-运维项目周期不断延后,项目质量差。 随着云计算和DevOps生态圈的蓬勃发展,产生了大量优秀的系统和软件。软件开发人员可以自由选择各种软件应用环境。但同时带来的问题就是需要维护一个非…

spring-authorization-server (1.1.1)自定义认证

前言 注意:我本地没有生成公钥和私钥,所以每次启动项目jwkSource都会重新生成,导致之前认证的token都会失效,具体如何生成私钥和公钥以及怎么配置到授权服务器中,网上有很多方法自行实现即可 之前有个项目用的0.0.3的…

Vue(待续)

概念 一套用于构建用户界面的渐进式JavaScript框架 Vue可以自底向上逐层的应用: 简单应用:只需一个轻量小巧的核心库。 复杂应用:可以引入各式各样的Vue插件。 1.采用组件化模式,提高代码复用率、且让代码更好维护。 2.声明式编码,让编码人员…

【设计模式——学习笔记】23种设计模式——装饰器模式Decorator(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 生活案例咖啡厅 咖啡定制案例 装饰者模式介绍介绍出场角色 案例实现案例一(咖啡厅问题)类图代码实现咖啡样式拓展代码实现 案例二类图代码实现 装饰着模式在IO流源码的应用总结什么是父类和子类的一致性如何让自己和被委托对象有一致性 文章说明…

深度学习和神经网络

人工神经网络分为两个阶段: 1 :接收来自其他n个神经元传递过来的信号,这些输入信号通过与相应的权重进行 加权求和传递给下个阶段。(预激活阶段) 2:把预激活的加权结果传递给激活函数 sum :加权 f:激活…

【Linux】UDP协议

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录 👉传输层&a…

Mysql的锁

加锁的目的 对数据加锁是为了解决事务的隔离性问题,让事务之前相互不影响,每个事务进行操作的时候都必须先加上一把锁,防止其他事务同时操作数据。 事务的属性 (ACID) 原子性 一致性 隔离性 持久性 事务的隔离级别 锁…

Python入门【__init__ 构造方法和 __new__ 方法、类对象、类属性、类方法、静态方法、内存分析实例对象和类对象创建过程(重要)】(十四)

👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误…

[C++] 类与对象(上)

目录 1、前言 2、类的引入 3、类的定义 3.1 类的两种定义方式 4、类的访问限定符 5、类的作用域 6、类的实例化 7、类对象模型 7.1 内存对齐规则 7.1 类对象的存储方式 8、this指针 8.1 this指针的特性 8.2 this指针是否可以为空 1、前言 C语言是面向过程的&#…

DUBBO服务多网卡,服务调用失败

如果服务器是多网卡的,比如安装了docker,有一个docker虚拟网卡,一个实体网卡eth0,当我们运行springboot应用后,dubbo注入到zk的地址是 docker虚拟网卡的地址172网段,而不是实际内网地址192网段,…

类的封装和包(JAVA)

封装 所有的OOP语言都会有三个特征: 封装;继承;多态。 本篇文章会为大家带来有关封装的知识。 在我们日常生活中可以看到电视就只有那么几个按键(开关,菜单……)和一些接口,而而我们通过这些东…

【计算机视觉|人脸建模】SOFA:基于风格、由单一示例的2D关键点驱动的3D面部动画

本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:SOFA: Style-based One-shot 3D Facial Animation Driven by 2D landmarks 链接:SOFA: Style-based One-shot 3D Facial Animation Driven by 2D landmarks | Proceedings of …

jmeter压力测试指标解释

目录 RT(response time) Throughput 吞吐量 并发用户数 QPS (query per seconds) TPS (transition per seconds) PV和UV 聚合报告: RT(response time) 什么是RT? RT就是指系统在接收到请求和做出相应这段时间跨度 但是值得一提的是RT的值越高,并不真的就能…

什么是云原生和 CNCF?

一、CNCF简介 CNCF:全称Cloud Native Computing Foundation(云原生计算基金会),成立于 2015 年 12 月 11 日,是一个开源软件基金会,它致力于云原生(Cloud Native)技术的普及和可持续…

Klipper seria.c 文件代码分析

一. 前言 Klipper 底层硬件的串口模块程序写的是否正确是决定下位机与上位机能否正常通信的前提,如果这个文件的驱动没写好,那上位机控制下位机就无从谈起,更无法通过上位机去验证下位机程序的正确性。 本篇博文将详细解析 Klipper src 文件夹…

809协议

809协议 目录概述需求: 设计思路实现思路分析1.809协议数据流——链路管理类 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,…

在idea中添加try/catch的快捷键

在idea中添加try/catch的快捷键 在idea中添加try/catch的快捷键 ctrlaltt 选中想被try/catch包围的语句,同时按下ctrlaltt, 出现下图 选择try/catch即可。

Elasticsearch搜索引擎系统入门

目录 【认识Elasticsearch】 Elasticsearch主要应用场景 Elasticsearch的版本与升级 【Elastic Stack全家桶】 Logstash Kibana Beats Elasticsearch在日志场景的应用 Elasticsearch与数据库的集成 【安装Elasticsearch】 安装插件 安装Kibana 安装Logstash 【认…

C# 2的幂

231 2的幂 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n 2x ,则认为 n 是 2 的幂次方。 示例 1: 输入:n 1 输出&a…