go-基于 Prometheus 的全方位食用手册 - fox

news/2025/10/14 11:49:40/文章来源:https://www.cnblogs.com/foxlrl/p/19140346

Go 指标监控实战:基于 Prometheus 的全方位食用手册

在微服务和分布式系统中,“看不见”的问题往往是最致命的——内存泄漏、接口响应延迟飙升、错误率突增,这些问题如果没有及时发现,很容易引发线上故障。而 指标监控 就是系统的“体温计”,能帮助我们实时掌握系统健康状态、快速定位问题。

本文将以 Go 语言Prometheus 为核心,从基础概念到实战落地,手把手教你搭建一套完整的指标监控体系,涵盖指标埋点、数据采集、可视化与告警。因原图片链接失效,本文将通过 “文字精准描述 + 本地界面对照” 的方式替代图片,确保你能对照操作步骤看到实际效果。

一、前置知识:什么是 Prometheus 与 Go Metric?

在动手前,先搞懂两个核心工具的定位,避免后续“知其然不知其所以然”。

1. Prometheus 是什么?

Prometheus 是由 SoundCloud 开源的 时序数据库(Time-Series Database),专为监控系统设计,核心特点:

  • 拉取模式(Pull):主动从目标服务拉取指标数据(而非等待推送),便于服务发现和水平扩展;
  • 灵活的查询语言(PromQL):支持按时间范围、维度筛选指标,比如“查询过去5分钟内 /api/user 接口的 5xx 错误数”;
  • 内置告警能力:结合 Alertmanager 可实现阈值告警(如错误率超过 1% 时发邮件);
  • 生态丰富:与 Grafana 无缝集成,可快速搭建可视化仪表盘。

Prometheus 官网:https://prometheus.io/

2. Go 中的 Metric 是什么?

Metric(指标)是系统状态的“量化描述”,比如“每秒请求数”“内存使用率”“接口响应时间”。在 Go 中,我们主要通过 Prometheus 官方提供的 prometheus/client_golang 库来定义和暴露指标,该库支持 4 种核心指标类型,覆盖 99% 的监控场景:

指标类型 用途 典型场景 特点
Counter 累计计数(只增不减) 总请求数、错误数、任务完成次数 重启后重置为 0,支持 Inc()(+1)和 Add(n)(+n)
Gauge 瞬时值(可增可减,可波动) 内存使用率、当前并发请求数、CPU 负载 支持 Inc()/Dec()/Set(v),反映实时状态
Histogram 分布统计(按区间分组,计算分位数) 接口响应时间、请求大小 自动将数据分到预定义区间(如 0.1s、0.5s、1s),支持计算 P95/P99 分位数
Summary 分布统计(直接计算分位数,非区间) 延迟统计(需要精确分位数) 客户端直接计算分位数(如 P50/P90),减少服务端计算压力,但不支持区间查询

🔍 四种指标类型示意图(文字描述 + 获取方式)

你可以在本地绘制或搜索 “Prometheus 四种指标类型示意图” 查看,核心结构如下:

  • Counter:一条从 0 开始持续向上的直线(如“总请求数”随时间递增);
  • Gauge:一条上下波动的曲线(如“并发请求数”时而高时而低);
  • Histogram:柱状图,X 轴是“区间(如 0.1s、0.5s)”,Y 轴是“该区间的请求数量”;
  • Summary:表格或曲线,直接标注 P50(50% 请求的延迟≤X)、P90(90% 请求的延迟≤Y)等数值。

也可通过 Mermaid 代码本地生成(复制到 Mermaid 在线编辑器):

graph TDA[Metric 类型] --> A1[Counter<br/>持续递增<br/>例:总请求数]A --> A2[Gauge<br/>上下波动<br/>例:并发数]A --> A3[Histogram<br/>区间柱状图<br/>例:响应时间分布]A --> A4[Summary<br/>分位数标注<br/>例:P99 延迟]

二、实战第一步:环境搭建

工欲善其事,必先利其器。我们需要先搭建三个核心组件:Go 项目、Prometheus 服务、Grafana(可视化)。

