Prometheus服务发现


Prometheus添加被监控端支持两种方式:

• 静态配置:手动配置

• 服务发现:动态发现需要监控的Target实例

支持服务发现的来源

• azure_sd_configs

• consul_sd_configs

• dns_sd_configs

• ec2_sd_configs

• openstack_sd_configs

• file_sd_configs

• gce_sd_configs

• kubernetes_sd_configs

• marathon_sd_configs

• nerve_sd_configs

• serverset_sd_configs

• triton_sd_configs

集成cAdvisor


集成方式

Kubernetes主要提供了如下5种服务发现模式和Prometheus进行集成:

使用cAdvisor主要需要使用Node服务发现模式,配置方式如下所示

Node服务发现模式


        kubernetes_sd_configs:- role: node

监控方法


监控对象 监控指标内容 服务发现模式 监控方式 数据来源
集群各节点Kubelet组件 各节点Kubelet的基本运行状态相关的监控指标 node 白盒监控 Kubelet

监控Kubernetes


基于k8s的监控使用基于k8s的服务发现来实现

监控指标

Cadvisor内置在kubelet当中,通过kubelet暴露的api去访问的

监控Kubernetes


普罗米修斯通过Cadvisor监控k8s


Kubernetes默认提供cAdvisor和特定节点的时间序列。我们可以创建一个作业来从每个节点的Kubernetes API中抓取这些时间序列。我们可以使用这些时间序列来监控节点,以及每个节点上的Docker守护进程和容器。

监控K8s集群Pod步骤:

现在普罗米修斯要通过服务发现连接到k8s集群,k8s授权普罗米修斯可以访问如下地址

[root@k8s-master ~]# kubectl get ep
NAME         ENDPOINTS              AGE
kubernetes   192.168.179.102:6443   74d

Prometheus -> apiserver(192.168.179.102:6443)->kubelet(cadvisor)

这个过程是需要授权的,所以第一步就是授权

[root@k8s-master ~]# cat rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: prometheusnamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:name: prometheus
rules:
- apiGroups:- ""resources:- nodes- services- endpoints- pods- nodes/proxyverbs:- get- list- watch
- apiGroups:- "extensions"resources:- ingressesverbs:- get- list- watch
- apiGroups:- ""resources:- configmaps- nodes/metricsverbs:- get
- nonResourceURLs:- /metricsverbs:- get
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:name: prometheus
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: prometheus
subjects:
- kind: ServiceAccountname: prometheusnamespace: kube-system [root@k8s-master ~]# kubectl apply -f rbac.yaml
serviceaccount/prometheus created

现在要拿到创建rbac产生的token,,这是非常关键的,让普罗米修斯拿着这个token去访问api那么就具有rbac里面授予的权限了

怎么拿到这个token呢,产生的sa在kube-system上,怎么拿到这个token呢,产生的sa在kube-system上

[root@k8s-master ~]# kubectl get sa -n kube-system | grep prome
prometheus                           1         4m59s
[root@k8s-master ~]# kubectl describe sa prometheus -n kube-system
Name:                prometheus
Namespace:           kube-system
Labels:              <none>
Annotations:         <none>
Image pull secrets:  <none>
Mountable secrets:   prometheus-token-jq2kg
Tokens:              prometheus-token-jq2kg
Events:              <none>

Token保存在这个secret当中 prometheus-token-jq2kg

[root@k8s-master ~]# kubectl describe secret prometheus-token-jq2kg -n kube-system
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6InR0cTRHNDNQUGFMeUZ5Rnp1azZnSUEyRVU0WEY1dWdEMEYwd056ZnNkWWcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJwcm9tZXRoZXVzLXRva2VuLWpxMmtnIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6InByb21ldGhldXMiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIxNDYxYTU1Mi0xZWE0LTRjYWQtOTdhOC05YmE1Zjg2YjhkMmYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06cHJvbWV0aGV1cyJ9.FfRTfjE5ih9ZvCy0XFL1Trc00H7k1s6kkGmFvnkKJghswTLeATRPfziAJqrBYBYY0dA8IK52WEa0JR2TevtotnWOyIXZnv6KWcPb0RObvlL4dxp1ZJyZRAc01rliyukTU2HphgX2NlLnf_TZHMo1bapPf8crDdMlZHoEe42ukMtr1nZrPgChXJCtGoR383bAWDoDrq1nZ7e8xCQnoxEkq_khLO9ypHqAlFfMCG-w0x35uC1Wa06FdoeygW0gABDK_Ltgvz6_IuLM9wLl54SnPZJEPSMfiNpuvN8vDWNUcjqPj1Lqi3eSMKLf7b3zBvlTEcLQKoUQdXBdg-97pfeDVw

