ToB企服应用市场:ToB评测及商务社交产业平台

标题: 深入解读Prometheus Adapter:云原生监控的核心组件 [打印本页]

作者: 星球的眼睛    时间: 2024-6-14 22:59
标题: 深入解读Prometheus Adapter:云原生监控的核心组件


一、引言





Prometheus Adapter的背景与重要性


在今世的云原生架构中,微服务和容器化技术得到了广泛的应用。这些技术带来了系统灵活性和扩展性的提拔,但同时也增加了系统监控和管理的复杂度。Prometheus作为一款开源的监控系统,因其强盛的指标收集和查询本领,成为了许多企业和开发者的首选。然而,随着应用场景的多样化和规模的不断扩大,单纯依赖Prometheus内置的功能已经不能满足所有需求。Prometheus Adapter应运而生,作为Prometheus生态系统的重要组成部分,提供了强盛的自界说指标扩展和灵活的指标查询本领。

Prometheus Adapter的核心功能是将Prometheus中的监控数据转换为Kubernetes可识别的自界说指标,这对于实现基于自界说指标的主动扩展(Horizontal Pod Autoscaler,HPA)至关重要。在复杂的微服务架构和大规模集群管理中,通过Prometheus Adapter,用户可以自界说监控指标,举行精细化的资源管理和主动化运维,从而提拔系统的可靠性和性能。

适用场景与应用需求


Prometheus Adapter主要应用于以下几种场景:


Prometheus Adapter的功能与优势


Prometheus Adapter具备以下几项关键功能和优势:


二、Prometheus Adapter的根本概念


什么是Prometheus Adapter


Prometheus Adapter是一个开源工具,用于将Prometheus中的监控数据转换为Kubernetes自界说指标。这一转换过程使得Kubernetes可以基于这些自界说指标举行主动扩展(Horizontal Pod Autoscaler,HPA)和其他自界说操作。通过Prometheus Adapter,用户可以将复杂的业务指标引入到Kubernetes的监控和管理体系中,从而实现更灵活、更细致的资源管理。

Prometheus Adapter的出现源于对监控灵活性和扩展性的需求。在传统的监控体系中,监控指标通常固定在CPU、内存等基础资源上。然而,实际的业务需求往往更加复杂多样。比方,在电商网站中,监控订单处理时间、用户请求数等业务指标往往比单纯的资源指标更为重要。Prometheus Adapter通过将Prometheus的强盛查询功能与Kubernetes的自界说指标相结合,提供了一个办理这一需求的有效方案。

Prometheus Adapter的架构与工作原理


Prometheus Adapter的架构设计旨在高效、可靠地实现监控数据的转换和传输。其核心组件包罗配置解析器、数据查询模块和指标转发模块。以下是对这些组件的具体解析:


Prometheus Adapter与Prometheus的关系与区别


Prometheus Adapter与Prometheus之间存在精密的关系,但两者的功能定位和使用场景有所不同:


三、部署与安装


情况要求


在部署Prometheus Adapter之前,需要确保以下情况和软件组件已经正确安装和配置:







安装步骤


Prometheus Adapter的安装过程可以通过两种方式完成:使用Helm Chart举行安装或手动部署YAML文件。以下将具体先容这两种安装方式。

使用Helm Chart举行安装


  1. helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
  2. helm repo update
复制代码

  1. helm install prometheus-adapter prometheus-community/prometheus-adapter --namespace monitoring
复制代码

  1. kubectl get pods -n monitoring -l app=prometheus-adapter
复制代码

手动部署YAML文件


可以从Prometheus Adapter的GitHub仓库获取最新的部署文件:
  1. git clone https://github.com/kubernetes-sigs/prometheus-adapter.git
  2. cd prometheus-adapter/deploy/manifests
复制代码

  1. kubectl apply -f .
复制代码

同样,检查Prometheus Adapter的Pod是否成功启动:
  1. kubectl get pods -n custom-metrics
复制代码

配置详解


安装完成后,需要对Prometheus Adapter举行具体的配置,以确保其可以大概正确地与Prometheus和Kubernetes集成。配置主要通过一个YAML文件举行界说,其中包罗Prometheus的地点、自界说查询规则、以及Kubernetes API服务器的相关设置。

配置文件布局


Prometheus Adapter的配置文件通常包含以下几个部分:
界说Prometheus查询规则和Kubernetes自界说指标的映射关系。

界说自界说的Prometheus查询规则,包罗指标名称、查询语法等。