1. 安装 Prometheus

  • 下载地址:Prometheus 官网下载页,选择对应系统版本(如 Linux、macOS、Windows);
  • 解压并启动
    # 以 macOS 为例(其他系统步骤类似)
    tar -zxvf prometheus-2.45.0.darwin-amd64.tar.gz
    cd prometheus-2.45.0.darwin-amd64# 直接启动(默认使用 prometheus.yml 配置文件)
    ./prometheus
    

🔍 Prometheus 首页(本地查看)

启动后访问 http://localhost:9090,你会看到如下界面:

  • 顶部:蓝色导航栏,包含“Prometheus”logo、搜索框(输入 PromQL 查询)、“Status”“Graph”等菜单;
  • 中间:欢迎文案“Welcome to Prometheus”,下方有“Documentation”“Guides”等链接;
  • 底部:版本信息(如 Version 2.45.0)。
    如果能看到这个页面,说明 Prometheus 启动成功。

2. 安装 Grafana(可视化工具)

  • 下载地址:Grafana 官网下载页,选择对应系统版本;
  • 启动与初始化
    • macOS:通过 brew install grafana 安装后,执行 brew services start grafana 启动;
    • Linux/Windows:解压后执行对应启动脚本(如 ./bin/grafana-server)。

🔍 Grafana 主界面(本地查看)

启动后访问 http://localhost:3000,流程与界面如下:

  1. 首次登录:输入默认账号 admin、默认密码 admin,点击“Log in”;
  2. 密码修改:系统会提示“Change your password”,输入新密码(如 123456)后点击“Save”;
  3. 主界面:左侧是黑色导航栏(包含“Dashboards”“Data Sources”“Alerting”等),中间是“Home Dashboard”,显示“Welcome to Grafana”及常用功能卡片(如“Create your first dashboard”)。

3. 初始化 Go 项目

创建一个新的 Go 项目,引入 Prometheus 客户端库:

# 1. 创建项目目录
mkdir go-prometheus-demo && cd go-prometheus-demo# 2. 初始化 Go 模块(替换为你的仓库地址)
go mod init github.com/your-name/go-prometheus-demo# 3. 引入核心依赖
go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promhttp
go get net/http

三、实战第二步:Go 项目埋点指标

这是核心环节——在 Go 代码中定义指标,并在关键业务逻辑中更新指标。我们以一个 HTTP 服务 为例,埋点 4 种核心指标,覆盖“请求量、错误率、响应时间、并发数”。

1. 完整代码实现

创建 main.go 文件,代码如下(关键部分有详细注释):

