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

从‘它怎么又挂了’到‘服务稳如狗’:我是如何用Prometheus+Grafana给自家小项目做监控的

从零搭建轻量级服务监控PrometheusGrafana实战指南凌晨三点手机突然响起刺耳的警报声——这已经是本周第三次被线上服务宕机惊醒。作为独立开发者或小团队我们往往身兼数职既要写代码又要维护基础设施。服务崩溃时才发现问题这种被动救火的状态必须终结。本文将分享如何用开源工具链构建成本极低但效果专业的监控系统让你从事后灭火转变为事前预防。1. 为什么小项目更需要专业监控很多人认为监控是企业级应用的专利这种认知正在让我们付出代价。根据2023年开发者调查报告75%的服务中断最早是由终端用户而非运维团队发现的。对于资源有限的小型项目每次故障都意味着直接收入损失电商、API服务等用户信任度下降深夜紧急修复的身心消耗传统解决方案存在明显缺陷云平台自带监控功能简单但收费昂贵如AWS CloudWatch第三方SaaS服务每月至少$20起自己写脚本监控又难以维护。而PrometheusGrafana组合提供了零持续成本除服务器基础费用15分钟即可部署完成的简易性企业级监控能力下放真实案例某个人博客使用这套方案后提前发现了内存泄漏问题避免了数据库崩溃导致的48小时数据丢失2. 环境准备与核心组件安装2.1 服务器基础配置推荐使用最低配的云服务器1核1GB内存足够以下测试基于Ubuntu 22.04 LTS。首先确保系统更新sudo apt update sudo apt upgrade -y安装必要工具包sudo apt install -y wget curl gnupg2 software-properties-common2.2 Prometheus安装与配置Prometheus将作为监控数据的存储和处理核心。使用官方提供的预编译版本wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz tar xvf prometheus-*.tar.gz cd prometheus-*/创建专用系统用户并设置权限sudo useradd --no-create-home --shell /bin/false prometheus sudo mkdir /etc/prometheus /var/lib/prometheus sudo chown prometheus:prometheus /etc/prometheus /var/lib/prometheus配置基础监控目标监控自身状态编辑/etc/prometheus/prometheus.ymlglobal: scrape_interval: 15s scrape_configs: - job_name: prometheus static_configs: - targets: [localhost:9090]启动服务并设置开机自启sudo systemctl enable --now prometheus2.3 Node Exporter部署Node Exporter用于采集主机指标安装方式类似wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz tar xvf node_exporter-*.tar.gz sudo mv node_exporter-*/node_exporter /usr/local/bin/创建systemd服务单元# /etc/systemd/system/node_exporter.service [Unit] DescriptionNode Exporter [Service] Userprometheus ExecStart/usr/local/bin/node_exporter [Install] WantedBymulti-user.target启动并验证sudo systemctl enable --now node_exporter curl http://localhost:9100/metrics3. Grafana可视化配置3.1 安装与基础设置Grafana提供强大的数据可视化能力安装最新OSS版本sudo apt-get install -y apt-transport-https sudo apt-get install -y software-properties-common wget wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - echo deb https://packages.grafana.com/oss/deb stable main | sudo tee -a /etc/apt/sources.list.d/grafana.list sudo apt-get update sudo apt-get install grafana启动服务sudo systemctl enable --now grafana-server访问http://服务器IP:3000默认账号admin/admin。3.2 数据源连接左侧菜单选择Configuration Data Sources添加Prometheus数据源URL填写http://localhost:9090保存并测试连接3.3 导入实用仪表盘Grafana社区提供了大量现成仪表盘模板访问Grafana官方仪表盘库搜索Node Exporter Full复制ID如1860在Grafana界面选择Create Import粘贴ID并加载几分钟后你将获得包含这些关键指标的专业仪表盘CPU使用率用户/系统/IO等待内存消耗已用/缓存/交换分区磁盘I/O和空间使用情况网络流量统计系统负载趋势4. 告警策略设计与实战4.1 Prometheus告警规则配置创建告警规则文件/etc/prometheus/alert.rules.ymlgroups: - name: host_stats rules: - alert: HighCPUUsage expr: 100 - (avg by(instance)(irate(node_cpu_seconds_total{modeidle}[5m])) * 100) 80 for: 5m labels: severity: warning annotations: summary: 高CPU使用率 (instance {{ $labels.instance }}) description: CPU使用率超过80%已达5分钟\n当前值: {{ $value }}% - alert: MemoryRunningOut expr: (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 20 for: 10m labels: severity: critical annotations: summary: 内存不足 (instance {{ $labels.instance }}) description: 可用内存低于20%已达10分钟\n当前值: {{ $value }}%在prometheus.yml中引用规则文件rule_files: - /etc/prometheus/alert.rules.yml重启Prometheus服务使配置生效。4.2 告警通知渠道配置邮件通知示例安装并配置Alertmanagerwget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz tar xvf alertmanager-*.tar.gz sudo mv alertmanager-*/alertmanager /usr/local/bin/配置/etc/alertmanager/alertmanager.ymlroute: receiver: email-notifications receivers: - name: email-notifications email_configs: - to: your_emailexample.com from: alertmanageryourdomain.com smarthost: smtp.yourprovider.com:587 auth_username: smtp_user auth_password: smtp_password send_resolved: true更实时的Telegram通知通过BotFather创建Telegram机器人获取chat_id可向getidsbot发送消息获取配置Alertmanager- name: telegram-notifications telegram_configs: - api_url: https://api.telegram.org bot_token: your_bot_token chat_id: your_chat_id send_resolved: true4.3 智能告警的最佳实践避免告警疲劳是关键策略分级告警Warning级别提前预警如磁盘使用率70%Critical级别立即处理如服务不可达时段敏感# 工作时间段才触发非紧急告警 routes: - match: severity: warning receiver: email-notifications active_time_intervals: - workhours动态阈值# 根据历史基线自动调整阈值 expr: | node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 ( avg_over_time( (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100)[7d] ) * 0.7 )5. 高级技巧与优化方案5.1 资源占用优化在低配服务器上可通过这些调整减少负载Prometheus调优# 减少存储压力 storage: tsdb: retention: 7d # 默认15天 wal_compression: true采集频率调整global: scrape_interval: 60s # 默认15s evaluation_interval: 60s5.2 应用级监控集成监控自定义应用指标以Python Flask为例from prometheus_client import start_http_server, Counter REQUEST_COUNT Counter( app_request_count, Application Request Count, [method, endpoint, http_status] ) app.route(/api) def handle_api(): REQUEST_COUNT.labels( methodGET, endpoint/api, http_status200 ).inc() return jsonify({status: ok}) if __name__ __main__: start_http_server(8000) # 暴露/metrics端点 app.run()5.3 长期数据存储方案当需要历史数据分析时可添加低成本长期存储安装TimescaleDB插件wget https://github.com/timescale/prometheus-postgresql-adapter/releases/download/v0.11.0/prometheus-postgresql-adapter-linux-amd64配置远程写入remote_write: - url: http://localhost:9201/write这套系统在我维护的七个小型项目中稳定运行超过两年最老的服务器已经连续工作600多天无意外宕机。关键收获是设置合理的告警阈值比监控本身更重要——最初我因为阈值设得太敏感经常被误报警打扰调整后现在每月平均只收到2-3次真正需要立即处理的告警。

