发布时间:2026/8/19 19:10:42
Prometheus 官网阅读笔记 教程篇 10 教程10.1 Prometheus 入门什么是 PrometheusPrometheus 是一个系统监控和告警系统。它由 SoundCloud 于 2012 年开源是继 Kubernetes 之后第二个加入云原生计算基金会CNCF并毕业的项目。Prometheus 将所有指标数据存储为时间序列即指标信息与其记录的时间戳一起存储。此外还可以与指标一起存储被称为标签label的可选键值对。什么是指标为什么它们很重要通俗地说指标是衡量的一种标准。我们想要衡量什么取决于具体的应用程序。对于 Web 服务器它可能是请求时间。对于数据库它可能是 CPU 使用率或活动连接数等。指标在了解你的应用程序为何以某种方式运行方面起着重要作用。如果你运行一个 Web 应用程序有人走过来对你说该程序很慢你将需要一些信息来查明你的程序到底发生了什么。例如当请求数量很高时应用程序可能会变慢。如果你有请求计数指标你就可以找出原因并增加服务器数量来处理沉重的负载。每当你为你的应用程序定义指标时你都必须问这样一个问题如果我的应用程序中出现任何问题有哪些信息对我进行调试至关重要Prometheus 的基本架构Prometheus 设置的基本组件包括Prometheus Server抓取并存储指标数据的服务器。被抓取的目标例如暴露其指标的已插桩应用程序或者暴露另一个应用程序指标的 Exporter。Alertmanager用于根据预设规则触发告警。Pushgateway用于采集短任务的指标数据Prometheus 是定期拉取指标数据的有些短任务还没拉取到指标数据任务已经结束了。短任务把指标数据推送到 PushgatewayPrometheus 去 Pushgateway 拉取指标数据。让我们以一个 Web 服务器作为示例应用程序比如该 Web 服务器处理的 API 调用次数。我们使用 Prometheus 客户端库添加一些插桩代码并暴露指标信息。现在我们的 Web 服务器暴露了它的指标我们可以配置 Prometheus 来抓取它。Prometheus 被配置为以特定的时间间隔例如每分钟从监听的 Web 服务器获取指标。当我将服务器公开供使用时应用程序计算请求计数并将其暴露Prometheus 同时抓取该计数指标并将值存储。用户可以控制 Prometheus 抓取指标的频率。Prometheus 还提供了一个 API使用 PromQL 查询指标、根据指标上创建仪表盘/图表等。展示具体怎么做Prometheus 是使用 GO 编写的从这里下载与你的操作系统对应的二进制文件并将其添加到你的系统路径中。Prometheus 会暴露自身的指标这些指标可以由它自己或其他 Prometheus 服务器使用。Prometheus 使用 YAML 文件进行配置global:scrape_interval:15sscrape_configs:-job_name:prometheusstatic_configs:-targets:[localhost:9090]scrape_interval Prometheus 抓取指标的频率scrape_configs 其中包含要从中抓取指标的名称和目标Prometheus 默认监听在 9090 端口prometheus--config.fileprometheus.yml现在我们已经启动并运行了 Prometheus并且它每隔 15 秒就会抓取一次自身的指标。Prometheus 提供了标准的 Exporter 来导出指标。接下来我们将运行一个 node exporter这是一个用于机器指标的 Exporter并使用 Prometheus 抓取这些指标。下载 Node 指标 Exporter。在终端中运行 node exporter。./node_exporter接下来将 node exporter 添加到 scrape_configs 列表中global:scrape_interval:15sscrape_configs:-job_name:prometheusstatic_configs:-targets:[localhost:9090]-job_name:node_exporterstatic_configs:-targets:[localhost:9100]10.2 理解指标类型Prometheus 支持四种指标类型计数器计量器直方图摘要Counter计数器计数器是一种只能增加或重置的指标值即其值不能小于前一个值。它可用于记录请求数、错误数等指标。Gauge仪表盘计量器是一个可以上升或下降的数值。它可用于记录集群中的 Pod 数量、队列中的事件数量等指标。Histogram直方图直方图是一种比前两种更复杂的指标类型。直方图可用于基于桶值计数的任何计算值。一个常见的例子是响应请求所需的时间称为延迟。示例假设我们要观察处理 API 请求所需的时间。我们为所需时间定义桶例如小于或等于 0.3、小于或等于 0.5、小于或等于 0.7、小于或等于 1和小于或等于 1.2。这些就是我们的桶一旦计算出请求所需的时间它就会被添加到所有满足条件的桶中。Summary摘要摘要也测量事件是直方图的替代方案。它们成本更低但丢失更多数据。强烈建议尽可能使用直方图而不是摘要。10.3 用 Go 编写的 HTTP 服务器仪表化在本教程中我们将创建一个简单的 Go HTTP 服务器并通过添加一个计数器指标来对其进行仪表化以统计服务器处理的总请求数。这里我们有一个简单的 HTTP 服务器其中包含一个/ping端点该端点返回pong作为响应。packagemainimport(fmtnet/http)funcping(w http.ResponseWriter,req*http.Request){fmt.Fprintf(w,pong)}funcmain(){http.HandleFunc(/ping,ping)http.ListenAndServe(:8090,nil)}编译并运行服务器go build server.go ./server现在在浏览器中打开https://:8090/ping您应该会看到pong。现在让我们向服务器添加一个指标该指标将用于统计对 ping 端点的请求数量。计数器指标类型非常适合此目的因为我们知道请求计数只会增加而不会减少。创建一个 Prometheus 计数器typemetricsstruct{pingCounter prometheus.Counter}funcnewMetrics(reg prometheus.Registerer)*metrics{m:metrics{pingCounter:promauto.With(reg).NewCounter(prometheus.CounterOpts{Name:ping_request_count,Help:No of requests handled by Ping handler,}),}returnm}接下来让我们更新 ping 处理程序使用metrics.pingCounter.Inc()来增加计数器的计数。funcping(m*metrics)func(w http.ResponseWriter,req*http.Request){returnfunc(w http.ResponseWriter,req*http.Request){m.pingCounter.Inc()fmt.Fprintf(w,pong)}}然后将指标在本例中只有一个计数器注册到 Prometheus 注册表并暴露这些指标。funcmain(){reg:prometheus.NewRegistry()m:newMetrics(reg)http.HandleFunc(/ping,ping(m))http.Handle(/metrics,promhttp.HandlerFor(reg,promhttp.HandlerOpts{}))http.ListenAndServe(:8090,nil)}prometheus.MustRegister函数将 pingCounter 注册到默认注册表。为了暴露指标Go Prometheus 客户端库提供了 promhttp 包。promhttp.Handler()提供了一个http.Handler用于暴露在默认注册表中注册的指标。完整示例代码现在是packagemainimport(fmtnet/httpgithub.com/prometheus/client_golang/prometheusgithub.com/prometheus/client_golang/prometheus/promautogithub.com/prometheus/client_golang/prometheus/promhttp)typemetricsstruct{pingCounter prometheus.Counter}funcnewMetrics(reg prometheus.Registerer)*metrics{m:metrics{pingCounter:promauto.With(reg).NewCounter(prometheus.CounterOpts{Name:ping_request_count,Help:No of request handled by Ping handler,}),}returnm}funcping(m*metrics)func(w http.ResponseWriter,req*http.Request){returnfunc(w http.ResponseWriter,req*http.Request){m.pingCounter.Inc()fmt.Fprintf(w,pong)}}funcmain(){reg:prometheus.NewRegistry()m:newMetrics(reg)http.HandleFunc(/ping,ping(m))http.Handle(/metrics,promhttp.HandlerFor(reg,promhttp.HandlerOpts{}))http.ListenAndServe(:8090,nil)}运行示例go mod init prom_example go mod tidy go run server.go现在访问 localhost:8090/ping 端点几次然后向 localhost:8090/metrics 发送请求以查看指标。在这里ping_request_count显示/ping端点被调用了 3 次。默认注册表包含 Go 运行时指标的收集器这就是我们看到go_threads、go_goroutines等其他指标的原因。我们已经构建了我们的第一个指标导出器。现在让我们更新 Prometheus 配置以从我们的服务器抓取指标。prometheus.yml。global:scrape_interval:15sscrape_configs:-job_name:prometheusstatic_configs:-targets:[localhost:9090]-job_name:simple_serverstatic_configs:-targets:[localhost:8090]prometheus --config.fileprometheus.yml10.4 使用 Grafana 可视化指标如果你在想既然可以直接使用Prometheus进行查询并查看图表为什么还要使用Grafana这类工具答案是我们在Prometheus上运行查询时看到的图表是为了执行临时查询。Grafana和控制台模板是创建图表的两种推荐方式。安装和设置 Grafana请根据您的操作系统按照此处的步骤安装并运行 Grafana。Grafana 安装并运行后在浏览器中导航到 https://:3000 。使用默认凭据用户名admin密码admin登录并设置新凭据。在 Grafana 中添加 Prometheus 作为数据源击侧边栏中的齿轮图标然后选择数据源将数据源添加到 Grafana。在“数据源”屏幕中您可以看到 Grafana 支持多种数据源如 Graphite、PostgreSQL 等。选择 Prometheus 进行设置。在 HTTP 部分输入 URL 为 https://:9090 然后点击保存并测试。创建我们的第一个仪表盘现在我们已成功将 Prometheus 添加为数据源。接下来我们将为ping_request_count指标创建第一个仪表盘该指标是在上一个教程中进行埋点的。点击侧边栏中的图标然后选择仪表盘。在下一个屏幕中点击添加新面板按钮。在“查询”选项卡中输入 PromQL 查询本例中只需输入ping_request_count。多次访问ping端点并刷新图表以验证其是否正常工作。在右侧的“面板选项”部分下将“标题”设置为Ping 请求计数。点击右上角的保存图标以保存仪表盘。基于指标进行告警为了本教程的演示我们将在ping_request_count指标大于 5 时触发告警。从此处下载适用于您操作系统的最新版 Alertmanager。Alertmanager 支持email、webhook、pagerduty、slack等多种接收器当告警触发时它可以通过这些接收器发送通知。您可以在此处找到接收器列表及其配置方法。在本教程中我们将使用webhook作为接收器。请前往 webhook.site 并复制 webhook URL我们稍后将使用它来配置 Alertmanager。首先让我们使用 webhook 接收器设置 Alertmanager。alertmanager.yml。global:resolve_timeout:5mroute:receiver:webhook_receiverreceivers:-name:webhook_receiverwebhook_configs:-url:INSERT-YOUR-WEBHOOKsend_resolved:false将 alertmanager.yml 文件中的INSERT-YOUR-WEBHOOK替换为我们之前复制的 webhook然后使用以下命令运行Alertmanager。alertmanager--config.filealertmanager.yml一旦 Alertmanager 启动并运行请导航至 https://:9093 您应该能够访问它。现在我们已经使用 webhook 接收器配置了 Alertmanager让我们将规则添加到 Prometheus 配置中。prometheus.ymlglobal:scrape_interval:15sevaluation_interval:10srule_files:-rules.ymlalerting:alertmanagers:-static_configs:-targets:-localhost:9093scrape_configs:-job_name:prometheusstatic_configs:-targets:[localhost:9090]-job_name:simple_serverstatic_configs:-targets:[localhost:8090]请注意Prometheus 配置中添加了evaluation_interval、rule_files和alerting部分。evaluation_interval定义了评估规则的时间间隔rule_files接受定义规则的 YAML 文件数组而alerting部分定义了 Alertmanager 的配置。正如在本教程开始时提到的我们将创建一个基本规则即在ping_request_count值大于 5 时触发告警。rules.yml。groups:-name:Count greater than 5rules:-alert:CountGreaterThan5expr:ping_request_count5for:10s使用以下命令运行 Prometheusprometheus--config.file./prometheus.yml在浏览器中打开 https://:9090/rules 即可查看这些规则。接下来运行已插桩的 ping 服务器访问 https://:8090/ping 端点并刷新页面至少 6 次。您可以通过导航到 https://:8090/metrics 端点来检查 ping 计数。要查看告警的状态请访问 https://:9090/alerts 。一旦ping_request_count 5条件满足超过 10 秒state状态将变为FIRING正在触发。现在如果您导航回您的webhook.siteURL您将看到告警消息。类似地Alertmanager 也可以配置其他接收器以便在告警触发时进行通知。