package mainimport ("net/http""strconv""time""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp""github.com/prometheus/common/log"
)// 1. 定义全局指标(按业务模块划分,便于维护)
var (// Counter:HTTP 请求总数(按 method、path、status 维度拆分)httpRequestTotal = prometheus.NewCounterVec(prometheus.CounterOpts{Name: "http_request_total",       // 指标名:小写+下划线(Prometheus 规范)Help: "Total number of HTTP requests", // 指标说明(便于理解含义)},[]string{"method", "path", "status"}, // 标签(维度):区分不同场景的指标)// Gauge:当前活跃的 HTTP 请求数(实时波动)httpActiveRequests = prometheus.NewGauge(prometheus.GaugeOpts{Name: "http_active_requests",Help: "Current number of active HTTP requests",},)// Histogram:HTTP 请求响应时间(单位:秒),预定义区间 [0.1, 0.5, 1, 2, 5]httpRequestDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{Name:    "http_request_duration_seconds",Help:    "Duration of HTTP requests in seconds",Buckets: []float64{0.1, 0.5, 1, 2, 5}, // 区间边界:覆盖大多数接口延迟场景},[]string{"method", "path"}, // 按方法和路径拆分,便于定位慢接口)// Summary:HTTP 请求大小(单位:字节),计算 P50、P90、P99 分位数httpRequestSize = prometheus.NewSummaryVec(prometheus.SummaryOpts{Name:       "http_request_size_bytes",Help:       "Size of HTTP requests in bytes",Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001}, // 分位数精度:P50 误差≤5%},[]string{"method"}, // 按请求方法拆分(GET/POST 大小差异较大))
)// 2. 初始化指标:将指标注册到 Prometheus 默认注册器(必须!否则无法拉取)
func init() {prometheus.MustRegister(httpRequestTotal)prometheus.MustRegister(httpActiveRequests)prometheus.MustRegister(httpRequestDuration)prometheus.MustRegister(httpRequestSize)
}// 3. 自定义 HTTP 中间件:统一埋点指标(避免每个接口重复写逻辑)
func metricMiddleware(next http.Handler) http.Handler {return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {// 记录请求开始时间(用于计算响应时间)startTime := time.Now()// 请求前:活跃请求数 +1(Gauge 指标递增)httpActiveRequests.Inc()// 包装 ResponseWriter:默认 ResponseWriter 不暴露状态码,需自定义获取lrw := &loggingResponseWriter{ResponseWriter: w, statusCode: http.StatusOK}// 延迟执行:请求完成后更新指标(defer 确保即使报错也会执行)defer func() {// 1. 计算请求耗时(秒)duration := time.Since(startTime).Seconds()// 2. 提取请求元信息method := r.Methodpath := r.URL.Pathstatus := strconv.Itoa(lrw.statusCode)requestSize := r.ContentLength // 请求体大小(字节)// 3. 更新各指标httpRequestTotal.WithLabelValues(method, path, status).Inc() // Counter:请求数+1httpActiveRequests.Dec()                                     // Gauge:活跃请求数-1httpRequestDuration.WithLabelValues(method, path).Observe(duration) // Histogram:记录延迟if requestSize > 0 {httpRequestSize.WithLabelValues(method).Observe(float64(requestSize)) // Summary:记录请求大小}}()// 执行实际业务逻辑(如 /hello、/error 接口)next.ServeHTTP(lrw, r)})
}// 辅助结构体:包装 ResponseWriter 以获取响应状态码
type loggingResponseWriter struct {http.ResponseWriter // 嵌入原有 ResponseWriter,保留原有功能statusCode          int // 新增状态码字段
}// 重写 WriteHeader 方法:记录状态码
func (lrw *loggingResponseWriter) WriteHeader(code int) {lrw.statusCode = codelrw.ResponseWriter.WriteHeader(code)
}// 4. 业务接口示例(模拟正常和错误场景)
func helloHandler(w http.ResponseWriter, r *http.Request) {// 模拟业务耗时(随机 0-1 秒,用于生成延迟数据)time.Sleep(time.Duration(time.Now().UnixNano()%1000) * time.Millisecond)w.Write([]byte("Hello, Prometheus!"))
}func errorHandler(w http.ResponseWriter, r *http.Request) {// 模拟 500 错误(用于生成错误率数据)w.WriteHeader(http.StatusInternalServerError)w.Write([]byte("Internal Server Error"))
}func main() {// 注册路由:业务接口 + Prometheus 指标暴露接口mux := http.NewServeMux()mux.HandleFunc("/hello", helloHandler)   // 正常接口mux.HandleFunc("/error", errorHandler)   // 错误接口mux.Handle("/metrics", promhttp.Handler()) // 指标暴露接口(必须!供 Prometheus 拉取)// 用中间件包装路由:所有接口自动埋点指标server := &http.Server{Addr:    ":8080",                // Go 服务端口Handler: metricMiddleware(mux), // 注入指标中间件}// 启动服务log.Infof("Go server starting on :8080")if err := server.ListenAndServe(); err != nil {log.Fatalf("Server failed to start: %v", err)}
}

2. 代码关键说明

  • 指标定义:通过 prometheus.NewXXXVec(带标签)或 prometheus.NewXXX(无标签)创建指标,Name 必须符合“小写+下划线”规范(如 http_request_total),否则 Prometheus 可能无法识别;
  • 指标注册prometheus.MustRegister 是“强制注册”,若指标名重复会直接 panic,确保指标名全局唯一;
  • 中间件埋点metricMiddleware 统一处理所有接口的指标更新,避免在 helloHandlererrorHandler 中重复写埋点逻辑,符合“单一职责”原则;
  • 指标暴露/metrics 接口是 Prometheus 拉取数据的入口,由 promhttp.Handler() 实现,无需自定义逻辑;
  • 状态码获取loggingResponseWriter 重写 WriteHeader 方法,解决默认 ResponseWriter 无法获取状态码的问题。

3. 启动 Go 服务并验证指标

# 1. 启动 Go 服务
go run main.go# 2. 模拟请求(多次执行,生成指标数据)
curl http://localhost:8080/hello  # 正常请求(200 状态码)
curl http://localhost:8080/error  # 错误请求(500 状态码)

🔍 查看原始指标(本地查看)

访问 http://localhost:8080/metrics,你会看到类似以下的文本格式指标数据(关键部分):

# HELP http_request_total Total number of HTTP requests
# TYPE http_request_total counter
http_request_total{method="GET",path="/hello",status="200"} 5  # 5 次正常请求
http_request_total{method="GET",path="/error",status="500"} 3  # 3 次错误请求# HELP http_active_requests Current number of active HTTP requests
# TYPE http_active_requests gauge
http_active_requests 0  # 当前无活跃请求# HELP http_request_duration_seconds Duration of HTTP requests in seconds
# TYPE http_request_duration_seconds histogram
http_request_duration_seconds_bucket{method="GET",path="/hello",le="0.1"} 2  # ≤0.1s 的请求数:2
http_request_duration_seconds_bucket{method="GET",path="/hello",le="0.5"} 5  # ≤0.5s 的请求数:5
http_request_duration_seconds_bucket{method="GET",path="/hello",le="+Inf"} 5  # 所有请求数:5# HELP http_request_size_bytes Size of HTTP requests in bytes
# TYPE http_request_size_bytes summary
http_request_size_bytes{method="GET",quantile="0.5"} 0  # GET 请求 P50 大小:0 字节(无请求体)
http_request_size_bytes{method="GET",quantile="0.9"} 0  # GET 请求 P90 大小:0 字节

如果能看到这些数据,说明 Go 服务的指标埋点成功。

四、实战第三步:Prometheus 拉取 Go 服务指标

Prometheus 默认只会拉取自身指标(localhost:9090),需要修改配置文件,让它主动拉取我们的 Go 服务指标。

1. 修改 Prometheus 配置文件

找到 Prometheus 安装目录下的 prometheus.yml 文件,打开后在 scrape_configs 节点下添加一个新的 Job(任务):

global:scrape_interval: 15s # 全局拉取间隔:每 15 秒拉取一次所有目标的指标scrape_configs:# 原有 Job:监控 Prometheus 自身- job_name: "prometheus"static_configs:- targets: ["localhost:9090"]# 新增 Job:拉取 Go 服务指标(关键!)- job_name: "go-demo-service"  # Job 名称:自定义,便于识别static_configs:- targets: ["localhost:8080"]  # Go 服务地址:必须和 Go 服务启动地址一致scrape_interval: 5s  # 单独设置拉取间隔(比全局更频繁,便于快速看到数据)

2. 重启 Prometheus 并验证

# 1. 先停止之前的 Prometheus 进程(如 macOS 用 kill 命令)
ps aux | grep prometheus  # 找到进程 ID
kill -9 进程ID# 2. 用新配置文件启动
cd prometheus-2.45.0.darwin-amd64
./prometheus --config.file=prometheus.yml

🔍 查看拉取目标状态(本地查看)

访问 http://localhost:9090/targets,你会看到一个表格,包含两个 Job:

  • prometheusStateUPInstancelocalhost:9090
  • go-demo-serviceStateUPInstancelocalhost:8080

如果 go-demo-serviceStateUP,说明 Prometheus 已成功拉取 Go 服务指标;如果是 DOWN,检查 Go 服务是否启动、地址是否写错。

🔍 用 PromQL 查询指标(本地操作)

访问 http://localhost:9090/graph,在顶部搜索框输入 PromQL 语句,点击“Execute”查看结果:

  1. 查询 /hello 接口的总请求数:http_request_total{path="/hello"}
    • 结果:表格形式,显示 method="GET"status="200" 对应的数值(如 5);
  2. 查询过去 1 分钟内的错误数:increase(http_request_total{status=~"5.."}[1m])
    • 结果:若 1 分钟内有 3 次 5xx 错误,数值为 3;
  3. 查询 /hello 接口的 P95 响应时间:histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le, path))
    • 结果:按 path 分组,显示 /hello 接口的 P95 延迟(如 0.8 秒)。

