prometheus-operator监控集群外的docker服务

2024-05-25 04:58

本文主要是介绍prometheus-operator监控集群外的docker服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

这个主题网上可以搜到好多内容,如果直接照抄过来,还是不好用,应该是我没掌握原理。

10.10.14.2这个服务器并不在集群内,这个服务器上面跑的服务都是docker起的。prometheus-operator部署在集群内,想要通过prometheus-operator监控10.10.14.2这个服务器上的docker服务,以及该服务器本身的指标。

docker服务使用cadvisor来暴露指标,服务器本身的指标使用node-exporter来暴露。

首先在10.10.14.2这个服务器部署cadvisor和node-exporter

部署cadvisor

// 拉取cadvisor镜像
docker pull google/cadvisor:latest// 使用特权模式运行cadvisor,由于该服务器上的8080端口已经被占用,这里把cadvisor的8080端口映射到8000端口
docker run -d -p 8000:8080 --name cadvisor  --privileged=true -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro google/cadvisor:latest

部署node-exporter

// 拉取node-exporter镜像。我的prometheus-operator里面的node-exporter版本为0.18.1,这里也跟着部署相同的版本
docker pull quay.io/prometheus/node-exporter:v0.18.1// 运行node-exporter
docker run -d --name node-exporter -v /proc:/host/proc -v /sys:/host/sys -v /:/rootfs --net=host registry.local/cloudtogo/node-exporter:v0.18.1 --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points="^/(sys|proc|dev|host|etc)($|/)"

prometheus-operator要监控集群外的服务需要定义对应的EndpointsServiceMonitor

我把这些docker服务和节点监控数据全部放入demo-system这个ns下。如果不设置默认是在default下。

编写docker容器的endpoints yaml,即docker-ep.yaml

kind: Endpoints
apiVersion: v1
metadata:name: demo-dockernamespace: demo-systemlabels:cloudos: demo-docker
subsets:- addresses:- ip: 10.10.14.2 # ip为安装cadvisor服务器的ipports:- name: metricsport: 8000 # cadvisor的8080端口映射到了8000端口

编写服务器endpoints yaml,即node-ep.yaml

kind: Endpoints
apiVersion: v1
metadata:name: demo-nodenamespace: demo-systemlabels:cloudos: demo-node
subsets:- addresses:- ip: 10.10.14.2 # ip为部署node-exporter的服务器ipports:- name: metricsport: 9100 # node-exporter暴露在该服务器的9100端口

编写service monitor yaml,即customer-serviceMonitor.yaml

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:name: demonamespace: demo-system
spec:endpoints:- interval: 15sport: metricsrelabelings:# 对instance进行relabel- action: replacesourceLabels: ['__address__']separator: ':'regex: '(.*):.*'targetLabel:  'instance'replacement:   '${1}'selector: {}

可以看到在10.10.14.2上的docker服务cadvisor和node-exporter ,都已经被收集到了

 

如果我有另外好几台服务器也部署了相同的cadvisor和node-exporter,按照上面的做法就是有几台服务器就需要几个endpoints,servicemonitor可以继续使用同一个。

endpoints.subsets.address其实是个数组,如果有多个,则直接加入。
如新增10.10.14.3部署了cadvisor服务,那么只需要在docker-ep.yaml中添加10.10.14.3这个ip即可。

完整docker-ep.yaml如下

kind: Endpoints
apiVersion: v1
metadata:name: demo-dockernamespace: demo-systemlabels:demo: demo-docker
subsets:- addresses:# 把使用docker部署的cadvisor即服务器ip加入这里- ip: 10.10.14.2- ip: 10.10.14.3ports:# 由于cadvisor暴露的端口相同,都是8000,这里无需做任何修改,可以适配所有情况- name: metricsport: 8000

 

 

如果只指定了Endpoints和ServiceMonitor,没有指定Service会存在一个问题,那就是一旦master关机后(reboot没有问题)再开机,创建的Endpoints对象就全部不见了。

这个现象也是无意之间发现的,当时还跟测试争论起来,因为大家都说没有删Endpoints,但是Endpoints就是不见了,后面才想起来master机器有被关机过,于是再关机验证一把问题就复现了。

在这里找到相关的信息参考:https://github.com/kubernetes/kubernetes/issues/12964

于是给Endpoints增加了对应的Service,即使后续关机,也没有任何影响了。
完整docker-service.yaml如下

apiVersion: v1
kind: Service
metadata:name: demo-dockernamespace: demo-systemlabels:demo: demo-docker
spec:type: ClusterIPclusterIP: Noneports:- name: cadvisorport: 8000protocol: TCP

 

这篇关于prometheus-operator监控集群外的docker服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1000544

相关文章

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

springboot2.1.3 hystrix集成及hystrix-dashboard监控详解

《springboot2.1.3hystrix集成及hystrix-dashboard监控详解》Hystrix是Netflix开源的微服务容错工具,通过线程池隔离和熔断机制防止服务崩溃,支持降级、监... 目录Hystrix是Netflix开源技术www.chinasem.cn栈中的又一员猛将Hystrix熔

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件