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

1 篇文章 0 订阅
1 篇文章 0 订阅

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目录访问过几次,所以可以看到自定义数值在增加。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
好的,下面是一个快速部署 Prometheus 监控 docker 容器、宿主机和 Ceph 集群的 docker-compose.yaml 文件: ```yaml version: '3' services: prometheus: image: prom/prometheus ports: - 9090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml command: - '--config.file=/etc/prometheus/prometheus.yml' depends_on: - node-exporter - cadvisor - ceph-exporter node-exporter: image: prom/node-exporter volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.sysfs=/host/sys' - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)' cadvisor: image: google/cadvisor ports: - 8080:8080 volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro ceph-exporter: image: galexrt/ceph-exporter:latest environment: CLUSTER_NAME: mycluster CEPH_USERNAME: admin CEPH_KEYRING_BASE64: <base64-encoded ceph.client.admin.keyring> ports: - 9128:9128 ``` 其中,Prometheus 监控的配置文件 prometheus.yml 可以参考下面的示例: ```yaml global: scrape_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'docker' metrics_path: '/metrics' static_configs: - targets: ['node-exporter:9100'] labels: group: 'docker' - job_name: 'node' metrics_path: '/metrics' static_configs: - targets: ['node-exporter:9100'] labels: group: 'node' - job_name: 'cadvisor' metrics_path: '/metrics' static_configs: - targets: ['cadvisor:8080'] labels: group: 'docker' - job_name: 'ceph' metrics_path: '/metrics' static_configs: - targets: ['ceph-exporter:9128'] labels: group: 'ceph' ``` 在这个配置文件中,我们定义了四个 job: - prometheus:监控 Prometheus 本身的指标。 - docker:监控 Docker 容器运行时的指标。 - node:监控宿主机的指标。 - ceph:监控 Ceph 集群的指标。 对于 dockernode,它们都使用了 node-exporter 来收集指标。而对于 ceph,我们使用了 ceph-exporter 来收集指标。 在部署前,需要将 ceph.client.admin.keyring 文件的内容进行 base64 编码,并将编码后的内容填入 docker-compose.yaml 文件中的 CEHP_KEYRING_BASE64 环境变量中。 部署完成后,可以通过访问 http://localhost:9090 来访问 Prometheus 的 Web 界面。在这里,你可以查看所有收集到的指标,并且可以创建自己的监控规则和仪表盘。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腾昵猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值