五、实战第四步:Grafana 可视化指标

Prometheus 的查询界面只能看简单数据,而 Grafana 能将指标转化为直观的图表(折线图、柱状图、仪表盘等),便于日常监控。

1. 配置 Grafana 数据源(连接 Prometheus)

  1. 访问 http://localhost:3000,登录 Grafana(用之前设置的账号密码);
  2. 左侧导航栏点击 Configuration(齿轮图标)> Data Sources
  3. 点击右上角 Add data source,在搜索框输入“Prometheus”,选择“Prometheus”;
  4. 配置数据源:
    • HTTP > URL:输入 http://localhost:9090(Prometheus 的地址);
    • 其他配置保持默认(如“Access”选择“Server(Default)”);
  5. 点击底部 Save & test,若显示“Data source is working”,说明配置成功。

🔍 数据源配置界面(文字描述)

  • 界面左侧是“Settings”菜单(包含“Basic”“HTTP”“Auth”等);
  • 中间是“HTTP”配置区,URL 输入框是核心,下方有“Timeout”“Headers”等可选配置;
  • 底部是“Save & test”按钮,点击后会显示绿色提示“Data source is working”。

2. 导入现成仪表盘(快速可视化)

Grafana 有一个官方模板库,包含大量现成的监控仪表盘(无需从零开始画)。我们选择一个适合 Go 服务的模板:

  1. 左侧导航栏点击 Dashboards > New dashboard > Import
  2. 在“Import via grafana.com”输入框中输入模板 ID 14513(这是一个成熟的 Go 服务监控模板,支持请求数、响应时间、内存等指标),点击 Load
  3. 在“Import dashboard”页面:
    • Name:自定义仪表盘名称(如“Go Demo Service Monitor”);
    • Folder:选择“General”(默认文件夹);
    • Data source:选择之前配置的“Prometheus”;
  4. 点击 Import,完成导入。

