首页 > 其他分享 >Prometheus多集群监控的3种方案,你选哪种?

Prometheus多集群监控的3种方案,你选哪种?

时间:2024-03-14 09:24:38浏览次数:32  
标签:__ prometheus 哪种 Prometheus 集群 token k8s

本文分享自华为云社区《Prometheus多集群监控方案》,作者: 可以交个朋友。

一、背景

不少用户在k8s集群外裸机环境部署了prometheus监控组件想要查询k8s集群的监控指标,又或者是想采集多个k8s集群中的节点指标,容器指标,master组件指标等。

二、Prometheus多集群监控能力介绍

当前通过Prometheus采集多套k8s集群中的容器指标通常有三种方式。

  • 通过APIServer代理的方式获取k8s集群指标,直接在prometheus.yml配置相关其他kubernetes集群信息,实现一个prometheus同时采集多个kubernetes集群信息
  • 通过prometheus 联邦模式,实现一个prometheus拉取其他prometheus 数据

  • 通过Prometheus Agent模式remote write远端存储,实现多个prometheus向同一个prometheus 输出数据(推荐)

三种方式对比分析

  • APIServer方式解决了数据冗余的方式,但是引入了配置的复杂性。同时随着k8s集群规模扩大,走APIServer代理请求获取集群指标数据对AIserver负载过大。
  • Prometheus联邦机制相对来说配置简单,最早的多集群监控方案。但是缺点也很明显: 占用资源较多,出现数据冗余; global Prometheus 汇总叶子Prometheus数据,处理数据压力大。
  • Prometheus Agent remote write方案配置简单,可以解决多集群监控数据冗余问题。同时可在remotewrite中配置过滤规则,减轻远端Prometheus数据处理压力

综上所述关于多集群监控方式,比较推荐Prometheus Agent remote write方案

三、配置实现

3.1 一个prometheus同时采集多个kubernetes集群操作

promethues通过配置bearer token,利用apiserver 代理的的形式,获取k8s集群的node指标,容器指标。

在目标集群创建Prometheus访问Kubernetes资源对象的RBAC资源

kubectl apply -f prometheus_rbac.yaml,目的为了Prometheus使用该serviceAccount能够自动发现集群相关资源,并拥有执行get list 等权限

apiVersion: v1
kind: ServiceAccount
metadata:
  name: prometheus-test
  namespace: kube-system

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: prometheus-test
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  - services
  - endpoints
  - pods
  - nodes/proxy
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - "extensions"
  resources:
    - ingresses
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - configmaps
  - nodes/metrics
  verbs:
  - get
- nonResourceURLs:
  - /metrics
  verbs:
  - get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: prometheus-test
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus-test
subjects:
- kind: ServiceAccount
  name: prometheus-test
  namespace: kube-system
从目标集群获取token凭证

1.21以前版本的集群中,Pod中获取Token的形式是通过挂载ServiceAccount的Secret来获取Token,这种方式获得的Token是永久的。该方式在1.21及以上的版本中不再推荐使用,并且根据社区版本迭代策略,在1.25及以上版本的集群中,ServiceAccount将不会自动创建对应的Secret。可参考kubernetes官方提供的如何创建长期token: https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-service-account/#manually-create-an-api-token-for-a-serviceaccount

将对应token保存为文件,为了演示便利,本Prometheus使用虚拟形态部署

在prometheus配置中写入其他集群信息,并启动
- job_name: k8s_cAdvisor
    scheme: https
    bearer_token_file: k8s_token
    tls_config:
      insecure_skip_verify: true
    kubernetes_sd_configs:  #kubernetes 自动发现配置
    - role: node    #node类型的自动发现
      bearer_token_file: k8s_token   #步骤1中创建的token文件
      api_server: https://192.168.0.153:5443  #k8s集群 apiserver地址
      tls_config:
        insecure_skip_verify: true   #跳过对服务端的认证
    relabel_configs:  #用于在抓取metrics之前修改target的已有标签
    - target_label: __address__
      replacement: 192.168.0.153:5443
      action: replace
      ##将metrics_path地址转换为/api/v1/nodes/${1}/proxy/metrics/cadvisor
      #相当于通过APIServer代理到kubelet上获取数据
    - source_labels: [__meta_kubernetes_node_name]   #指定我们需要处理的源标签
      regex: (.+)    #匹配源标签的值,(.+)表示源标签什么值都可以匹配上
      target_label: __metrics_path__     #指定了需要replace后的标签
      replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor  # 表示替换后的标签即__metrics_path__  对应的值。其中${1}表示正则匹配的值,即nodename
    - target_label: cluster  为该集群下的node节点打上cluster标签便于分组管理
      replacement: k8s   #为cluster标签赋值,值可以是集群名称或者其他唯一标识符

###该job用于监控另一个集群
  - job_name: k8s02_cAdvisor
    scheme: https
    bearer_token_file: k8s02_token
    tls_config:
      insecure_skip_verify: true
    kubernetes_sd_configs: 
    - role: node    
      bearer_token_file: k8s02_token  #步骤1中创建的token文件
      api_server: https://192.168.0.147:5443
      tls_config:
        insecure_skip_verify: true
    relabel_configs:
    - target_label: __address__
      replacement: 192.168.0.147:5443
      action: replace
    - source_labels: [__meta_kubernetes_node_name]
      regex: (.+)
      target_label: __metrics_path__
      replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
    - target_label: cluster
      replacement: k8s02