界说与Kubernetes资源相关的查询规则,如节点、Pod等。

界说怎样从Prometheus查询结果中提取和转换指标。

以下是一个示例配置文件:
  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4.   name: custom-metrics-config
  5.   namespace: custom-metrics
  6. data:
  7.   config.yaml: |
  8.     rules:
  9.       default: false
  10.       seriesQuery: 'http_requests_total{namespace!="",pod!=""}'
  11.       resources:
  12.         overrides:
  13.           namespace: {resource: "namespace"}
  14.           pod: {resource: "pod"}
  15.       name:
  16.         matches: "^(.*)_total"
  17.         as: "${1}_per_second"
  18.       metricsQuery: 'sum(rate(<<.Series>>[5m])) by (<<.GroupBy>>)'
复制代码

怎样界说自界说的指标


在配置文件中,可以通过rules部分界说自界说的Prometheus查询规则。以下是一个具体的示例:
  1. rules:
  2.   - seriesQuery: 'http_requests_total{namespace!="",pod!=""}'
  3.     resources:
  4.       overrides:
  5.         namespace: {resource: "namespace"}
  6.         pod: {resource: "pod"}
  7.     name:
  8.       matches: "^(.*)_total"
  9.       as: "${1}_per_second"
  10.     metricsQuery: 'sum(rate(<<.Series>>[5m])) by (<<.GroupBy>>)'
复制代码



不同数据源的适配


除了Prometheus,Prometheus Adapter还可以适配其他数据源,如Thanos、VictoriaMetrics等。通过在配置文件中界说不同的数据源地点和查询规则,可以实现多数据源的灵活适配。比方:
  1. prometheus:
  2.   url: http://thanos-query:9090/
  3.   path: /api/v1/query
复制代码

常见问题与办理方案


在部署和配置Prometheus Adapter的过程中,大概会遇到一些常见问题。以下是几种典型问题及其办理方案:

无法连接到Prometheus实例


办理方案


  1. curl http://prometheus-server:9090/api/v1/query?query=up
复制代码

自界说指标无法被Kubernetes识别


办理方案



查询结果为空


办理方案



查询语法错误


办理方案


  1. curl http://prometheus-server:9090/api/v1/query?query=sum(rate(http_requests_total[5m])) by (namespace, pod)
复制代码

验证配置


完成配置后,可以通过以下步骤验证Prometheus Adapter的工作情况:

  1. kubectl logs -n custom-metrics <prometheus-adapter-pod-name>
复制代码

使用kubectl命令查看自界说指标是否成功导入Kubernetes API服务器:
  1. kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq .
复制代码

创建一个基于自界说指标的HPA资源,验证其是否可以大概正常工作:
  1. apiVersion: autoscaling/v2beta2
  2. kind: HorizontalPodAutoscaler
  3. metadata:
  4.   name: custom-metrics-hpa
  5.   namespace: default
  6. spec:
  7.   scaleTargetRef:
  8.     apiVersion: apps/v1
  9.     kind: Deployment
  10.     name: my-deployment
  11.   minReplicas: 1
  12.   maxReplicas: 10
  13.   metrics:
  14.   - type: Pods
  15.     pods:
  16.       metric:
  17.         name: http_requests_per_second
  18.       target:
  19.         type: AverageValue
  20.         averageValue: 100
复制代码

通过以上步骤,可以验证Prometheus Adapter的安装和配置是否正确,以及自界说指标是否可以大概被Kubernetes正常识别和使用。

四、Prometheus Adapter的配置


配置文件详解


Prometheus Adapter的配置文件主要用于界说怎样将Prometheus中的监控数据转换为Kubernetes可识别的自界说指标。配置文件通常使用YAML格式,包含多个部分,每一部分都负责特定的配置使命。

核心配置组件



  1. metricsRelabelings:
  2.   - sourceLabels: [__name__]
  3.     separator: ;
  4.     regex: '(.*)'
  5.     targetLabel: metric_name
  6.     replacement: '${1}'
  7.     action: replace
复制代码


  1. rules:
  2.   - seriesQuery: 'http_requests_total{namespace!="",pod!=""}'
  3.     resources:
  4.       overrides:
  5.         namespace: {resource: "namespace"}
  6.         pod: {resource: "pod"}
  7.     name:
  8.       matches: "^(.*)_total"
  9.       as: "${1}_per_second"
  10.     metricsQuery: 'sum(rate(<<.Series>>[5m])) by (<<.GroupBy>>)'