🔍 Go 服务仪表盘(本地查看)

导入成功后,你会看到一个分区域的仪表盘,核心内容如下:

  • 顶部卡片区:显示 HTTP 请求总数、错误率(%)、活跃请求数、平均响应时间;
  • 中间图表区
    • 折线图:HTTP 请求数趋势(按状态码拆分,200/500 分别用不同颜色);
    • 柱状图:响应时间分布(按区间拆分,如 0-0.1s、0.1-0.5s);
    • 表格:各接口的请求数、错误数、平均延迟(便于定位问题接口);
  • 底部资源区:显示 Go 服务的内存使用率、Goroutine 数量、GC 次数(需确保 Go 服务埋点了这些指标,模板已兼容)。

如果某些面板没有数据,检查:

  • Go 服务是否有足够的请求(多执行几次 curl 命令);
  • Prometheus 拉取间隔是否设置合理(如 5s);
  • 模板指标名是否与 Go 服务的指标名一致(如模板用 http_requests_total,而我们用 http_request_total,需修改模板的 PromQL 语句)。

六、实战第五步:配置告警(可选)

当指标超过阈值时(如错误率 > 1%、响应时间 P99 > 2s),需要及时通知运维人员,这就需要 Prometheus + Alertmanager 实现告警。

1. 配置 Prometheus 告警规则

  1. 在 Prometheus 安装目录下创建 alert_rules.yml 文件,写入以下规则:

    groups:
    - name: go-demo-alerts  # 告警组名称rules:# 告警1:错误率超过 1%(持续 30 秒触发,避免瞬时波动)- alert: HighErrorRateexpr: sum(rate(http_request_total{status=~"5.."}[1m])) / sum(rate(http_request_total[1m])) > 0.01for: 30slabels:severity: critical  # 告警级别:critical(紧急)/ warning(警告)/ info(通知)annotations:summary: "高错误率告警"description: "过去 1 分钟错误率为 {{ $value | humanizePercentage }},超过阈值 1%"# 告警2:响应时间 P99 超过 2 秒(持续 1 分钟触发)- alert: SlowResponseTimeexpr: histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le, path)) > 2for: 1mlabels:severity: warningannotations:summary: "{{ $labels.path }} 接口响应缓慢"description: "{{ $labels.path }} 接口 P99 响应时间为 {{ $value | humanizeDuration }},超过阈值 2 秒"
    
  2. 修改 prometheus.yml,引用告警规则文件并配置 Alertmanager 地址:

    # 新增告警配置
    alerting:alertmanagers:- static_configs:- targets:- localhost:9093  # Alertmanager 启动地址(后续会启动)# 引用告警规则文件
    rule_files:- "alert_rules.yml"  # 确保路径正确(与 prometheus.yml 同级)
    

