当前位置: 首页 > article >正文

「码动四季·开源同行」go实战案例:如何使用 Prometheus 和 Grafana 监控预警服务集群?

监控和预警平台是互联网公司较为重要的后端架构组成之一是整个运维乃至整个产品生命周期中最重要的一环它能够事前及时预警发现故障事后提供详实的数据用于追查定位问题。Prometheus和Grafana 相结合是开源服务监控和预警平台的主流方案之一。监控和预警平台的重要性在《SREGoogle运维解密》一书中就有体现开发人员可以通过监控和预警平台了解服务内部的实际运行状态通过对指标的观察可以预判所出现问题的可能原因并且能够在系统发生故障时快速通知相关的人员。建立完善的监控体系可以达到以下四个目的数据可视化。开发人员可以通过可视化仪表盘直观地了解系统的运行状态、资源使用情况和内部性能指标等信息。跟踪和分析程序的长期指标趋势。监控系统通过对监控样本数据的长期收集和统计来进行长期趋势分析以及预判操作。例如开发人员可以通过对磁盘空间占用增长率长期数据的分析提前预测需要在哪个时间点对磁盘进行清理操作。故障和异常告警。当系统将要或者已经出现故障或异常状态时监控系统能迅速感知并通知开发人员从而能够让开发人员对问题进行快速处理避免出现对业务的严重影响。故障和异常分析与定位。当故障或者异常发生后开发人员可以通过当时的监控数据对其进行调查和处理最终找到故障和异常产生的根源问题。今天我们就以一个简单的 Go服务为例从O 部署和搭建基于 Prometheus 和 Grafana的监控和预警平台通过钉钉机器人发送报警信息。如上图所示Prometheus 从不同类型的 Exporter上收集到业务服务或者中间件的数据然后 Grafana从 Prometheus 中获取数据并进行可视化展示还会根据报警规则将报警信息通过邮件、钉钉或者短信发送给开发人员。部署和配置PrometheusPrometheus 是一套开源的基于时间序列数据库的数据监控报警平台。2012 年Prometheus 由SoundCloud 公司着手开发后续又被多家公司和组织接受和采用最终将其独立为开源项目并成立独立公司来运作。开源之后Prometheus 项目及其社区一直非常活跃并获得众多开发人员的支持和参与。Prometheus 最终于 2016 年加入了云计算基金会成为继 Kubernetes 之后的第二个云计算基金会托管的开源项目。总之Prometheus是一款十分成功的开源服务监控预警系统它具有以下优点:多维数据模型时序列数据由 metric 名和一组 key/value 组成方便存储不同格式和模型的数据;可以使用自建的PromQL在多维度上灵活地进行数据查询方便数据检索和查询;不依赖分布式存储单主节点工作方便自身部署和运维;可以采用 Push 和 PushGateWay 结合的方式进行数据收集方便特殊网络状况下的数据收集;可以通过服务发现或者静态配置来获取要进行数据采集的目标服务或机器方便动态配置数据采集的目标支持多种可视化图表及表盘方便数据可视化。此外Prometheus 采集数据时使用拉模型Pul通过HTTP 协议调用Exporter 的接口来采集数据指标只要服务能够提供 HTTP 接口就可以接入 Prometheus 监控系统相较于私有协议或二进制协议来说接入成本低且开发简易这无疑简化了应用系统纳入该系统的工作量并降低了难度。首先我们使用 Docker 系统来部署 Prometheus:sudo docker run -d -p 9090: 9090 \ -v /prom_etc/prometheus.yml:/etc/prometheus/prometheus.yml \ -v /prom_etc/alert.rules:/etc/prometheus/alert.rules \ --name prometheus prom/prometheus \ --config.file/etc/prometheus/prometheus.yml \ --web.enable-lifecycle启动时加上-web.enable-lifecycle会启用远程热加载配置文件功能调用指令是curl-XPOSThttp://localhost:9090/-/reload。/prom_etc/prometheus.yml文件是主要的配置文件其具体配置和解释如下所示:global: scrape_interval: 15s#抓取数据的间隔默认为1分钟 evaluation_interval 15s #评估数据的间隔 external_labels: monitor: codelab-monitor数据抓取相关配置scrape_configs: # prometheus自身数据的抓取配置 job_name:prometheus static_configs: - targets: [localhost:9090]Go程序数据的抓取配置job_name: go scrape_interval:10s # 抓取间隔 metrics_path:/metrics # 抓取数据的URL路径 static_configs: - targets:[192.168.0.104:9100] #抓取数据的iP地址 labels: instance: go1scrape_configs 中配置的就是可以抓取数据的任务比如对 Prometheus自身数据的抓取、对 Go 程序数据的抓取、对 MySQL 数据的抓取和对 Redis 性能数据的抓取等等。Prometheus 特意显示了诸多exporter 来对这些程序或者中间件的数据抓取例如MySQL server exporter、Memcachedexporter 和 jMX exporter 等。我们可以在 Prometheus 的 Targets 页面查看这些抓取任务的状态具体如下图所示:由上图可以看到Prometheus自身的数据抓取已经成功但是对Go程序的抓取一直处于失败状态所以接下来我们需要部署 Go服务程序并提供相应的数据抓取网络接口。部署Go服务的Exporter我们可以直接使用 Prometheus 提供的 Go语言Client 来实现 Go程序数据的 Exporter只要引入prometheus/client_golang包并建立网络服务即可具体代码如下所示:import ( net/http github.com/prometheus/client_golang/prometheus/promhttp ) func main() { http.Handle(/metrics, promhttp.Handler()) http.ListenAndServe(:9100 nil) //监听 9100端口提供数据抓取服务 }该程序运行起来后再去 Prometheus 的 Targets 界面查看就会发现Prometheus已经能够获取到Go服务进程相关的数据了。虽然 Prometheus 自带数据的可视化界面但是图表格式较为基础且只能临时查看总之是不够好用所以业界一般使用Grafana作为监控数据的展示平台。部署和配置GrafanaGrafana是一款专门的数据可视化工具。它有着非常漂亮的布局和图表展示以及功能齐全的度量仪表盘和图形编辑器。除此之外Grafana 还能够根据查询条件设置聚合规则在对应的图表上进行展示并且支持多个图表共同组建成一个看板。Grafana的主要优点有图表展示方式灵活。Grafana 能够支持多种可视化指标和看板拥有丰富的仪表盘插件比如热图、折线图和图表等多种展示方式。支持多种数据源。Grafana 支持多种数据源可以将 Graphite、InfluxDB、OpenTSDB、Prometheus、Elasticsearch、CloudWatch 和 KairosDB 等系统作为数据源。强大的报警规则配置和通知功能。Grafana可以配置相应指标的警报规则并每隔固定时间计算判断是否触发规则在数据触发规则时通过钉钉、邮件、短信等方式发送报警信息。支持多数据源混合展示。在同一图表或者看板中可以使用不同数据源的数据每个查询都可以特殊指定数据源甚至可以自定义数据源。下面我们就来部署和配置 Grafana平台并以 Prometheus 为数据源建立对 Go 程序的数据展示面板。首先还是使用 Docker 部署 Grafana 镜像:docker run -d -p 3001:3000 --namegrafana544 grafana/grafana然后登录网站htp://127.0.0.1:3001/用户名和密码默认都是 admin登录后要修改登录密码。接着我们配置Grafana的数据源从列表中选择 Prometheus然后URL一栏填写其服务器地址Access一栏选择 Server 项再点击 Save Test 按钮来检查并保存这样我们就将上文配置的Prometheus 设置为Grafana的数据源了。Grafana数据源配置页面最后我们来建立 Go程序数据的可视化看板从界面左侧的加号点击可以从0开始新建可视化看板也可以导入其他人开源的可视化看板。新建看板时只要在Metrics中输入自己想要监控的数据名称即可比如我们想要监控 Go程序中协程的数量则输入go_goroutines然后上方图标就会显示出对应的数据一个是 Prometheus 平台自身的协程数据另外一个则是 Go程序的协程数据。如果只想看Go程序的则可以输入go_goroutinesjobgo}即可限定只显示 Go 程序的数据。Grafana看板配置页面新建看板虽然入门简单但是想要建立起完备真实可用的看板也是要花费一定时间的所以我们往往都是直接导入其他人开源的看板配置。那怎么导入呢首先我们在Grafana dashboards | Grafana Labs上搜索Go 相关的看板配置然后检查这个看板配置是否和我们所收集数据的Exporter相互吻合确定之后复制该看板详情页面的网络URL。Grafana网站页面将 URL贴到Grafana 的导入页面上点击加载就会加入一些看板名称、数据来源等配置点击保存我们就直接获得了Go程序的监控数据可视化看板界面。Grafana 看板导入界面从可视化看板中我们可以清晰地看到Go 程序相关的性能指标曲线图比如 process memory、gomemstats、Goroutines 和 GC duration 等。Grafana看板详情界面基于这些性能指标曲线图我们就可以清楚地了解Go程序在过去的某一时刻某些指标是否异常从而给线上Go程序异常分析工作提供巨大的帮助。除了协助异常诊断Grafana还可以根据性能指标进行报警比如当 process memory 超过一定数值时通过钉钉或者邮件向开发者发出报警信息有助于开发者提前感知线上程序的异常状态从而尽快处理以减少线上程序异常情况发生的频率。配置报警规则和通道接下来我们就来基于 Grafana 配置对于 Go 程序的性能数据异常的报警渠道。首先我们编辑想要报警指标的看板切换到Alert一栏在Conditions下面我们可以进行均值相关的配置如下图所示我们就做了这样的配置如果 Go程序线程数量在一分钟内的均值超过8则报警对应的上方图标就有一条红线表示警戒线。Grafana报警规则配置界面接着我们需要配置报警渠道可以选择钉钉或者邮件渠道。我们在需要发送报警消息的群中首先添加一个自定义机器人安全设置就勾选自定义关键词选项关键词就选择报警”二字。钉钉机器人配置界面添加后我们可以获得该机器人的 Webhook 地址然后进入Grafana的报警渠道配置页面新建DingDing 类型的报警渠道将Webhook 地址填入 Url一栏点击 Test 没问题后再点击 Save 进行保存。Grafana 报警通道配置界面然后在配置报警规则时报警渠道选择钉钉报警渠道”文本消息中必须包含报警二字否则不能通过钉钉机器人的安全配置校验从而导致无法发送报警信息具体配置如下图所示:Grafana报警规则配置页面综上Grafana每隔1分钟对Go服务的协程数量进行判断如果其数值持续超过8 到达 5分钟则通过钉钉发送报警消息。小结本文主要讲解了如何使用 Prometheus 和 Grafana 建立 Go 程序性能数据监控和报警平台。根据系统的需要对业务服务、中间件或者数据库的数据基表进行收集和展示方便开发人员查看和了解整体系统的动态和数据指标协助排查线上异常问题和提前发现异常状态。