相关文章:

从‘它怎么又挂了’到‘服务稳如狗’:我是如何用Prometheus+Grafana给自家小项目做监控的

从零搭建轻量级服务监控:PrometheusGrafana实战指南 凌晨三点,手机突然响起刺耳的警报声——这已经是本周第三次被线上服务宕机惊醒。作为独立开发者或小团队,我们往往身兼数职,既要写代码又要维护基础设施。服务崩溃时才发现问题…...

嵌入式哈希表实现:无malloc线性探测Hash Map

1. 项目概述 hashmap.c 是一个面向嵌入式系统深度优化的纯 C 语言哈希映射(Hash Map)实现,不依赖标准库(如 stdlib.h 、 string.h ),完全可移植于裸机环境、RTOS(FreeRTOS、Zephyr、RT-Thr…...

BY8X01-16P Arduino音频模块驱动库深度解析

1. 项目概述BY8X01-16P-Arduino 是一款专为 Arduino 生态设计的轻量级、高兼容性音频模块控制库,面向 BY8001-16P 与 BY8301-16P(文档中偶见笔误为 BY83001-16P)双芯片平台。该库并非简单封装串口指令,而是以嵌入式系统工程视角重…...

设计师必看:Photoshop混合模式实战指南,5分钟搞定光影合成与氛围感调色

Photoshop混合模式实战指南:5分钟掌握光影合成与氛围调色 当你在深夜赶稿时,突然发现人物照片缺乏立体感,或是产品静物图需要增强戏剧性光影——这就是混合模式大显身手的时刻。不同于繁琐的曲线调整和复杂的蒙版操作,混合模式就像…...

做了5年GEO优化,我敢说90%的企业都没看懂GEO的真实成本

很多人来问我 GEO 是什么意思,大多是听别人说这是 AI 时代的获客新路子,能比传统推广省好几倍的钱,还能让 AI 优先推荐自己家。但我每次都先不说那些好听的好处,先给大家算清楚,做 GEO 这件事里,那些 90% 的…...

如何快速搭建专业级游戏串流系统:Sunshine完整教程

如何快速搭建专业级游戏串流系统:Sunshine完整教程 【免费下载链接】Sunshine Sunshine: Sunshine是一个自托管的游戏流媒体服务器,支持通过Moonlight在各种设备上进行低延迟的游戏串流。 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine …...

G-Helper高效解决ROG游戏本散热与性能平衡难题

G-Helper高效解决ROG游戏本散热与性能平衡难题 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: https://gitcode…...

Python并发革命进行时:GIL移除后你必须掌握的5种内存序模型(x86/ARM/RISC-V实测对比)

第一章:Python无锁GIL环境下的并发模型架构总览传统CPython解释器受全局解释器锁(GIL)制约,无法真正实现多线程CPU并行。而“无锁GIL环境”并非指移除GIL本身,而是指在GIL被主动释放、绕过或由替代运行时(如…...

亚马逊爆款选品:数据采集与三方服务商对接

一、核心选品数据采集渠道1. 官方免费数据源(合规权威)BSR畅销榜:查看类目热销品,定位头部爆款。新品榜:挖掘增速快、潜力大的新品。商机探测器:卖家后台直达,获取高搜索量、低竞争蓝海词。品牌…...

Monocle 3实战:5步搞定单细胞marker基因筛选与可视化(R语言版)

Monocle 3实战:5步搞定单细胞marker基因筛选与可视化(R语言版) 单细胞RNA测序技术正在重塑我们对复杂生物系统的理解。在这个数据爆炸的时代,如何从海量的单细胞数据中快速准确地识别关键marker基因,成为每个研究者必须…...

如何在Photoshop中快速掌握AVIF格式:新手完整操作终极指南

如何在Photoshop中快速掌握AVIF格式:新手完整操作终极指南 【免费下载链接】avif-format An AV1 Image (AVIF) file format plug-in for Adobe Photoshop 项目地址: https://gitcode.com/gh_mirrors/avi/avif-format 还在为网站图片加载速度慢而烦恼吗&#…...

别再只会用A4988了!用STM32+L298N手撸42步进电机细分驱动(附256细分算法)

从零构建STM32L298N的256细分步进电机驱动系统 在创客和嵌入式开发领域,步进电机控制一直是个既基础又充满挑战的课题。市面上常见的A4988、DRV8825等驱动模块虽然方便,但当项目需要更高精度、更灵活控制时,这些现成方案往往显得力不从心。本…...

告别云端推理:手把手教你用Vivado HLS在AX7350开发板上部署YOLOv3(附完整工程)

从零部署YOLOv3到AX7350开发板:FPGA加速实战全流程解析 在边缘计算领域,FPGA因其低延迟、高能效和可重构特性,成为深度学习模型部署的热门选择。本文将带您完成YOLOv3目标检测模型在AX7350开发板上的完整部署流程,从环境准备到最终…...

保姆级避坑指南:Ubuntu系统下Hadoop HA集群搭建,我踩过的那些SSH和配置文件的“坑”

Ubuntu下Hadoop HA集群搭建:那些教科书不会告诉你的实战陷阱 第一次在Ubuntu上搭建Hadoop HA集群时,我天真地以为照着官方文档就能顺利跑起来。直到SSH连接莫名其妙失败、JournalNode权限报错刷屏、ZKFC死活不启动时,才明白为什么有人说大数据…...

Undecimus革新性全流程越狱技术指南:从核心价值到实用工具

Undecimus革新性全流程越狱技术指南:从核心价值到实用工具 【免费下载链接】Undecimus unc0ver jailbreak for iOS 11.0 - 12.4 项目地址: https://gitcode.com/gh_mirrors/un/Undecimus 一、核心价值:破解iOS生态三大痛点 Undecimus作为针对iOS…...

Antares ESP MQTT库:ESP32/ESP8266接入Antares物联网平台指南

1. 项目概述Antares ESP MQTT 是一款专为 ESP32 和 ESP8266 平台设计的轻量级 Arduino 库,旨在大幅降低接入 Telkom Indonesia 运营的 Antares IoT 平台的开发门槛。其核心价值不在于实现 MQTT 协议栈(该职责由 PubSubClient 承担)&#xff0…...

制造业生产管理应用搭建指南:轻流无代码平台完整实施流程——生产效率提升 300% 方法论

制造业生产管理应用搭建指南:轻流无代码平台完整实施流程——生产效率提升 300% 方法论制造业生产管理应用搭建指南:轻流无代码平台完整实施流程——生产效率提升 300% 方法论引言:背景与重要性工信部《智能制造发展规划》明确提出&#xff0…...

Python异步I/O终极调优手册(含strace+py-spy+asyncio debug mode三重追踪链路图)

第一章:Python异步I/O性能瓶颈的本质洞察Python的async/await语法虽大幅简化了异步编程模型,但其底层性能瓶颈并非源于语法糖本身,而根植于事件循环调度机制、GIL对CPU密集型任务的制约,以及I/O等待与协程切换之间的隐式开销。事件…...

给汽车ECU做“体检报告”:手把手解读Basetech OCC计数器里的5个关键指标

给汽车ECU做“体检报告”:手把手解读Basetech OCC计数器里的5个关键指标 当一辆车亮起故障灯开进维修车间,维修技师的第一反应往往是连接诊断仪读取数据。但面对屏幕上密密麻麻的OCC计数器数值,很多新手会感到无从下手——这些数字到底在说什…...

别再花钱买云API了!手把手教你用Docker+Ollama在本地免费跑通Strix渗透测试

零成本打造企业级渗透测试环境:DockerOllama本地化实战指南 当安全团队每月收到云服务商五位数的API账单时,当关键测试任务因网络抖动被迫中断时,越来越多的技术决策者开始重新审视渗透测试的基础架构。本文将揭示如何用消费级硬件构建媲美商…...

python-flask-djangol框架的青少年编程学习平台

目录技术选型与架构设计功能模块划分开发阶段规划安全与扩展性示例代码片段(Flask路由)部署与运维教育适配项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术选型与架构设计 采用Python生态的Flask或D…...

Lattice FPGA开发实战:Diamond与ModelSim协同仿真环境搭建全攻略

1. 环境准备:软件安装与基础配置 第一次接触Lattice FPGA开发时,最头疼的就是仿真环境的搭建。我清楚地记得去年接手MachXO2项目时,光是让Diamond和ModelSim这两个"老伙计"协同工作就折腾了整整两天。不过别担心,跟着我…...

OpenRocket:模型火箭仿真的全流程技术解决方案

OpenRocket:模型火箭仿真的全流程技术解决方案 【免费下载链接】openrocket Model-rocketry aerodynamics and trajectory simulation software 项目地址: https://gitcode.com/GitHub_Trending/op/openrocket OpenRocket作为一款开源的模型火箭仿真软件&…...

轻量级AI写作工坊:OpenClaw+nanobot内容创作流

轻量级AI写作工坊:OpenClawnanobot内容创作流 1. 为什么需要自动化写作助手 作为一名技术博主兼自媒体运营者,我每天都要面对内容创作的"三重压力":选题焦虑、写作耗时、发布繁琐。最痛苦的是,当我花两小时写完一篇技…...

ES920 Arduino库深度解析:Sub-1GHz工业无线通信实战指南

1. ES920无线模块Arduino库深度解析:面向工业级Sub-1GHz通信的工程实践指南ES920系列是日本Echostar公司推出的高性能Sub-1GHz无线通信模块,涵盖FSK调制的ES920与LoRa调制的ES920LR两个子型号。该系列模块专为日本920MHz ISM频段(920.6–928.…...

R语言新手必看:clusterProfiler功能富集分析从安装到实战(附常见报错解决方案)

R语言实战:clusterProfiler功能富集分析全流程指南 第一次接触功能富集分析时,我被那些密密麻麻的基因列表和复杂的生物学术语搞得晕头转向。直到发现了clusterProfiler这个神器,它就像生物信息学分析中的瑞士军刀,把复杂的富集过…...

告别传统架构!源网荷储四侧时序数据库选型与落地全解析

新型电力系统应该用什么数据库?源网荷储四侧的时序数据库选型与落地实战 “双碳” 目标的推进正在深刻重构电力系统的运行逻辑。新能源装机占比持续攀升,储能、虚拟电厂、需求响应等新业态快速涌现,源、网、荷、储各侧的角色与互动方式正在被…...

SignalAcquisition:嵌入式高精度信号采集与二进制串行传输框架

1. SignalAcquisition 库深度解析:面向嵌入式信号采集的高精度时序控制与二进制串行传输框架1.1 库定位与工程价值SignalAcquisition 是一个专为 Arduino IDE 设计的轻量级、高确定性信号采集库,其核心目标并非提供通用传感器驱动,而是构建一…...

深度解析 ConcurrentHashMap 1.8:put 与 get 核心流程全解

在 Java 并发编程中,ConcurrentHashMap 是线程安全的高频使用集合,相比线程不安全的 HashMap、效率低下的 HashTable(全锁),JDK 1.8 版本的 ConcurrentHashMap 做了底层结构重构和锁机制优化,成为高并发场景…...

时间切片:24小时

基于双层优化的电动汽车优化调度研究 代码主要做的是一个双层的电动汽车充放电行为优化问题,具体来讲,输电网上层优化将电动汽车与发电机、基本负荷协调,同时考虑风力发电,从而在时域内优化电动汽车的负荷周期。 然后,…...