Prometheus 学习之——基于 go 编写一个 exporter

本文介绍了如何使用 Go 语言编写 Prometheus exporter,详细讲解了 Guage、Count、Summary 和 Histogram 四种指标类型,并展示了如何在 Prometheus 中展示这些指标,帮助扩展 Prometheus 的监控能力。

Prometheus 学习之——基于 go 编写一个 exporter


前言

Prometheus 是 CNCF 收录的第二个项目,已经成为了云原生时代监控行业的标准。


一、exporter 简介

    在很多流行的监控系统中都已经实现了 Prometheus 的监控接口,例如 etcd、Kubernetes、CoreDNS 等,它们可以直接被 Prometheus 监控。但是大多数监控对象都没办法直接提供监控接口,主要原因有:

  • 很多系统在 Prometheus 诞生前的很多年就已经发布,例如 MySQL、Redis 等;
  • 本身不支持 HTTP 接口,例如对于硬件性能指标,操作系统并没有原生的 HTTP 接口可以获取;
  • 考虑到安全性、稳定性及代码耦合等因素的影响,软件作者并不愿意将监控代码加入现有代码中。

    这些都导致没法通过一个规范解决所有监控问题。在此背景下,exporter 应运而生。exporter 是一个采集监控数据并通过 Prometheus 监控规范对外提够数据的组件。 除了官方实现的 exporter 如 Node exporter、HAProxy exporter、MySQL server exporter,还有很多第三方实现如 Redis exporter 和 RabbitMQ exporter 等。Prometheus 会周期性地调用这些 exporter 提供的 metrics 数据接口来获取数据。

    这些 exporter 将不同规范和格式的监控指标进行转化,输出 Prometheus 能够识别的监控数据格式,从而极大地扩展 Prometheus 采集数据的能力。如果将 Prometheus 比作『天眼』,那么每个 exporter 就是散落在全球的一个个摄像头。Prometheus 正是依靠这些 exporter 监控不同种类的对象的。


二、基于 Go 客户端编写一个 exporter

完整代码地址:https://github.com/LeoNumber1/goExporterDemo

1. Guage 仪表盘类型

package main

import (
	"flag"
	"fmt"
	"log"
	"net/http"
	"time"

	"github.com/prometheus/client_golang/prometheus"
	"github.com/prometheus/client_golang/prometheus/promhttp"
)

//自定义端口
var addr = flag.String("listen-address", ":8080", "The address to listen on for HTTP requests")

var (
	//Gauge 仪表盘类型
	opsQueued = prometheus.NewGauge(prometheus.GaugeOpts{
   
   
		Namespace: "our_company",
		Subsystem: "blob_storage",
		Name:      "ops_queued",
		Help:      "Number of blob storage operations waiting to be processed",
	})

	jobsInQueue = prometheus.NewGaugeVec(prometheus.GaugeOpts{
   
   
		Name: "job_in_queue",
		Help: "Current number of jobs in the queue",
	}, []string{
   
   "job_type"})
)

func init() {
   
   
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值