相关文章:

「码动四季·开源同行」go实战案例:如何使用 Prometheus 和 Grafana 监控预警服务集群?

监控和预警平台是互联网公司较为重要的后端架构组成之一,是整个运维乃至整个产品生命周期中最重要的一环,它能够事前及时预警发现故障,事后提供详实的数据用于追查定位问题。Prometheus和Grafana 相结合是开源服务监控和预警平台的主流方案之…...

以考促学、以练固基:一体化在线考试学习平台设计与实践

在数字化培训与考核普及的背景下,考试、学习、练习一体化已成为企事业单位、教育、政府、金融、电力等行业提升培训效率、规范考核流程的核心需求。传统模式下学习、练习、考试相互割裂,存在组织成本高、监管难度大、数据不互通、效果难追踪等问题&#…...

【成本管理】信息系统项目管理师论文范文

#信息系统项目管理师论文写作要求 信息系统项目管理师论文项目成本管理范文,范文仅供参考。...

使用GitHub Actions实现SDMatte模型的CI/CD自动化流水线

使用GitHub Actions实现SDMatte模型的CI/CD自动化流水线 1. 为什么需要自动化流水线 在机器学习项目开发中,团队经常面临这样的困境:每次代码更新后,需要手动运行测试、构建镜像、部署环境,这个过程不仅耗时耗力,还容…...