相关新闻

2026/8/20 11:08:00

SillyTavern突破指南:3大挑战与高效解决方案

SillyTavern突破指南:3大挑战与高效解决方案 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern SillyTavern作为一款面向高级用户的LLM前端工具,提供了强大的角色创建和…

2026/8/14 14:17:04

运维--ip单日获取去重数据量超过500条

怎么拆解和排查“IP单日获取去重数据量超过500条”这个现象,在不同的业务场景下意味着完全不同的情况。我们可以从以下几个维度来拆解和排查:🛡️ 1. 安全风控维度:是否触发了异常预警?在网络安全、反爬虫或风控系统中…

2026/8/20 14:14:21

汽车零售数字化转型:渠道下沉、全生命周期运营与OMO融合实战

1. 从“卖车”到“经营用户”:汽车零售的本质变迁 最近和几个在主机厂、经销商集团和新兴零售平台的朋友聊天,大家不约而同地提到一个词:焦虑。这种焦虑,不是来自销量的短期波动,而是源于一种深刻的行业共识——过去那…

2026/8/20 14:14:21

116-平台落地路线图:如果从零开始,应该先搭哪几层

适合对象:准备建设类似平台的技术负责人、架构师和工程团队。 先说结论 平台落地路线图不是一个孤立功能,而是精准测试平台里帮助团队做判断的一环。 它重点解决的是:如果从零开始,应该先搭哪几层。 用大白话讲,先把建设顺序、角色分工和长期治理讲清楚,平台才不会做成…