启动prometheus服务: ./prometheus --config.file=prometheus.yml

3.2 prometheus联邦操作

Prometheus支持拉取其他Prometheus的数据到本地,称为联邦机制。这样我们可以在每个集群内部署一个Prometheus,然后部署一个global Prometheus用于拉取每个集群内部的Prometheus数据进行汇总。

增加联邦配置信息,并重启

  - job_name: 'federate-k8s01'
    scrape_interval: 15s

    honor_labels: true
    metrics_path: '/federate'          #固定配置

    params:
      'match[]':
       - '{job="istio-mesh"}'           #目标prometheus的监控job列表 ,根据实际情况填写
       - '{job="kubernetes-cadvisor"}' 

    static_configs:
      - targets:
        - '100.85.123.205:32298'        #目标prometheus的访问地址

3.3 prometheus remote write模式操作

Remote Write支持将k8s集群内Prometheus采集的metrics写到远程存储中,远程存储可以是Prometheus,也可以是其他时序数据库。在用户使用的时候,直接从远端存储中读取数据,并提供全局视图。

以下以华为云CCE监控插件kube-prometheus-stack为例。(开源Promethues需要手动进行配置)

被写入prometheus需要开启web.enable-remote-write-receiver,表示本prometheus接受来着其他prometheus的远程写入

需要采集指标的集群中安装kube-prometheus-stack插件

部署模式采用Agent模式,参数配置对接第三方,数据上报地址为远端存储的地址。如果远端是prometheus-server,可以填写: http://ip:port/api/v1/write

查看kube-prometheus-stack agent日志,确认remote write成功

确认中心prometheus可获取多个集群数据

点击关注,第一时间了解华为云新鲜技术~

 

标签:__,prometheus,哪种,Prometheus,集群,token,k8s
From: https://www.cnblogs.com/huaweiyun/p/18072074

相关文章

  • RedisCluster集群中的插槽为什么是16384个?
    RedisCluster集群中的插槽为什么是16384个?CRC16的算法原理。1.根据CRC16的标准选择初值CRCIn的值2.将数据的第一个字节与CRCIn高8位异或3.判断最高位,若该位为0左移一位,若为1左移一位再与多项式Hex码异或4.重复3至9位全部移位计算结束5.重复将所有输入数据操作完成以上步骤......
  • kubeadm方式部署集群
    kubeadm方式部署集群一、准备环境主机清单主机名地址角色配置kub-master10.12.153.72主节点2核4Gkub-node110.12.153.148工作节点2核4Gkub-node210.12.153.149工作节点2核4G修改主机名设置防火墙、selinux状态主机名解析cat>>/etc/hosts<<EOF10.12.153.72kube-ma......
  • Prometheus 同步告警到企业微信机器人
    方法1:一、使用webhook-adapter同步信息到企业微信1.编辑alertmanager.yml文件global:resolve_timeout:5mscrape_interval:15stemplates:-'/data/prometheus/alertmanager/template/*.tmpl'route:group_by:['alertname']group_wait:10sgroup_......
  • doris集群环境部署
    环境:OS:Centos7DB:doris2.1.1192.168.1.101febebroker192.168.1.103febebroker192.168.1.105febebroker 说明:doris2.0开始fe、be、brokser都是使用同一个安装包,解压后分别有fe、be、broker目录1.获取安装介质https://doris.apache.org/zh-CN/download/我这里下......
  • docker-compose安装minio集群
    一、docker-compose安装minio单机版直接使用docker安装单机版,可用于测试创建.env环境文件MINIO_PASSWORD=minio@123创建docker-compose.yml环境文件version:"3"services:minio:image:minio/miniocontainer_name:minioports:-9000:9000......
  • 节点加入k8s 集群的步骤
    使用kubeadm初始化集群成功后会返回join命令,里面包含token,discovery-token-ca-cert-hash等参数token的过期时间是24hcertrificate-key过期时间是2小时如果不记得,可以执行下面的命令获取1.如果没有超过24h,用下面的命令获取(主要查看是否过期)kubeadmtokenlist2.......
  • redis集群原理
    Redis集群是Redis数据库的分布式解决方案,用于提高性能、扩展性和容错能力。以下是Redis集群的一些核心原理:数据分片(Sharding):Redis集群通过将数据分片存储在多个节点上来实现水平扩展。每个节点只负责部分数据的存储和处理,从而分担整个系统的负载。主从复制(Master-Slave......
  • 升级kubeadm 集群(只有master单节点)
    具体步骤可以参考kubernetes官网:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/确定升级到哪个版本示例是从同版本1.28.2升级到1.28.7所以使用操作系统的包管理器找到最新可按照的版本中,是否有需要的补丁版本sudoyumlist--showdupl......
  • 39_配置redis集群
    配置redis集群三主三从集群设置Master1(6381)Master2(6382)Master3(6383)Slave1(6384)Slave2(6385)Slave3(6386)拉取镜像启动容器dockerpullredis:6.0.8dockerrun-d--nameredis-node-1--nethost--privileged=true-v/dataredis:6.0.8--cluster-en......
  • 分布式与集群--一起学习吧之架构
    分布式和集群都是为了提高系统的性能和可靠性而采用的技术手段。它们在实际应用中各有优势,可以互相结合使用,以实现更好的系统性能和健壮性。一、区别组织结构:分布式:将一个复杂的业务系统拆分成多个子业务系统,每个子业务系统部署在不同的服务器上。这意味着,不同的子业务运行......