复制代码


  1. resourceRules:
  2.   cpu:
  3.     name:
  4.       matches: "^(.*)_cpu_usage"
  5.       as: "custom_cpu_usage"
  6.     metricsQuery: 'sum(rate(container_cpu_usage_seconds_total{<<.LabelMatchers>>}[1m])) by (<<.GroupBy>>)'
复制代码

怎样界说自界说的指标


自界说指标的界说过程涉及编写Prometheus查询,并将其转换为Kubernetes自界说指标。以下是具体步骤:

步骤1:编写Prometheus查询


首先,在Prometheus中编写查询以获取所需的数据。比方,要获取每秒HTTP请求数,可以使用以下查询:
  1. sum(rate(http_requests_total[5m])) by (namespace, pod)
复制代码

步骤2:界说配置规则


在Prometheus Adapter的配置文件中,界说对应的查询规则和指标转换逻辑。比方:
  1. rules:
  2.   - seriesQuery: 'http_requests_total{namespace!="",pod!=""}'
  3.     resources:
  4.       overrides:
  5.         namespace: {resource: "namespace"}
  6.         pod: {resource: "pod"}
  7.     name:
  8.       matches: "^(.*)_total"
  9.       as: "${1}_per_second"
  10.     metricsQuery: 'sum(rate(<<.Series>>[5m])) by (<<.GroupBy>>)'
复制代码

上述配置中:



步骤3:部署配置文件


将配置文件部署到Kubernetes中:
  1. kubectl apply -f custom-metrics-config.yaml
复制代码

不同数据源的适配


Prometheus Adapter不但可以与Prometheus集成,还可以适配其他数据源,比方Thanos和VictoriaMetrics。配置方法雷同,通过界说不同的数据源地点和查询规则,实现灵活的多数据源适配。

适配Thanos


Thanos是一个用于Prometheus高可用性、长时间存储和多集群聚合的办理方案。可以通过以下配置适配Thanos:
  1. prometheus:
  2.   url: http://thanos-query:9090/
  3.   path: /api/v1/query
复制代码

在这种配置中,url指向Thanos查询服务的地点,path指定查询API路径。

适配VictoriaMetrics


VictoriaMetrics是一个高性能的开源时间序列数据库,兼容Prometheus。适配VictoriaMetrics的配置示比方下:
  1. prometheus:
  2.   url: http://victoriametrics:8428/
  3.   path: /api/v1/query
复制代码

高级配置本领


动态标签处理


Prometheus Adapter支持动态标签处理,通过metricsRelabelings和rules部分的配置,可以灵活处理Prometheus指标中的标签。比方:
  1. metricsRelabelings:
  2.   - sourceLabels: [__name__]
  3.     separator: ;
  4.     regex: '(.*)'
  5.     targetLabel: metric_name
  6.     replacement: '${1}'
  7.     action: replace
复制代码

分片与聚合


在大规模集群中,可以通过分片和聚合策略,提拔查询性能和数据处理效率。比方:
  1. rules:
  2.   - seriesQuery: 'container_cpu_usage_seconds_total{namespace!="",pod!=""}'
  3.     resources:
  4.       overrides:
  5.         namespace: {resource: "namespace"}
  6.         pod: {resource: "pod"}
  7.     name:
  8.       matches: "^(.*)_cpu_usage_seconds_total"
  9.       as: "${1}_cpu_usage"
  10.     metricsQuery: 'sum(rate(<<.Series>>[5m])) by (<<.GroupBy>>)'
复制代码

上述配置通过sum(rate(...))实现数据的聚合处理,适用于大规模数据场景。

常见问题与办理方案


在配置和使用Prometheus Adapter时,大概会遇到一些常见问题。以下是几种典型问题及其办理方案:

自界说指标查询失败


问题描述:配置的自界说指标无法在Kubernetes中查询到。

办理方案

  1. kubectl logs -n custom-metrics <prometheus-adapter-pod-name>
复制代码

连接Prometheus失败


问题描述:Prometheus Adapter无法连接到Prometheus实例。

办理方案

  1. curl http://prometheus-server:9090/api/v1/query?query=up
复制代码

指标名称冲突


问题描述:配置的自界说指标名称与现有指标名称冲突。

办理方案

  1. name:
  2.   matches: "^(.*)_total"
  3.   as: "${1}_custom_per_second"
复制代码

验证配置