2026/8/20 14:14:21

DeepSeek大模型与《光·遇》游戏AI交互技术探索与实践

这次我们来看一个很有意思的技术尝试:将 DeepSeek 这类大型语言模型的能力,通过某种方式“接入”到《光遇》这款游戏中。这听起来像是天马行空的想法,但背后其实指向了AI与游戏交互、自动化脚本、甚至是游戏内智能助手等前沿探索方向。 简单…

2026/8/20 14:14:21

114-智能反馈优先级与迭代闭环:为什么不是所有反馈都该同权处理

适合对象:关注智能优化、反馈治理、产品迭代节奏的平台设计人员和后端工程师。 先说结论 智能反馈优先级与迭代闭环不是一个孤立功能,而是精准测试平台里帮助团队做判断的一环。 它重点解决的是:为什么不是所有反馈都该同权处理。 用大白话讲,AI 要建立在平台真实数据之…

2026/8/20 14:09:20

SpringAI的简单理解

SpringAI Spring AI 是 Spring 官方针对人工智能(AI)应用开发推出的标准化框架。 它的核心宗旨是将 Spring 开发者熟悉的“依赖注入、统一抽象、声明式配置、面向接口编程”等生态优势,完美复刻到 AI 和大模型开发领域。 Java 程序员&…

2026/8/20 10:17:13

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/19 15:09:57

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/20 0:01:41

Cline、Hermes、OpenClaw 都能连:HTTP 型 MCP 客户端全适配

后台被问得最多的一类问题是:“我用的是 Cline / Hermes / OpenClaw,能连察元的 WPS 文档服务吗?” 统一回答:能。而且这个"都能连"值得单独写一篇——不是我们挨个给每个客户端做了适配,而是所有这些客户端…

2026/8/20 0:01:41

46 个文档工具一次看懂:察元AI文档助手 MCP 工具目录速览

把察元AI文档助手接进 Claude Code 之后,我建议的第一件事不是急着下提示词,而是把它的 MCP 工具目录过一遍——46 个工具(MCP 目录版本 0.10.0),乍看吓人,其实按"一份文档的生命周期"分组之后非…

2026/8/20 8:35:23

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/20 9:15:29

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/19 16:39:34

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…