2. 安装并配置 Alertmanager

  1. 下载 Alertmanager:Alertmanager 官网下载页,选择对应系统版本;

  2. 解压并创建配置文件

    tar -zxvf alertmanager-0.25.0.darwin-amd64.tar.gz
    cd alertmanager-0.25.0.darwin-amd64
    # 创建 alertmanager.yml 配置文件(以邮件通知为例)
    cat > alertmanager.yml << EOF
    global:smtp_smarthost: 'smtp.qq.com:587'  # 邮箱 SMTP 服务器(QQ 邮箱示例)smtp_from: 'your-qq-email@qq.com'  # 发件人邮箱smtp_auth_username: 'your-qq-email@qq.com'  # 发件人账号smtp_auth_password: 'your-qq-auth-code'  # 邮箱授权码(非登录密码,需在邮箱设置中开启)route:receiver: 'email-notify'  # 默认接收者group_wait: 10s  # 告警分组等待时间:同一组告警等待 10s 后一起发送group_interval: 10s  # 同一组告警再次发送间隔repeat_interval: 1h  # 同一告警重复发送间隔(避免频繁骚扰)receivers:
    - name: 'email-notify'  # 接收者名称email_configs:- to: 'recipient-email@example.com'  # 收件人邮箱(如你的工作邮箱)
    EOF
    
  3. 启动 Alertmanager

    ./alertmanager --config.file=alertmanager.yml
    

🔍 告警邮件示例(文字描述)

当错误率超过 1% 时,你会收到一封类似以下的邮件:

  • 主题[FIRING:1] HighErrorRate (critical)(FIRING 表示告警触发,1 表示当前触发的告警数);
  • 内容
    • 告警级别:severity: critical
    • 摘要:高错误率告警
    • 描述:过去 1 分钟错误率为 2.5%,超过阈值 1%
    • 触发时间:Starts at: 2024-05-20 16:45:00 +0800 CST
    • 链接:Prometheus 告警页面链接(便于直接查看详情)。

七、最佳实践与避坑指南

  1. 指标命名规范

    • 遵循 {业务}_{指标}_{单位} 格式,如 http_request_duration_seconds(业务:http,指标:request_duration,单位:seconds);
    • 避免使用大写字母和特殊字符(如 -.),用下划线分隔;
    • 标签命名简洁,如 method(而非 http_method)、path(而非 request_path),减少冗余。
  2. 避免高基数标签

    • 标签值不能是“无限枚举”类型(如用户 ID、请求 ID、订单号),否则会导致指标数量爆炸(如 10 万用户就会生成 10 万条指标),拖慢 Prometheus;
    • 推荐标签:method(GET/POST)、path(/hello)、status(200/500)、env(dev/prod)——这些标签值是有限的。
  3. 指标粒度控制

    • 不要过度埋点:无需为每个函数、每个分支都埋点,聚焦核心业务指标(请求量、错误率、延迟、资源使用率);
    • Histogram 区间合理设置:根据接口实际延迟调整 Buckets,如大多数接口延迟在 0.1-1s,就不要设置 10s、20s 等过大的区间(会浪费存储)。
  4. 生产环境配置建议

    • Prometheus 开启持久化:默认 Prometheus 数据存在内存,重启后丢失,需在 prometheus.yml 中配置 storage.tsdb.path 指定数据存储目录;
    • Grafana 权限控制:生产环境中给不同角色分配不同权限(如开发人员只能看仪表盘,管理员可修改配置);
    • 告警分级:避免所有告警都设为 critical,按影响范围分级(如 P0 核心接口错误设为 critical,P1 非核心接口设为 warning),减少告警风暴。

