前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >prometheus k8s服务发现

prometheus k8s服务发现

作者头像
你大哥
发布2022-03-14 15:57:10
2K0
发布2022-03-14 15:57:10
举报
文章被收录于专栏:容器云实践
Prometheus的服务发现在解决什么问题?

被监控的目标(target)是整个监控体系中重要组成部分,传统监控系统zabbix通过 网络发现的机制自动创建主机到zabbix-server,进而快速地对目标进行监控。同样在Prometheus监控中存在一个叫 服务发现的机制,在k8s容器环境中由于集群内实例网络地址是动态的,我们不可能每次创建或修改实例都将实例IP写入Prometheus的target中,借助 服务发现我们可以快速的将集群内的资源注册到Prometheus-server中。

Prometheus 中的 scrape_config 是什么?

Prometheus通过yml文件来存储配置文件,通过scrape_config(抓取配置)域来配置抓取目标和抓取服务发现方式。

scrape_config指定了一组target和抓取参数。在一般情况下,一个scrape_config指定一个作业。

如下指定了两个静态服务发现prometheus、kube-state-metrics,

代码语言:javascript
复制
scrape_configs:
- job_name: prometheus
  static_configs:
  - targets:
    - localhost:9090
- job_name: kube-state-metrics
  static_configs:
  - targets:
    - prometheus-kube-state-metrics.monitoring.svc:8080

Prometheus支持的服务发现非常多:

  • static_configs: 静态服务发现
  • dnssdconfigs: DNS 服务发现
  • filesdconfigs: 文件服务发现
  • kubernetessdconfigs: Kubernetes 服务发现
  • gcesdconfigs: GCE 服务发现
  • ec2sdconfigs: EC2 服务发现
  • openstacksdconfigs: OpenStack 服务发现
  • azuresdconfigs: Azure 服务发现

前面4个是比较常用的,这里我们主要介绍kubernetessdconfigs,其他的比较简单可查看Prometheus官方文档 prometheus configuration

什么是 Kubernetessdconfigs?

Prometheus中k8s服务发现的原理是通过 Kubernetes 的REST API 检索抓取目标,并始终与集群状态保持同步。所以我们需要配置Kubernetessdconfigs来访问K8s API

比如我们要抓取k8s ingress,需要为Prometheus指定用于RBAC认证证书和serviceaccount的token

代码语言:javascript
复制
- job_name: 'kubernetes-ingress'
  scheme: https
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    insecure_skip_verify: true
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  kubernetes_sd_configs:
  - role: ingress

这里的role为k8s中资源实体如 endpoints、service,、pod,、node或 ingress

当指定ingress时,Prometheus将每个入口地址发现为一个目标。

重载配置文件后可以在Prometheus Service Discovery查看发现的target

发现apiserver配置

代码语言:javascript
复制
- job_name: kubernetes-apiservers
  scheme: https
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    insecure_skip_verify: true
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  kubernetes_sd_configs:
  - role: endpoints
  relabel_configs:
  - action: keep
    regex: default;kubernetes;https
    source_labels:
    - __meta_kubernetes_namespace
    - __meta_kubernetes_service_name
    - __meta_kubernetes_endpoint_port_name

这里我们用到了 relabel_configs即重新打标,动作为 keep 啥意思呢?首先我们通过k8s API获取到所有endpoints,将endpoints中的含元数据 namespace、servicename、endpointport_name的实例和regex匹配,如果匹配成功就保留。这用来过滤一下不需要的实例时很有用。

通过kubectl 查看的kubernetes这个endpoints的信息

代码语言:javascript
复制
# kubectl describe endpoints kubernetes
Name:         kubernetes
Namespace:    default
Labels:       <none>
Annotations:  <none>
Subsets:
  Addresses:          192.168.1.82,192.168.1.83,192.168.1.84
  NotReadyAddresses:  <none>
  Ports:
    Name   Port  Protocol
    ----   ----  --------
    https  6443  TCP

发现出来的target如下

这里有一个隐藏点,Prometheus会把元数据中的 __address____metrics_path__作为endpoint,下面我们来看一个替换元数据的node实例

发现node配置

代码语言:javascript
复制
- job_name: kubernetes-nodes
  scheme: https
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    insecure_skip_verify: true
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  kubernetes_sd_configs:
  - role: node
  relabel_configs:
  - action: labelmap
    regex: __meta_kubernetes_node_label_(.+)
  - replacement: kubernetes.default.svc:443
    target_label: __address__
  - regex: (.+)
    replacement: /api/v1/nodes/$1/proxy/metrics
    source_labels:
    - __meta_kubernetes_node_name
    target_label: __metrics_path__

这里的动作为 labelmap,可用于标签替换。首先获取所有node,对元数据 __address__中的value替换为replacement的值 kubernetes.default.svc:443

在replacement的值中可以通过1,2,

发现出的node如下所示,此时target的address和metrics_path已被替换了。

以上通过kubernetes-apiservers、kubernetes-nodes的实例简单介绍了Prometheus中如何实现k8s集群资源的服务发现以及相应的配置和操作。亦可参考Prometheus示例配置prometheus-kubernetes

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 容器云实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Prometheus的服务发现在解决什么问题?
  • Prometheus 中的 scrape_config 是什么?
  • 什么是 Kubernetessdconfigs?
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档