完成配置后,可以通过以下步骤验证Prometheus Adapter的工作情况:

  1. kubectl logs -n custom-metrics <prometheus-adapter-pod-name>
复制代码

  1. kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq .
复制代码

  1. apiVersion: autoscaling/v2beta2
  2. kind: HorizontalPodAutoscaler
  3. metadata:
  4.   name: custom-metrics-hpa
  5.   namespace: default
  6. spec:
  7.   scaleTargetRef:
  8.     apiVersion: apps/v1
  9.     kind: Deployment
  10.     name: my-deployment
  11.   minReplicas: 1
  12.   maxReplicas: 10
  13.   metrics:
  14.   - type: Pods
  15.     pods:
  16.       metric:
  17.         name: http_requests_per_second
  18.       target:
  19.         type: AverageValue
  20.         averageValue: 100
复制代码

通过以上步骤,可以验证Prometheus Adapter的配置是否正确,自界说指标是否可以大概被Kubernetes正常识别和使用。

五、Prometheus Adapter实践案例


在这一部分,我们将通过实际案例展示Prometheus Adapter的应用,帮助用户理解怎样在不同场景中配置和使用Prometheus Adapter,以满足复杂的监控需求。以下是三个具体的实践案例。

案例一:Kubernetes集成Prometheus Adapter


背景


在Kubernetes集群中,水平主动扩展(HPA)主要依赖于CPU和内存的使用情况。然而,在实际应用中,许多业务场景需要基于其他指标(如请求数、响应时间等)举行扩展。通过Prometheus Adapter,可以将自界说的Prometheus指标引入到Kubernetes HPA中,实现更精细的扩展策略。

目标


通过Prometheus Adapter,将HTTP请求数这一业务指标引入到Kubernetes HPA中,实现基于请求数的主动扩展。

步骤


  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4.   name: custom-metrics-config
  5.   namespace: custom-metrics
  6. data:
  7.   config.yaml: |
  8.     rules:
  9.       - seriesQuery: 'http_requests_total{namespace!="",pod!=""}'
  10.         resources:
  11.           overrides:
  12.             namespace: {resource: "namespace"}
  13.             pod: {resource: "pod"}
  14.         name:
  15.           matches: "^(.*)_total"
  16.           as: "${1}_per_second"
  17.         metricsQuery: 'sum(rate(<<.Series>>[5m])) by (<<.GroupBy>>)'
复制代码

部署配置文件:
  1. kubectl apply -f custom-metrics-config.yaml
复制代码

使用Helm或YAML文件部署Prometheus Adapter。
  1. helm install prometheus-adapter prometheus-community/prometheus-adapter --namespace custom-metrics
复制代码

确认Prometheus Adapter已经成功导入自界说指标:
  1. kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq .
复制代码

创建一个HPA资源,基于自界说的HTTP请求数指标举行扩展:
  1. apiVersion: autoscaling/v2beta2
  2. kind: HorizontalPodAutoscaler
  3. metadata:
  4.   name: http-requests-hpa
  5.   namespace: default
  6. spec:
  7.   scaleTargetRef:
  8.     apiVersion: apps/v1
  9.     kind: Deployment
  10.     name: my-deployment
  11.   minReplicas: 1
  12.   maxReplicas: 10
  13.   metrics:
  14.   - type: Pods
  15.     pods:
  16.       metric:
  17.         name: http_requests_per_second
  18.       target:
  19.         type: AverageValue
  20.         averageValue: 100
复制代码

部署HPA配置文件:
  1. kubectl apply -f http-requests-hpa.yaml
复制代码

结果


通过上述步骤,Kubernetes集群中的应用将基于HTTP请求数的变革举行主动扩展,从而确保在高负载时有充足的资源来处理请求,同时在低负载时释放资源,优化资源使用率。

案例二:结合自界说指标举行业务监控


背景


在实际业务场景中,某电商平台需要监控每秒订单数,以确保在高峰期可以大概实时扩展资源,避免系统过载。

目标


通过Prometheus Adapter,将订单数这一业务指标引入到Kubernetes HPA中,实现基于订单数的主动扩展。

步骤


编写Prometheus Adapter的配置文件,界说从Prometheus中获取订单数的查询规则。
  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4.   name: order-metrics-config
  5.   namespace: custom-metrics
  6. data:
  7.   config.yaml: |
  8.     rules:
  9.       - seriesQuery: 'orders_total{namespace!="",pod!=""}'
  10.         resources:
  11.           overrides:
  12.             namespace: {resource: "namespace"}
  13.             pod: {resource: "pod"}
  14.         name:
  15.           matches: "^(.*)_total"
  16.           as: "${1}_per_second"
  17.         metricsQuery: 'sum(rate(<<.Series>>[5m])) by (<<.GroupBy>>)'