人脸识别OOD模型真实效果:会议直播截图中关键人物人脸的OOD分标注集

人脸识别OOD模型真实效果:会议直播截图中关键人物人脸的OOD分标注集 1. 引言:为什么需要人脸识别OOD模型? 在日常的人脸识别应用中,我们经常会遇到这样的问题:上传的图片质量参差不齐,有些图片模糊不清&a…...

MiniCPM-o-4.5-nvidia-FlagOS开发入门:C语言基础与系统编程概念问答

MiniCPM-o-4.5-nvidia-FlagOS开发入门:C语言基础与系统编程概念问答 1. 引言:你的随身C语言导师 刚开始学C语言,是不是感觉有点懵?指针、内存、结构体这些概念,看书看半天,好像懂了,一写代码又…...

Qwen1.5-1.8B GPTQ模型轻量化部署效果:低显存占用下的性能保持

Qwen1.5-1.8B GPTQ模型轻量化部署效果:低显存占用下的性能保持 最近在折腾大模型本地部署的朋友,可能都遇到过同一个头疼的问题:模型效果不错,但显存要求太高,自己的显卡根本跑不起来。动辄几十GB的显存需求&#xff…...

像素艺术创作指南:如何用像素时装锻造坊打造杂志级时装大片

像素艺术创作指南:如何用像素时装锻造坊打造杂志级时装大片 1. 像素艺术与时尚的完美结合 在数字艺术领域,像素风格正经历一场文艺复兴。从复古游戏到现代时尚杂志,这种独特的艺术形式正在重新定义视觉表达。像素时装锻造坊将这一趋势推向新…...