2、获取Token并保存到文件 

拿到这个token,拷贝到普罗米修斯这个节点

[root@k8s-master ~]# kubectl describe secret prometheus-token-jq2kg -n kube-system > token.k8s
[root@k8s-master ~]# scp token.k8s root@192.168.179.99:/usr/local/prometheus

在普罗米修斯上只保存这token值,其余的全部去掉

[root@localhost prometheus]# cat token.k8s
eyJhbGciOiJSUzI1NiIsImtpZCI6InR0cTRHNDNQUGFMeUZ5Rnp1azZnSUEyRVU0WEY1dWdEMEYwd056ZnNkWWcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJwcm9tZXRoZXVzLXRva2VuLWpxMmtnIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6InByb21ldGhldXMiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIxNDYxYTU1Mi0xZWE0LTRjYWQtOTdhOC05YmE1Zjg2YjhkMmYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06cHJvbWV0aGV1cyJ9.FfRTfjE5ih9ZvCy0XFL1Trc00H7k1s6kkGmFvnkKJghswTLeATRPfziAJqrBYBYY0dA8IK52WEa0JR2TevtotnWOyIXZnv6KWcPb0RObvlL4dxp1ZJyZRAc01rliyukTU2HphgX2NlLnf_TZHMo1bapPf8crDdMlZHoEe42ukMtr1nZrPgChXJCtGoR383bAWDoDrq1nZ7e8xCQnoxEkq_khLO9ypHqAlFfMCG-w0x35uC1Wa06FdoeygW0gABDK_Ltgvz6_IuLM9wLl54SnPZJEPSMfiNpuvN8vDWNUcjqPj1Lqi3eSMKLf7b3zBvlTEcLQKoUQdXBdg-97pfeDVw

现在可以让普罗米修斯拿着这个token访问api了

 3、创建Job和kubeconfig_sd_configs

现在可以让普罗米修斯拿着这个token访问api了,这里启用的是k8s服务发现的配置

[root@localhost ~]# vim /usr/local/prometheus/prometheus.yml - job_name: kubernetes-nodes-cadvisormetrics_path: /metricsscheme: https   #访问api使用https访问kubernetes_sd_configs:- role: node   #指定服务发现类型的角色为nodeapi_server: https://192.168.179.102:6443bearer_token_file: /usr/local/prometheus/token.k8stls_config:insecure_skip_verify: true #跳过https验证,因为自签发,不受信任,跳过证书校验bearer_token_file: /usr/local/prometheus/token.k8stls_config:   insecure_skip_verify: true   #跳过证书relabel_configs:# 将标签(.*)作为新标签名,原有值不变- action: labelmapregex: __meta_kubernetes_node_label_(.*)# 修改NodeIP:10250为APIServerIP:6443- action: replaceregex: (.*)source_labels: ["__address__"]target_label: __address__replacement: 192.168.31.61:6443# 实际访问指标接口 https://NodeIP:10250/metrics/cadvisor 这个接口只能APISERVER访问,故此重新标记>标签使用APISERVER代理访问- action: replacesource_labels: [__meta_kubernetes_node_name]target_label: __metrics_path__regex: (.*)replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor[root@localhost prometheus]# ./promtool check config prometheus.yml
Checking prometheus.ymlSUCCESS: 0 rule files found

https://192.168.179.102:6443/api/v1/nodes/k8s-node1/proxy/metrics/cadvisor

这些数据就是从这个地址下面拿到的 ,如果你将该段去掉,可以看到没有重新标记标签会采集不到数据

#    - action: replace
#      source_labels: [__meta_kubernetes_node_name]
#      target_label: __metrics_path__
#      regex: (.*)
#      replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor 