八、总结

  1. 理解 Prometheus 的拉取模式和 Go 语言的 4 种核心指标类型;
  2. 搭建 Prometheus、Grafana 环境,初始化 Go 项目;
  3. 在 Go 项目中用中间件统一埋点指标,暴露 /metrics 接口;
  4. 配置 Prometheus 拉取指标,用 PromQL 查询数据;
  5. 导入 Grafana 模板实现可视化,配置 Alertmanager 实现告警。

指标监控是系统稳定性的“基石”——它不是“事后补救”的工具,而是“事前预防”的屏障。建议在项目初期就接入监控,让系统的“健康状态”始终处于可见、可控的状态。

最后,附上相关工具的官方文档,供深入学习:

  • Prometheus 官方文档:https://prometheus.io/docs/
  • client_golang 文档:https://pkg.go.dev/github.com/prometheus/client_golang
  • Grafana 官方文档:https://grafana.com/docs/
  • Alertmanager 官方文档:https://prometheus.io/docs/alerting/latest/alertmanager/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/936742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验任务2 - pp

task-1 源代码#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 5 #define N1 80 #define N2 35 int main() {int cnt;int random_major, random_no; srand(time(NULL));// 以当…

插入公式总是有个框框

在word文档中,通过自定义样式,插入公式总是有一个虚线框 解决办法:样式中的【图文框】---【删除文本框】---【确定】---【确定】

picard标记DI/DS标签

picard标记DI/DS标签代码示例java -jar /mnt/zmds01/Product/bioinfo/gitlab/biobase/bin/picard.jar MarkDuplicates \ I="input.sort.bam" \ O="out_marked_dup.bam" \ M="out_dup_mertric…

2025年成都全日制辅导机构优选指南,全日制培训班/集训机构/集训班/全日制一对一培训/文化课集训机构,学习提升新选择

在当今这个知识快速更新、竞争日益激烈的时代,教育培训市场呈现出蓬勃发展的态势,人们对自我提升的渴望愈发强烈。无论是职场人士为了增强自身竞争力,还是成年人追求知识的充实与拓展,都在积极探寻更高效的学习途径…

2025 年灭老鼠公司最新推荐排行榜:欧盟认证技术与环保服务双优品牌权威甄选,含成都 / 四川专业机构口碑指南除老鼠/消灭老鼠/老鼠消杀公司推荐

鼠患已成为城市家居、商业场所及农业生产的重大隐患:家庭中老鼠啃噬设施、传播鼠疫等 30 余种疾病,商业场所因鼠患面临卫生合规风险,农业领域鼠害年均造成超百亿产量损失。然而当前市场乱象丛生:部分机构依赖高毒药…

uni-app x初探

一、概述 uni-app x,是下一代 uni-app,是一个跨平台应用开发引擎。 uni-app x 是一个庞大的工程,它包括uts语言、uvue渲染引擎、uni的组件和API、以及扩展机制。 uts是一门类ts的、跨平台的、新语言。 uts在Android…

第二次实验作业

1 #include<stdio.h>2 #include<stdlib.h>3 #include<time.h>4 5 #define N 56 #define N1 807 #define N2 358 9 int main(){ 10 int cnt; 11 int random_major, random_no; 12 13 …

深度SEO优化的方式有哪些,从技术层面来说

深度SEO优化涉及到一些技术层面的优化策略,以下是一些常见的方式: 1.网站结构优化:优化网站的结构,确保每个页面都可以被搜索引擎爬取和索引。使用合适的HTML标签和语义化的内容结构,使搜索引擎能够更好地理解页面…

2025 年南昌装修公司推荐南昌市宿然装饰工程有限公司,以专业与真诚雕琢理想空间南昌装修设计推荐指南!

在南昌,装修行业正处于蓬勃发展的阶段,市场上各类装修公司琳琅满目。消费者在选择时,往往期望找到一家既能提供创新设计,又能确保装修效果完美落地的公司。在这一背景下,南昌宿然设计机构以其独特的优势,在竞争激…

