Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >prometheus k8s服务发现

prometheus k8s服务发现

作者头像
你大哥
发布于 2022-03-14 07:57:10
发布于 2022-03-14 07:57:10
2K00
代码可运行
举报
文章被收录于专栏:容器云实践容器云实践
运行总次数:0
代码可运行
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
- 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
代码运行次数:0
运行
AI代码解释
复制
- 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
代码运行次数:0
运行
AI代码解释
复制
# 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
代码运行次数:0
运行
AI代码解释
复制
- 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的值中可以通过2,

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

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Prometheus监控k8s集群组件
cAdvisor已经内置在了 kubelet 组件之中,所以不需要单独去安装,cAdvisor的数据路径为/api/v1/nodes//proxy/metrics,同样这里使用 node 的服务发现模式,因为每一个节点下面都有 kubelet,自然都有cAdvisor采集到的数据指标,配置如下:
mikelLam
2022/10/31
1.3K0
Prometheus监控k8s集群组件
使用prometheus监控多k8s集群
调研发现prometheus配合node_exporter、kube-state-metrics可以很方便地采集单个集群的监控指标。因此最初的构想是在每套k8s集群里部署prometheus,由它采集该集群的监控指标,再运用prometheus的联邦模式将多个prometheus中的监控数据聚合采集到一个中心prometheus里来,参考模型为Hierarchical federation。
jeremyxu
2019/03/13
10K8
使用prometheus监控多k8s集群
构建企业级监控平台系列(二十二):Prometheus 基于 K8S 服务发现详解
Prometheus Server 的数据抓取工作基于 Pull 模型,因而,它必须要事先知道各 target 的位置,然后才能从相应的 Exporter 或 Instrumentation 中抓取数据。
民工哥
2023/10/31
1.7K0
构建企业级监控平台系列(二十二):Prometheus 基于 K8S 服务发现详解
《Prometheus监控实战》第12章 监控Kubernetes
第12章 监控Kubernetes 我们会把Tornado、Prometheus部署到Kubernetes集群中(https://github.com/turnbullpress/tornado-api) ---- 12.1 Kubernetes集群 Kubernetes集群名为tornado.quicknuke.com,使用kops构建了该集群(https://github.com/kubernetes/kops),可以在Github上找到集群配置。它有3个主节点和6个工作节点,所有节点都在三个可用区之间
yeedomliu
2019/12/19
2.1K0
《Prometheus监控实战》第12章 监控Kubernetes
k8s 集群下微服务 pod 的各种指标信息监控
今天主要分享下,在 k8s 集群下,微服务的各种状态指标情况的监控,我们都知道 Prometheus 是做数据监控的,但说白点,其独特格式的数据,其实都是靠一些源来的,那么这些源有哪些呢?已经有了 cadvisor、heapster、metric-server,几乎容器运行的所有指标都能拿到,但是下面这种情况却无能为力:
程序猿Damon
2020/11/09
3.2K0
k8s 集群下微服务 pod 的各种指标信息监控
Prometheus神器之监控K8s集群
Prometheus是SoundCloud开源的一款开源软件。它的实现参考了Google内部的监控实现,与源自Google的Kubernetes结合起来非常合适。另外相比influxdb的方案,性能更加突出,而且还内置了报警功能。它针对大规模的集群环境设计了拉取式的数据采集方式,你只需要在你的应用里面实现一个metrics接口,然后把这个接口告诉Prometheus就可以完成数据采集了。
程序员同行者
2019/05/15
1.8K0
Prometheus监控学习笔记之解读prometheus监控kubernetes的配置文件
Prometheus 是一个开源和社区驱动的监控&报警&时序数据库的项目。来源于谷歌BorgMon项目。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。主要监控:
Jetpropelledsnake21
2019/03/08
2.3K0
Prometheus监控学习笔记之解读prometheus监控kubernetes的配置文件
prometheus简介
prometheus是一个最初在SoundCloud上构建的开源系统监控和警报工具包 。 从2012年开始,许多公司和组织开始使用Prometheus,该项目拥有非常活跃的开发人员和用户社区。 目前它是一个独立的开源项目,并且不依赖与任何公司。 为了强调这一点,并澄清项目的治理结构,Prometheus在2016年加入Cloud Native Computing Foundation,作为kubernetes之后的第二个托管项目。
菲宇
2019/06/12
2.5K0
prometheus简介
Kubernetes集群监控-详解Prometheus高效监控
Prometheus 最初是 SoundCloud 构建的开源系统监控和报警工具,是一个独立的开源项目,于 2016 年加入了 CNCF 基金会,作为继 Kubernetes 之后的第二个托管项目。Prometheus 相比于其他传统监控工具主要有以下几个特点:
王先森sec
2023/11/11
1.9K0
Kubernetes集群监控-详解Prometheus高效监控
Prometheus监控k8s集群节点
Kubernetes 节点的监控:比如节点的 cpu、load、disk、memory 等指标 内部系统组件的状态:比如 kube-scheduler、kube-controller-manager、kubedns/coredns 等组件的详细运行状态 编排级的 metrics:比如 Deployment 的状态、资源请求、调度和 API 延迟等数据指标
mikelLam
2022/10/31
1.4K0
Prometheus监控k8s集群节点
Ops实践 | K8S云原生环境下集群资源监控指标拉取与可视化展示实践(补充)
描述: 在《Ops实践 | 从零开始,在云原生环境下快速实现K8S集群可视化监控》文章中,针对 Kubernetes 集群资源监控部分,作者写得有些含糊不清,所以此文我将对K8S集群组件(kubelet、kube-proxy)以及使用kube-state-metric暴露资源(deployment、statefulset、service、pod)的监控指标整理介绍。
全栈工程师修炼指南
2023/12/01
8820
Ops实践 | K8S云原生环境下集群资源监控指标拉取与可视化展示实践(补充)
自建 Prometheus 采集腾讯云容器服务监控数据最佳实践
用 Prometheus 采集腾讯云容器服务的监控数据时如何配置采集规则?主要需要注意的是 kubelet 与 cadvisor 的监控指标采集,本文分享为 Prometheus 配置 scrape_config 来采集腾讯云容器服务集群的监控数据的方法。
imroc
2022/08/01
3.1K3
自建 Prometheus 采集腾讯云容器服务监控数据最佳实践
Prometheus 云原生kubernetes服务发现原理图解
上节分析了Prometheus服务发现核心流程(如下图),Discoverer基于不同协议发现采集点,通过channel通知到updater协程,然后更新到discoveryManager结构体trargets字段中,最终由sender协程将discoveryManager的targets字段数据发送给scrape采集模块。
Reactor2020
2023/03/22
1.5K0
Prometheus 云原生kubernetes服务发现原理图解
【云原生 • Prometheus】云原生kubernetes服务发现原理图解
上节分析了Prometheus服务发现核心流程(如下图),Discoverer基于不同协议发现采集点,通过channel通知到updater协程,然后更新到discoveryManager结构体trargets字段中,最终由sender协程将discoveryManager的targets字段数据发送给scrape采集模块。
Reactor2020
2023/03/18
1.6K1
【云原生 • Prometheus】云原生kubernetes服务发现原理图解
Kubernetes集群监控Promethues+Grafana
其中基础设施层监控指标的拉取肯定是来在Prometheus的node_exporter,因为我们要监控的服务器节点既包含Kubernetes节点又包含其他部署独立中间件的节点, 所以我们并没有将node_exporter以daemonset的形式部署到k8s上,而是使用ansible将node_exporter以二进制的形式部署到所有要监控的服务器上。 而负责从node_exporter拉取指标的Prometheus也是用ansible独立部署在Kubernetes集群外部的。Prometheus的配置文件prometheus.yml使用ansible的j2模板生成。
菲宇
2019/06/13
1.4K0
Kubernetes集群监控Promethues+Grafana
在K8S中使用helm chart部署Prometheus
近期部署Prometheus的时候,发现网上竟然很难找到比较好的基于k8s部署的教程,甚至就连helm chart官方repo的教程也很不友好,对于很多参数没有详细的解释,也缺少示例。
panzhixiang
2024/10/30
1490
【prometheus】-08 图解云原生服务发现机制
分析过云原生监控接入方案,下面开始看下云原生服务发现机制。Prometheus本身就是作为云原生监控出现的,所以对云原生服务发现支持具有天然优势。Kubernetes 服务发现协议允许使用Kubernetes Rest API检索出Prometheus需要监控的targets,并且跟着集群状态进行同步变更。
Reactor2020
2023/03/22
3860
【prometheus】-08 图解云原生服务发现机制
Prometheus监控学习笔记之Prometheus的Relabel,SD以及Federation功能
k8s 默认以及推荐的监控体系是它自己的一套东西:Heapster + cAdvisor + Influxdb + Grafana,具体可以看 这里 。
Jetpropelledsnake21
2019/05/10
1.6K0
Kubernetes集群监控方案详解
本文介绍在k8s集群中使用node-exporter、prometheus、grafana对集群进行监控。
星哥玩云
2022/07/13
2.7K0
Kubernetes集群监控方案详解
TKE上搭建prometheus
我们就可以通过http://任意节点IP:31160访问 prometheus 的 webui 服务了。
聂伟星
2020/06/10
1.6K2
推荐阅读
相关推荐
Prometheus监控k8s集群组件
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验