复制代码

部署配置文件:
  1. kubectl apply -f order-metrics-config.yaml
复制代码

使用Helm或YAML文件部署Prometheus Adapter。
  1. helm install prometheus-adapter prometheus-community/prometheus-adapter --namespace custom-metrics
复制代码

确认Prometheus Adapter已经成功导入自界说指标:
  1. kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq .
复制代码

创建一个HPA资源,基于自界说的订单数指标举行扩展:
  1. apiVersion: autoscaling/v2beta2
  2. kind: HorizontalPodAutoscaler
  3. metadata:
  4.   name: orders-hpa
  5.   namespace: default
  6. spec:
  7.   scaleTargetRef:
  8.     apiVersion: apps/v1
  9.     kind: Deployment
  10.     name: order-service
  11.   minReplicas: 2
  12.   maxReplicas: 20
  13.   metrics:
  14.   - type: Pods
  15.     pods:
  16.       metric:
  17.         name: orders_per_second
  18.       target:
  19.         type: AverageValue
  20.         averageValue: 50
复制代码

部署HPA配置文件:
  1. kubectl apply -f orders-hpa.yaml
复制代码

结果


通过上述步骤,电商平台的订单处理服务将基于每秒订单数的变革举行主动扩展,确保在订单高峰期可以大概实时扩展资源,保证服务的可用性和响应速度。

案例三:多集群情况下的Prometheus Adapter应用


背景


在多集群情况中,需要统一监控和管理不同集群的资源和应用。通过Prometheus Adapter,可以实现跨集群的统一监控和管理。

目标


通过Prometheus Adapter,实现多个Kubernetes集群的统一监控和管理。

步骤


假设已有两个Kubernetes集群:Cluster A和Cluster B,分别部署了Prometheus实例。

在Cluster A中:
  1. helm install prometheus-adapter prometheus-community/prometheus-adapter --namespace custom-metrics
复制代码

在Cluster B中:
  1. helm install prometheus-adapter prometheus-community/prometheus-adapter --namespace custom-metrics
复制代码

在每个集群的Prometheus Adapter配置文件中,分别界说从对方集群获取数据的查询规则。比方,在Cluster A的配置文件中:
  1. prometheus:
  2.   url: http://prometheus-cluster-b:9090/
  3.   path: /api/v1/query
复制代码

在Cluster B的配置文件中:
  1. prometheus:
  2.   url: http://prometheus-cluster-a:9090/
  3.   path: /api/v1/query
复制代码

在Cluster A的Prometheus Adapter配置文件中,界说从Cluster B获取的指标查询规则:
  1. rules:
  2.   - seriesQuery: 'cluster_b_http_requests_total{namespace!="",pod!=""}'
  3.     resources:
  4.       overrides:
  5.         namespace: {resource: "namespace"}
  6.         pod: {resource: "pod"}
  7.     name:
  8.       matches: "^(.*)_total"
  9.       as: "${1}_per_second"
  10.     metricsQuery: 'sum(rate(<<.Series>>[5m])) by (<<.GroupBy>>)'
复制代码

在Cluster B的Prometheus Adapter配置文件中,界说从Cluster A获取的指标查询规则:
  1. rules:
  2.   - seriesQuery: 'cluster_a_http_requests_total{namespace!="",pod!=""}'
  3.     resources:
  4.       overrides:
  5.         namespace: {resource: "namespace"}
  6.         pod: {resource: "pod"}
  7.     name:
  8.       matches: "^(.*)_total"
  9.       as: "${1}_per_second"
  10.     metricsQuery: 'sum(rate(<<.Series>>[5m])) by (<<.GroupBy>>)'
复制代码

在两个集群中,分别验证Prometheus Adapter是否成功导入跨集群自界说指标:
  1. kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq .
复制代码

结果


通过上述配置,两个集群中的Prometheus Adapter可以大概互相获取对方的监控数据,实现跨集群的统一监控和管理。在多集群情况中,用户可以通过自界说指标,实现对不同集群资源的灵活管理和主动扩展,进步系统的整体监控效率和响应本领。

   文章转载自:techlead_krischang
  原文链接:https://www.cnblogs.com/xfuture/p/18231193
  体验地点:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4