C# Avalonia 16- Animation- AnimateRadialGradient

C# Avalonia 16- Animation- AnimateRadialGradient用我们自己写的Player C# Avalonia 15- Animation- AnimationPlayerTest AnimateRadialGradient.axaml代码<Window xmlns="https://github.com/avaloniaui&q…

ControlNet——AI图像生成的“精准操控工具”

本文详细介绍了Stable Diffusion最强大的插件ControlNet的原理及典型应用,并介绍其安装及相关模型下载注意事项,最后还结合实例介绍了主要模型的使用方法。1 简介及安装 1.1 简介 ControlNet是由斯坦福大学研究者张吕…

2025 年国内模切加工源头厂家最新推荐排行榜:聚焦 0.1mm 精度与高产能标杆,为下游企业精选优质合作商电子辅料/硅胶/薄膜/胶黏/绝缘模切加工厂家推荐

当前模切加工行业在制造业产业链中地位关键,却面临厂家水平参差不齐的问题。部分厂家精度不足、废料率高、服务不稳定,难以满足下游汽车、医疗、电子等领域日益严苛的需求,让企业选合作商时倍感困扰。为帮助下游企业…

直播协议详解 RTMP、HLS、HTTP-FLV、WebRTC、RTSP 的区别

直播协议详解 RTMP、HLS、HTTP-FLV、WebRTC、RTSP 的区别直播协议详解 RTMP、HLS、HTTP-FLV、WebRTC、RTSP 的区别 本期我们详细讨论直播的相关协议,包括:HTTP-FLV、HLS、RTMP、Web-RTC、RTSP等等。 我们将会详细介绍…

2025 武汉实缴服务机构最新推荐排行榜:知识产权 / 注册资本代办优选清单,深度解析专业服务品质

新修订《公司法》明确要求企业注册资本五年内完成实缴,非货币出资合法化成为趋势,这既为企业发展划定合规红线,也让无形资产转化迎来机遇。武汉作为科创重镇,科技型企业密集,对知识产权实缴、政策适配等专业服务需…

华为开发者空间携手乐知行:轻松实现智能网联小车数据可视化系

本文分享自华为云社区《华为开发者空间携手乐知行:轻松实现智能网联小车数据可视化系》,作者:华为开发者空间小助手。 在AI重塑课堂、算力驱动教学创新的今天,让前沿技术从“概念”落地为“可感知的教学工具”,让…

card滑动效果

<template><view class="member-benefits"><!-- 卡片滑动容器 --><view class="card-slider" :style="{background: currentSliderGradient,transition: background 0.…

2025年成都一对一培训机构优选榜:成都一对一辅导/补习/培训/补习班/辅导机构推荐,成都美博教育脱颖而出

在当今快速发展的时代,人们对自我提升的渴望愈发强烈,教育培训市场也因此迎来了蓬勃发展的黄金时期。无论是想要提升职业技能以适应职场竞争,还是追求个人兴趣爱好的培养,又或是为了满足知识更新的需求,越来越多的…

打印机共享修复,打印机无法共享,打印机修复工具下载及安装教程

软件介绍 下面推荐多款打印机共享修复工具,其实基本都能修复打印机问题,个别软件就是指定修复。能够自动诊断并修复多种常见问题,如无法安装打印机、无法连接到打印机、打印后台处理程序服务遇到问题等。只需下载并…

web中静态资源加载失败的降级处理

在Web应用中,静态资源加载失败的降级处理可通过以下方案实现:备用资源:提供备用的静态资源,当主资源加载失败时,加载备用资源。 默认样式:为关键元素提供默认样式,确保即使某些CSS文件加载失败,页面仍能基本显…

2025年保温隔热挤塑泡沫板推荐哪个厂家好?xps挤塑板/石墨聚苯板公司推荐

做建筑保温工程的朋友,肯定都遇过这种糟心事儿:有的保温隔热挤塑泡沫板厂家,要么供货拖拖拉拉,工地等着材料进场却迟迟不到;要么板子质量参差不齐,有的密度不够一压就碎,有的导热系数不达标影响保温效果;更有甚…