Prometheus 基于k8s服务发现通过Cadvisor监控Kubernetes相关推荐

  1. Nacos2.0的K8s服务发现生态应用及规划

    简介:Nacos 是阿里巴巴于 2018 年开源的注册中心及配置中心产品,帮助用户的分布式微服务应用进行服务发现和配置管理功能.随着 Nacos2.0 版本的发布,在性能和扩展性上取得较大突破后,社区 ...

  2. k8s 服务发现 kubeDNS

    k8s 服务发现 kubeDNS 一.k8s 服务发现 kubeDNS 1.1 kubeDNS 1.2 服务发现类型 1.2.1 基于环境变量的服务发现 1.2.2 基于DNS的服务发现 一.k8s ...

  3. dubbo k8s 服务发现_工商银行基于 Dubbo 构建金融微服务架构的实践-服务发现篇

    作者 | 张远征来源|阿里巴巴云原生公众号 导读:Dubbo 作为分布式微服务框架,众多公司在实践中基于 Dubbo 进行分布式系统架构.重启开源后,我们不仅看到 Dubbo 3.0 最新的 Road ...

  4. dubbo k8s 服务发现_服务化改造实践(二)| Dubbo + Kubernetes-阿里云开发者社区

    "没有最好的技术,只有最合适的技术."我想这句话也同样适用于微服务领域,没有最好的服务框架,只有最适合自己的服务改造.在Dubbo的未来规划中,除了保持自身技术上的领先性,关注性能 ...

  5. dubbo k8s 服务发现_服务化改造实践(二)| Dubbo + Kubernetes

    原标题:服务化改造实践(二)| Dubbo + Kubernetes 摘要: "没有最好的技术,只有最合适的技术."我想这句话也同样适用于微服务领域,没有最好的服务框架,只有最适合 ...

  6. Dubbo-kubernetes 基于 Informer 服务发现优化之路

    在 Kubernetes(简称 K8s,一个可移植容器的编排管理工具)体系中,etcd 存储集群的数据信息,kube-apiserver 作为统一入口,任何对数据的操作都必须经过 kube-apise ...

  7. 基于gRPC服务发现与服务治理的方案

    重温最少化集群搭建,我相信很多朋友都已经搭建出来,基于Watch机制也实现了出来,相信也有很多朋友有了自己的实现思路,但是,很多朋友有个疑问,我API和服务分离好了,怎么通过服务中心进行发现呢,这个过 ...

  8. K8s服务发现组件-CoreDNS简介

    CoreDNS,这是一种新的DNS服务器,旨在与Linux和Docker容器等配合使用,尤其是在由流行的容器编排系统Kubernetes管理的环境中尤其适用. 主要介绍CoreDNS的存在理由,以及它 ...

  9. k8s服务发现和负载均衡(转)

    原文 http://m635674608.iteye.com/blog/2360095 kubernetes中如何发现服务 如何发现pod提供的服务 如何使用kube-dns发现服务 service: ...

最新文章

  1. 职场必读的经典励志故事
  2. 关于python的一些好的书籍推荐-如果只能推荐3本关于python的书,你会推荐哪3本?...
  3. 代表中国为世界做出探索,杭州城市大脑获IDC亚太区智慧城市大奖
  4. Android深度探索--HAL与驱动开发----第十章读书笔记
  5. 黑龙江省2021高考成绩排名查询,黑龙江高考排名对应学校-高考位次对应大学(2021年理科参考)...
  6. 问题 B: 算术基本运算 山东科技大学 oj c语言
  7. spring aop使用
  8. 【金融】【python】使用python处理多种期货数据指标
  9. Android studio R文件丢失或错误解决方法
  10. 高通平台音频调试常见问题点归纳
  11. java 虚拟机常用启动参数
  12. IMX8mp alsa音频调试
  13. 算法入门基础知识总结
  14. amazeui PHP,amazeui页面分析之登录页面
  15. 电脑键盘部分按键失灵_键盘按键失灵,教您电脑键盘失灵怎么办
  16. 这30个高质量的数据集网站,你必须要试试!
  17. 递归、迭代和分治(2):递归的典型例子
  18. 计算机的重要作用和正确使用的建议,引导孩子正确认识电脑和游戏的几点建议...
  19. mysql分页查询遇到order by发生的血案
  20. iframe 标签(用于嵌套网页)及loading加载动画效果

热门文章

  1. 免费正版杀毒软件集合 有你需要的
  2. 如何使用ExternalContext类(一)
  3. 毕业设计之基于Vue的数据可视化平台
  4. 软考信息系统项目管理师论文真题及答案
  5. 基于 java Spring Boot 框架的人事管理系统的设计与实现 附完整代码+论文+ppt
  6. JavaFX场景生成器1.0使用入门
  7. c#中将dicom文件格式转换成可读图片
  8. 昆明理工大学控制工程考研经验贴
  9. 逆向windows“恶搞锁机”程序
  10. Java微信公众号服务号开发(二):接口信息配置