项目环境的搭建,项目的初步使用和deepseek的初步认识

1.环境搭建这个项目使用的是字节旗下的trae开发环境项目开始前首先得连接远程终端,要么是虚拟机要么是云服务器从远端克隆完头文件后再到本地来编译 编译完成后要将编译好的库文件以及头文件进行安装 安装到系统的根目录 这样以后用可以找到这样用到的头文件就拷贝…...

保姆级指南:Mac上如何一键部署GLM-4.6V-Flash-WEB,实现图片智能问答

保姆级指南:Mac上如何一键部署GLM-4.6V-Flash-WEB,实现图片智能问答 1. 为什么选择GLM-4.6V-Flash-WEB? 在当今AI技术快速发展的时代,能够"看懂"图片并回答问题的多模态模型变得越来越重要。GLM-4.6V-Flash-WEB是智谱…...

EasyAnimateV5图生视频实战:多图批量处理脚本开发(Python+requests API)

EasyAnimateV5图生视频实战:多图批量处理脚本开发(Pythonrequests API) 1. 项目背景与需求场景 在日常的内容创作和视频制作中,我们经常遇到这样的需求:需要将大量的静态图片转换为动态视频。无论是电商商品展示、社…...

【网络层-ICMP互联网控制报文协议】

网络层-ICMP互联网控制报文协议一、概念二、应用三、报文类型一、概念 1.专门用来传递网络状态、报错、探测连通性的 “网络信使 / 反馈员”。 2.IP协议只管发包,不管包有没有送到、有没有丢包,ICMP就是给IP做辅助、报错、探测的。 3.ICMP告诉发送方&am…...

5*5窗口的高斯滤波模板

本文介绍了一个55高斯模板的生成过程。首先以标准差σ3创建初始模板矩阵,通过双重循环计算每个位置的高斯函数值。随后对模板进行归一化处理,确保系数总和为1。最后将归一化后的模板进行1024倍定点化处理,便于后续数字信号处理应用。该代码实…...

基于PySide6的YOLO通用检测平台:从零搭建与多场景适配

1. PySide6与YOLO的强强联合 PySide6作为Qt官方提供的Python绑定库,让开发者能够用Python快速构建跨平台的图形界面应用。而YOLO作为当前最流行的实时目标检测算法,在工业质检、安防监控、医疗影像等领域都有广泛应用。将两者结合,可以打造出…...

蛋白质组学新手必看:从基因组到蛋白质组的科研进阶指南

蛋白质组学新手必看:从基因组到蛋白质组的科研进阶指南 刚踏入生命科学领域的研究生们,常常会面临一个关键转折点——如何从熟悉的基因组学领域跨越到更具挑战性的蛋白质组学研究。记得我第一次接触蛋白质组学时,面对质谱数据和复杂的蛋白质互…...

在 Windows 上设置 JAVA_HOME 环境变量

在 Windows 上设置 JAVA_HOME 环境变量 在 Windows 操作系统上设置 JAVA_HOME 环境变量是一个常见的步骤,尤其是在开发 Java 应用程序时。通过设置 JAVA_HOME,你可以方便地管理和使用 JDK(Java Development Kit),并且…...

从理论到仿真:Simulink在无穷大电源与同步发电机三相短路分析中的实践

1. 电力系统短路分析的基础概念 第一次接触电力系统短路分析时,我也被各种专业术语搞得一头雾水。简单来说,短路分析就是研究电力系统在发生故障时的电流变化情况。想象一下家里的电路突然短路时,保险丝会"啪"的一声跳闸&#xff0…...

CLIP-GmP-ViT-L-14图文匹配测试工具开发环境:Keil5与嵌入式AI预处理

CLIP-GmP-ViT-L-14图文匹配测试工具开发环境:Keil5与嵌入式AI预处理 你有没有想过,让一个小小的单片机也能为强大的AI模型打下手?比如,一个智能摄像头需要判断画面里有没有猫,它不需要把整张高清大图都传到云端去分析…...

Nano-Banana软萌拆拆屋实操手册:Euler A采样算法调参指南

