Prometheus

55479
下载
Prometheus 是一个开源的监控和告警系统,专注于时间序列数据的采集与存储。由 SoundCloud 开发,配备高级查询语言PromQL,便于数据挖掘与分析,并无缝对接多种可视化平台。

仪表化 Go 应用程序


Prometheus 提供了一个官方的 Go 客户端库,你可以使用它来仪表化(instrumenting) Go 应用程序。在本指南中,我们将创建一个简单的 Go 应用程序,通过 HTTP 露出 Prometheus 元数据。

**注意:**为了获取全面的 API 文档,请参阅 Prometheus 各个 Go 库的 GoDoc

安装

你可以使用go get了解更多信息)安装用于本指南所需的prometheuspromautopromhttp库:

Terminal window
go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promauto
go get github.com/prometheus/client_golang/prometheus/promhttp

Go 指标暴露的原理

为了在 Go 应用程序中暴露 Prometheus 元指标,你需要提供一个/metrics的 HTTP 端点。可以使用prometheus/promhttp库中的 HTTP Handler查看文档)作为 handler 函数。

例如,这个简化后的应用程序会通过http://localhost:2112/metrics暴露 Go 应用程序的默认元指标:

package main
import (
"net/http"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
func main() {
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":2112", nil)
}

启动应用程序:

Terminal window
go run main.go

访问元指标:

Terminal window
curl http://localhost:2112/metrics

添加自定义元指标

上面的示例仅展示了 Go 应用程序的默认元指标。你还可以注册自定义的元指标。此示例应用程序通过myapp_processed_ops_total Counter 跟踪到目前为止处理的操作总数。每2秒,Counter 递增一次。

package main
import (
"net/http"
"time"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
func recordMetrics() {
go func() {
for {
opsProcessed.Inc()
time.Sleep(2 * time.Second)
}
}()
}
var (
opsProcessed = promauto.NewCounter(prometheus.CounterOpts{
Name: "myapp_processed_ops_total",
Help: "The total number of processed events",
})
)
func main() {
recordMetrics()
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":2112", nil)
}

要运行应用程序:

Terminal window
go run main.go

要访问元指标:

Terminal window
curl http://localhost:2112/metrics

在元指标输出中,你将看到帮助文本、类型信息和 myapp_processed_ops_total Counter 的最新值:

# HELP myapp_processed_ops_total The total number of processed events
# TYPE myapp_processed_ops_total counter
myapp_processed_ops_total 5

可以配置本地运行的 Prometheus 实例以从应用程序收集元指标。以下是一个示例 prometheus.yml 配置:

scrape_configs:
- job_name: myapp
scrape_interval: 10s
static_configs:
- targets:
- localhost:2112

其他 Go 客户端功能

在本指南中,我们仅覆盖了 Prometheus Go 客户端库提供的少数功能。你还可以暴露其他元指标类型(如 GaugeHistogram非全局 Registry)、向 Prometheus Pushgateway 推送元指标的函数、将 Prometheus 和 Graphite 桥接及其他功能。

总结

在本指南中,你创建了两个示例 Go 应用程序,它们都能够将元指标暴露给 Prometheus

  • 一个仅露出了默认的 Go 元指标,
  • 另一个还暴露了自定义的 Prometheus Counter

同时我们也配置了一个 Prometheus 实例以从这些应用程序中收集元指标。

该文档基于 Prometheus 官方文档翻译而成。


observability.cn Authors 2024 | Documentation Distributed under CC-BY-4.0
Copyright © 2017-2024, Alibaba. All rights reserved. Alibaba has registered trademarks and uses trademarks.
浙ICP备2021005855号-32