2024年Go最全Prometheus 架构全面解析_prometheus架构(1),Golang开发面试准备

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  - targets: ['localhost:9090'] 
  • job_name: ‘node-exporter’
    static_configs:
    • targets: [‘node-exporter:9100’]

alerting:
alertmanagers:
- static_configs:
- targets: [‘alertmanager:9093’]


### ****时序数据库(TSDB)****


prometheus 接收的指标数据会随时间变化(CPU、内存、网络 IO 等)。它称为时间序列数据。因此,Prometheus 使用**时间序列数据库** (TSDB) 来存储其所有数据。


默认情况下,Prometheus 将其所有数据以**有效的格式(块)**存储在本地磁盘中。随着时间的流逝,它会**压缩所有旧数据**以节省空间。它还具有保留策略来删除旧数据。


Prometheus 还提供**远程存储选项**。这主要是存储可扩展性、长期存储、备份和灾难恢复等所必需的。


### ****Prometheus 目标****


Target 是 Prometheus 抓取指标**的来源**。目标可以是服务器、服务、[Kubernetes Pod、]( )应用程序端点等。




[![Prometheus 目标](https://img-blog.csdnimg.cn/img_convert/3ac68d6b791d7cbc96dabd84e50b797e.png)](https://devopscube.com/wp-content/uploads/2023/12/target.png)



默认情况下,prometheus 在目标路径下查找指标。可以在目标配置中更改默认路径。这意味着,如果您未指定自定义指标路径,Prometheus 会在 **`/metrics`** 下查找指标。`**/metrics**`


目标配置位于配置文件的**scrape\_configs**下。下面是一个示例配置。`Prometheus`



scrape_configs:

  • job_name: ‘node-exporter’
    static_configs:

    • targets: [‘node-exporter1:9100’, ‘node-exporter2:9100’]
  • job_name: ‘my_custom_job’
    static_configs:

    • targets: [‘my_service_address:port’]
      metrics_path: ‘/custom_metrics’
  • job_name: ‘blackbox-exporter’
    static_configs:

    • targets: [‘blackbox-exporter1:9115’, ‘blackbox-exporter2:9115’]
      metrics_path: /probe
  • job_name: ‘snmp-exporter’
    static_configs:

    • targets: [‘snmp-exporter1:9116’, ‘snmp-exporter2:9116’]
      metrics_path: /snmp

从目标端点,prometheus **需要特定文本格式的数据**。每个指标都必须位于新行上。


通常,这些指标使用在目标上运行的 **prometheus 导出器**在目标节点上公开。


### ****Prometheus 导出器****


导出器就像在目标上运行的代理。它将**指标**从特定系统转换为 prometheus 理解的格式。


它可以是 CPU、内存等系统指标,也可以是 Java JMX 指标、MySQL 指标等。




[![Prometheus 导出商](https://img-blog.csdnimg.cn/img_convert/0009062089afa58b3d6bc9e65115b011.png)](https://devopscube.com/wp-content/uploads/2024/01/image-118.png)



默认情况下,这些转换后的指标由导出器在目标的 **`/metrics`** 路径(HTTPS 端点)上公开。


例如,如果要监视服务器的 CPU 和内存,则需要在该服务器上安装节点导出器,**并且节点导出器**会在 **`/metrics`** 上以 prometheus 指标格式公开 **CPU 和内存**指标。


一旦 Prometheus **提取**了指标,它将组合**指标名称、标签、值和时间戳**,为该数据提供**结构**。


有很多社区**导出器**可用,但只有其中一些得到了 Prometheus 的正式批准。如果需要更多自定义项,则需要创建自己的导出器。


Prometheus 将导出器分为各个部分,例如数据库、硬件、问题跟踪**器**和持续集成、消息传递系统、存储、公开 Prometheus 指标的软件、其他第三方实用程序等。


您可以从[官方文档]( )中查看每个类别的**出口商**列表。


在 Prometheus 配置文件中,所有导出器的详细信息都将在 .`scrape_configs`



scrape_configs:

  • job_name: ‘node-exporter’
    static_configs:

    • targets: [‘node-exporter1:9100’, ‘node-exporter2:9100’]
  • job_name: ‘blackbox-exporter’
    static_configs:

    • targets: [‘blackbox-exporter1:9115’, ‘blackbox-exporter2:9115’]
      metrics_path: /probe
  • job_name: ‘snmp-exporter’
    static_configs:

    • targets: [‘snmp-exporter1:9116’, ‘snmp-exporter2:9116’]
      metrics_path: /snmp

### **Prometheus 服务发现**


Prometheus 使用两种方法从目标中抓取指标。


1. 静态配置:当目标具有**静态** IP 或 DNS 端点时,我们可以将这些端点用作目标。
2. **服务发现:**在大多数自动缩放系统和分布式系统(如 Kubernetes)中,目标不会有静态终结点。在这种情况下,将使用 prometheus 服务发现来发现目标端点,并将目标自动添加到 prometheus 配置中。




[![Prometheus 服务发现](https://img-blog.csdnimg.cn/img_convert/21c07074d8b76aa8ce51ee4aa2e628f9.png)](https://devopscube.com/wp-content/uploads/2023/12/service-discovery-2.png)



在继续之前,让我展示一个使用 **Prometheus 配置文件**的 **Kubernetes 服务发现**块的小示例。`kubernetes_sd_configs`



scrape_configs:
- job_name: ‘kubernetes-apiservers’
kubernetes_sd_configs:
- role: endpoints
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
action: keep
regex: default;kubernetes;https


Kubernetes 是**动态目标**的完美示例。在这里,您不能使用静态目标方法,因为 [Kubernetes 集群]( )中的目标(Pod)本质上是短暂的,并且很可能是短暂的。


Kubernetes 中还有**基于文件的服务发现**。它适用于静态目标,但经典静态配置与静态**配置**之间的主要区别在于,在这种情况下,我们创建**单独的 JSON 或 YAML 文件**并将目标信息保存在其中`file_sd_configs`。Prometheus 将读取文件以识别目标。`static_configs``file_sd_configs`


不仅这两个,还有各种服务发现方法可用,例如 consul\_sd\_configs(prometheus 从 [consul]( ) 获取目标详细信息)、ec2\_sd\_configs等。


要了解有关配置详细信息的更多信息,请访问[官方文档]( )。


### **Prometheus 推送网关**


默认情况下,Prometheus 使用拉取机制来获取指标。


但是,在某些情况下**,需要将指标推送**到 prometheus。


让我们举一个在 [Kubernetes cronjob]( ) 上运行的**批处理**作业的例子,该作业每天根据某些事件运行 5 分钟。在这种情况下,Prometheus 将无法使用拉取机制正确抓取**服务级别指标**。


因此,为了等待 prometheus 拉取指标,我们需要**将指标推送**到 prometheus。为了推送指标,prometheus 提供了一个名为 **Pushgateway 的解决方案。**它是一种中间网关。


**Pushgateway** 需要作为独立组件运行。批处理作业可以将指标推送到 pushgateway 端点,**Pushgateway** 会公开这些指标。然后 prometheus 从 Pushgateway 中抓取这些指标。




[![Prometheus 推送网关](https://img-blog.csdnimg.cn/img_convert/e4eac219158c9667fbf5b6649c722037.png)](https://devopscube.com/wp-content/uploads/2024/01/image-119.png)



Pushgateway 将指标数据临时存储在**内存存储中**。它更像是一个临时缓存。


**Pushgateway**配置也将在配置中的部分下进行配置。`scrape_configs``Prometheus`



scrape_configs:

  • job_name: “pushgateway”
    honor_labels: true
    static_configs:
    - targets: [pushgateway.monitoring.svc:9091]

要将指标发送到 Pushgateway,您需要使用 prometheus **客户端库**并**检测应用程序**或脚本以公开所需的指标。


### ****Prometheus 客户端库****


Prometheus **客户端**库是软件库,可用于检测应用程序代码,以 Prometheus 理解的方式公开指标。


如果需要**自定义检测**或想要创建自己的导出器,可以使用客户端库。


一个非常好的用例是需要将指标推送到 Pushgateway 的批处理作业。批处理作业需要使用客户端库进行检测,以 prometheus 格式公开需求指标。


以下示例公开了名为 **`batch_job_records_processed_total`** 的自定义指标。`Python Client Library`



from prometheus_client import start_http_server, Counter
import time
import random

RECORDS_PROCESSED = Counter(‘batch_job_records_processed_total’, ‘Total number of records processed by the batch job’)

def process_record():
time.sleep(random.uniform(0.01, 0.1))
RECORDS_PROCESSED.inc()

def batch_job():

for _ in range(100):
    process_record()

if name == ‘main’:

start_http_server(8000)
print("Metrics server started on port 8000")

batch_job()
print("Batch job completed")

while True:
    time.sleep(1)

此外,在使用客户端库**`时,HTTP 服务器prometheus_client`**端点中公开指标。`/metrics`


Prometheus 几乎为每种编程语言提供了客户端库,如果您想创建**客户端库**,也可以这样做。


要了解有关创建指南的更多信息并查看客户端库列表,您可以参考[官方文档。]( )


### **Prometheus 警报管理器**


[Alertmanager]( )是Prometheus监控系统的关键部分。它的主要工作是根据 **Prometheus 警报配置**中设置的指标阈值发送警报。


![img](https://img-blog.csdnimg.cn/img_convert/a5587edba475f065bff347b5f72af161.png)
![img](https://img-blog.csdnimg.cn/img_convert/098be94646964ecf489f379301760df8.png)
![img](https://img-blog.csdnimg.cn/img_convert/d84a4c2fe076c2bd511850c6d98c6ecf.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

链图片转存中...(img-m91wNuHj-1715371968578)]
[外链图片转存中...(img-A2X4P0eg-1715371968579)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值