Nano-Banana软萌拆拆屋实操手册:Euler A采样算法调参指南 1. 引言:当AI遇见软萌拆解艺术 你是否曾经看着心爱的衣服,想知道它是由哪些部分组成的?或者作为一名设计师,想要清晰地展示服装的结构细节?Nano-…...

盘点2026年最好用的PHP加密工具:为什么代码卫士(php.x5.chat)成了我的首选?

【导语】 站在2026年的节点回望,PHP依然是Web开发的基石,但“源码即明文”的痛点从未消失。从传统的Zend Guard到各类混淆脚本,开发者们在安全与便利之间反复横跳。今天,我将基于实测数据和企业级应用场景,深度盘点市面…...

无线网卡选购指南:别再被商家忽悠了,这5个参数才是关键

无线网卡选购指南:别再被商家忽悠了,这5个参数才是关键本文为付费专栏内容,全文约3800字,阅读需12分钟 适合人群:台式机用户、老旧笔记本用户、游戏玩家、NAS玩家前言:为什么你需要单独买无线网卡&#xff…...

程序员必备:优质源码下载网,打通学习、实战与毕设全链路

对于程序员而言,源码是成长路上最宝贵的“养分”——它承载着成熟的编程逻辑、规范的代码风格、先进的架构设计,更是连接理论学习与实际开发的核心桥梁。无论是入门新手想要快速上手、进阶开发者想要突破技术瓶颈,还是应届毕业生想要高效完成…...

每日更新源码:解锁商业项目新可能的密钥

在数字化转型浪潮席卷全球的今天,企业对于高效、安全、可定制化的技术解决方案需求愈发迫切。无论是初创公司快速搭建电商平台,还是传统企业升级官网提升品牌形象,源码下载网站已成为开发者与创业者获取核心资源的重要渠道。本文将深入探讨一…...

Qwen-Audio歌唱语音识别效果展示

Qwen-Audio歌唱语音识别效果展示 1. 歌唱语音识别的独特挑战与突破 当我们在听一首歌时,大脑会自动分离出旋律、节奏、歌词和情感表达。但对AI模型来说,这却是个复杂得多的任务——它需要同时处理音高变化、节奏韵律、人声谐波特征,还要准确…...

SmallThinker-3B-Preview代码生成效果展示:Java八股文智能问答实例

SmallThinker-3B-Preview代码生成效果展示:Java八股文智能问答实例 最近在技术社区里,一个名为SmallThinker-3B-Preview的模型引起了我的注意。它主打代码生成和智能问答,特别是针对编程面试中那些经典的“八股文”问题。作为经常参与面试和…...

Gemma-3-12b-it真实作品集:10组高质量图片问答对话效果分享

Gemma-3-12b-it真实作品集:10组高质量图片问答对话效果分享 1. 工具概览 1.1 核心能力简介 Gemma-3-12b-it是一款基于Google大模型技术开发的多模态交互工具,能够同时处理图片和文本输入,为用户提供智能问答服务。不同于常见的纯文本对话机…...

5分钟部署MinerU 2.5-1.2B:PDF转Markdown零门槛入门教程

5分钟部署MinerU 2.5-1.2B:PDF转Markdown零门槛入门教程 1. 为什么选择MinerU处理PDF文档 在日常工作和学习中,我们经常需要处理PDF文档。无论是技术文档、学术论文还是商业报告,PDF格式因其良好的跨平台兼容性而广受欢迎。然而&#xff0c…...

Qwen3.5-9B多模态能力展示:上传交通监控截图→识别违章行为→生成处罚依据

Qwen3.5-9B多模态能力展示:上传交通监控截图→识别违章行为→生成处罚依据 1. 多模态AI在交通管理中的创新应用 想象一下这样的场景:交通执法人员每天需要查看数百张监控截图,手动识别违章行为并查找相关法规条款。这不仅耗时耗力&#xff…...

Qwen3-14B系统优化指南:解决C盘空间清理与系统性能问题

Qwen3-14B系统优化指南:解决C盘空间清理与系统性能问题 1. 引言:Windows用户的共同烦恼 "您的C盘空间不足"——这个弹窗可能是Windows用户最不愿看到的提示之一。随着使用时间增长,系统盘空间被各种临时文件、日志和冗余程序蚕食…...

多租户下的系统业务开发过程探讨贝

一、背景与问题缘起 MySQL 5.6.51 版本下 2000 万行核心业务表开展新增字段操作,需求为新增BIGINT(19) NOT NULL DEFAULT 0 COMMENT 注释(因业务实际需要存储大数值关联字段)。 表的核心特性为Java 多线程密集读写,业务请求持续高…...