golang 微服务之Prometheus监控

程序员卷不动了 2023-03-14 PM 599℃ 0条

Prometheus 是一种流行的开源系统监控和警报工具,可以在分布式系统中使用,通过收集指标并对任意时间范围的数据进行分析,可达到快速发现问题、诊断错误和评估性能瓶颈等目的。

在 Go 中,可以使用 Prometheus 的 Go 语言客户端来实现监控。一般情况下,需要实现以下几个步骤:

  1. 安装和配制 Prometheus 首先,需要在系统中安装 Prometheus 并进行配置。可以参考 Prometheus 官方文档来完成这一步骤。
  2. 引入 Prometheus Go 客户端 在 Go 程序中引入 Prometheus Go 客户端,通过它的 API 来暴露指标,并将其暴露给 Prometheus 服务器。
  3. 定义和注册指标 在程序中定义需要监控的指标,并设置其标签。标签是用于定义指标的不同实例或维度,例如 CPU,内存等。一旦指标定义完成,在客户端注册指标,以便 Prometheus 服务器可以访问它们。
  4. 统计指标 在需要监控的代码段中增加指标统计逻辑,以便能够捕获有关代码段执行性能、资源使用等方面的数据。
  5. 暴露指标 将收集到的指标暴露给 Prometheus 服务器。建议最好使用 HTTP 端点来暴露指标
docker-compose 搭建prometheus采集服务

docker-compose启动Prometheus的示例:

Copy codeversion: '3'

services:
  prometheus:
    image: prom/prometheus:v2.28.1
    restart: always
    ports:
      - 9090:9090
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'

volumes:
  prometheus_data:

说明:

  1. Prometheus使用官方的镜像 prom/prometheus
  2. 通过 volumes 挂载了本地的 prometheus.yml 和一个名为 prometheus_data 的卷,用于持久化存储Prometheus的度量数据。
  3. 使用 ports 将主机的9090端口映射到容器的9090端口,以便访问Prometheus Web UI。
  4. 指定了 command选项,用于指定Prometheus的配置文件路径和度量数据存放位置。

要启动Prometheus,请在docker-compose.yml文件所在的目录中运行以下命令:

Copy code
docker-compose up -d

现在,您可以通过浏览器访问http://localhost:9090 来查看Prometheus的Web UI。

golang 引入prometheus包,接入监控

下面的代码演示了如何使用golangPrometheus发送度量数据:

Copy codepackage main

import (
    "math/rand"
    "net/http"
    "time"

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

var (
    randomMetric = prometheus.NewGauge(prometheus.GaugeOpts{
        Name: "random_metric",
        Help: "A random metric",
    })
)

func init() {
    prometheus.MustRegister(randomMetric)
}

func main() {
    go func() {
        for {
            // 更新度量数据
            value := rand.Float64() * 100
            randomMetric.Set(value)
            
            // 延迟2秒
            time.Sleep(time.Second * 2)
        }
    }()

    http.Handle("/metrics", promhttp.Handler())
    http.ListenAndServe(":8080", nil)
}
  1. 定义一个名为 random_metric 的度量对象。
  2. main() 函数中,定时更新 random_metric 的值,并使用 rand.Float64() 生成一个随机数作为度量值。
  3. 使用 prometheus.MustRegister() 函数将度量对象注册到Prometheus客户端库中。
  4. main() 函数中,通过启动一个协程每2秒钟更新一次 random_metric 的值。
  5. 创建一个HTTP处理程序,将度量指标暴露给Prometheus。
标签: golang, prometheus, 监控

非特殊说明,本博所有文章均为博主原创。

评论啦~