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

相关文章

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接