GO语言写Prometheus自定义node-exporter的Docker容器测试

2024-04-26 20:28

本文主要是介绍GO语言写Prometheus自定义node-exporter的Docker容器测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 安装docker-compose

执行以下命令,安装docker-compose到CentOS7.9环境中:

# 下载二进制文件
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.7/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 给文件赋予执行的权限
sudo chmod +x /usr/local/bin/docker-compose
# 创建软链接到执行目录
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

安装完成后输入命令验证docker-compose安装成功:

docker-compose --version

2. 使用go语言编写node-exporter

创建文件夹04_prometheus_test,执行以下命令初始化go环境:

cd 04_prometheus_test
go mod init 04_prometheus_test

由于需要用到prometheus的go语言sdk,所以需要下载包:

go get github.com/prometheus/client_golang/prometheus  
go get github.com/prometheus/client_golang/prometheus/promhttp

执行完成后写代码:

package main  import (  "net/http"  "log"  "github.com/prometheus/client_golang/prometheus"  "github.com/prometheus/client_golang/prometheus/promhttp"  
)  // 自定义一个计数器指标  
var helloWorldCounter = prometheus.NewCounter(prometheus.CounterOpts{  Name: "hello_world_counter_total",  Help: "Total number of hello world invocations.",  
})  // 定义一个简单的HTTP处理器,每次调用都会增加计数器  
func helloWorldHandler(w http.ResponseWriter, r *http.Request) {  helloWorldCounter.Inc()  w.Write([]byte("Hello, World!"))  
}  func main() {  // 注册自定义指标  prometheus.MustRegister(helloWorldCounter)  // 设置HTTP服务器监听端口  http.Handle("/metrics", promhttp.Handler())  http.HandleFunc("/hello", helloWorldHandler)  // 启动HTTP服务器  log.Fatal(http.ListenAndServe(":8080", nil))  
}

这个程序暴露<ip>:8080/metrics给prometheus获取数据,<ip>:8080/hello可以增加计数。
执行编译生成可执行文件:

go build .

3. docker镜像制作

写Dockerfile,用于创建Docker镜像:

FROM centos
LABEL maintainer="kaijessen@gmail.com"
COPY . /app
WORKDIR /app
RUN chmod a+x /app/*
EXPOSE 8080
ENTRYPOINT ["/app/04_prometheus_test"]

执行命令生成镜像到本地库:

docker build -t prom_custom_ne:latest .

完成后执行docker images可以看到生成新的镜像prom_custom_ne。
在这里插入图片描述

4. docker-compose制作

写一个docker-compose.yml文件,用来将镜像启动起来。

version: '3.5'  services:  prometheus:  image: docker.io/prom/prometheus  container_name: prometheus  networks:  - prom_test_net  ports:  - "9090:9090"  volumes:  - prom_test_vol:/etc/prometheus/custom_ne:  image: prom_custom_ne  container_name: custom_ne  networks:  - prom_test_net  ports:- "8080:8080"networks:  prom_test_net:  driver: bridge  volumes:  prom_test_vol:  driver: local  driver_opts:  type: none  device: /opt/prometheus/o: bind

这个文件启动两个服务,prometheus和custom_ne;把宿主机的/opt/prometheus/目录挂在了prometheus容器的/etc/prometheus目录下;将prometheus:9090的端口和custome_ne:8080绑定到宿主机对应端口以便访问;创建一个bridge供两个容器互相通信。其中值得注意的是/opt/prometheus目录下配置一个prometheus.yml文件,用于配置监控目标,如下:

scrape_configs:  - job_name: 'custom_exporter'  static_configs:  - targets: ['custom_ne:8080']

输入以下命令启动docker-compose。

docker-compose up -d

5. 结果展示

访问宿主机的9090端口,查询自定义指标hello_world_counter_total,结果展示如下:
在这里插入图片描述
期间我通过宿主机8080/hello目录访问过几次,所以可以看到自定义数值在增加。

这篇关于GO语言写Prometheus自定义node-exporter的Docker容器测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Go路由注册方法详解

《Go路由注册方法详解》Go语言中,http.NewServeMux()和http.HandleFunc()是两种不同的路由注册方式,前者创建独立的ServeMux实例,适合模块化和分层路由,灵活性高... 目录Go路由注册方法1. 路由注册的方式2. 路由器的独立性3. 灵活性4. 启动服务器的方式5.

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

docker如何删除悬空镜像

《docker如何删除悬空镜像》文章介绍了如何使用Docker命令删除悬空镜像,以提高服务器空间利用率,通过使用dockerimage命令结合filter和awk工具,可以过滤出没有Tag的镜像,并将... 目录docChina编程ker删除悬空镜像前言悬空镜像docker官方提供的方式自定义方式总结docker

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...