1. 项目概述在企业IT运维工作中网站可用性监控是保障业务连续性的基础环节。传统的人工巡检方式效率低下而市面上的SaaS监控服务又往往存在价格昂贵、数据隐私等问题。本文将分享一套基于开源工具Prometheus的网站监控方案实现从探测到告警的全自动化流程特别适合中小型技术团队使用。这套方案的核心价值在于完全自主可控所有组件均可部署在内网环境支持同时监控数百个网站/API接口告警信息直接推送到企业微信群确保及时响应提供从部署到维护的完整工具链2. 架构设计解析2.1 技术选型理由选择Prometheus生态链主要基于以下考量Blackbox Exporter专为黑盒监控设计的探针支持HTTP/HTTPS/TCP等多种协议内置丰富的指标采集能力。相比自写爬虫脚本它具有以下优势内置重试机制和超时控制自动记录SSL证书信息提供响应时间直方图数据Alertmanager作为告警中枢支持多级告警路由区分严重/普通事件告警聚合与抑制多种通知渠道集成企业微信机器人选择企业微信而非其他IM工具的原因是国内访问稳定可靠支持Markdown格式消息可特定成员或全体人员2.2 数据流向说明整个监控流程的数据流转如下图所示[网站集群] │ ↓ (HTTP探测) [Blackbox Exporter] → 生成指标(probe_success, probe_duration等) │ ↓ (抓取) [Prometheus] → 评估告警规则 │ ↓ (推送告警) [Alertmanager] → 渲染消息模板 │ ↓ (Webhook) [企业微信机器人]3. 环境部署详解3.1 目录结构规划建议采用以下目录规范便于后期维护website-monitoring/ ├── bin/ # 二进制文件 ├── config/ # 配置文件 │ ├── alert_rules.yml │ ├── alertmanager.yml │ ├── blackbox.yml │ └── prometheus.yml ├── data/ # 数据存储 ├── logs/ # 日志文件 ├── templates/ # 消息模板 └── scripts/ # 维护脚本3.2 组件安装指南获取最新稳定版组件的推荐方法# 使用GitHub API获取最新版本号 get_latest_release() { curl -s https://api.github.com/repos/$1/releases/latest | grep tag_name: | sed -E s/.*([^]).*/\1/ } BLACKBOX_VER$(get_latest_release prometheus/blackbox_exporter) PROM_VER$(get_latest_release prometheus/prometheus) ALERT_VER$(get_latest_release prometheus/alertmanager) # 下载并解压到bin目录 wget -qO- https://github.com/prometheus/blackbox_exporter/releases/download/${BLACKBOX_VER}/blackbox_exporter-${BLACKBOX_VER:1}.linux-amd64.tar.gz | tar xz -C bin --strip-components1 --wildcards */blackbox_exporter注意生产环境建议固定版本号而非使用latest避免自动升级导致兼容性问题4. 配置深度解析4.1 Blackbox高级配置在blackbox.yml中我们可以针对不同网站类型设置差异化探测参数modules: ecommerce_healthcheck: prober: http timeout: 15s http: method: POST headers: Content-Type: application/json body: {action: healthcheck} fail_if_body_not_matches_regexp: - status:ok tls_config: insecure_skip_verify: false server_name: shop.example.com api_endpoint: prober: http http: valid_status_codes: [200, 401] # 允许未授权状态 fail_if_ssl: false # 允许HTTP协议关键参数说明fail_if_body_not_matches_regexp验证响应内容server_name指定TLS SNIfail_if_ssl强制HTTPS检查4.2 Prometheus告警规则优化精细化告警规则示例- alert: APISLAViolation expr: | ( avg_over_time(probe_duration_seconds{jobwebsite_availability}[5m]) 1.5 and rate(probe_failed_due_to_regex{jobwebsite_availability}[5m]) 0 ) or ( probe_http_status_code{jobwebsite_availability} 500 and probe_success 1 ) for: 5m labels: severity: warning annotations: impact: API响应时间超过SLA阈值或出现5xx错误这个规则实现了5分钟内平均响应时间1.5秒且无正则匹配失败或服务器返回5xx状态码但探测本身成功5. 企业微信集成实战5.1 机器人创建步骤在企业微信PC端右键点击目标群 → 选择「添加群机器人」设置机器人名称如「网站监控助手」记录生成的Webhook URL建议创建两个机器人常规告警用于性能劣化等普通事件关键告警配置all通知仅用于完全不可用场景5.2 消息模板进阶技巧改进后的消息模板wechat.tmpl{{ define wechat.message }} {{ range .Alerts }} {{ if eq .Status firing }} [{{ .Labels.severity | upper }}] {{ .Annotations.summary }} {{ .StartsAt.Format 15:04:05 }} 触发 {{ if eq .Labels.severity critical }}all{{ end }} {{ if .Annotations.description }} {{ .Annotations.description }}{{ end }} {{ if .Annotations.runbook }} 应急手册: {{ .Annotations.runbook }}{{ end }} ━━━━━━━━━━━━ {{ else }} ✅ [恢复] {{ .Annotations.summary }} ⏱ 故障时长: {{ humanizeDuration .Duration }} {{ .EndsAt.Format 15:04:05 }} 恢复 ━━━━━━━━━━━━ {{ end }} {{ end }} {{ end }}特色功能根据严重程度自动相关人员支持关联应急手册链接精简显示格式提高移动端可读性6. 运维管理脚本集6.1 网站批量管理工具扩展add-website.sh支持CSV文件批量导入#!/bin/bash # 单网站添加模式 if [ $# -eq 1 ]; then URL$1 # ...原有逻辑... elif [ -f $1 ]; then # CSV批量导入模式 CSV_FILE$1 TOTAL0 SUCCESS0 while IFS, read -r url module; do if grep -q $url $CONFIG; then echo 跳过已存在: $url continue fi # 在对应job下添加target sed -i /job_name: $module/,/- targets:/s/- targets:.*/\n - $url/ $CONFIG ((SUCCESS)) ((TOTAL)) done (tail -n 2 $CSV_FILE) # 跳过CSV头行 echo 批量导入完成: $SUCCESS/$TOTAL curl -X POST http://localhost:9090/-/reload fiCSV格式示例url,module https://api1.example.com,website_availability https://shop.example.com,ecommerce_healthcheck7. 性能调优指南7.1 大规模部署建议当监控目标超过100个时建议分片部署Blackbox# prometheus.yml - job_name: blackbox_asia static_configs: - targets: [blackbox-asia:9115] - job_name: blackbox_eu static_configs: - targets: [blackbox-eu:9115]调整Prometheus参数# 启动参数 --storage.tsdb.retention.time7d \ --query.max-concurrency20 \ --web.max-connections50优化抓取配置scrape_configs: - job_name: high_freq scrape_interval: 15s scrape_timeout: 10s static_configs: [...] - job_name: low_freq scrape_interval: 60s static_configs: [...]8. 故障排查手册8.1 常见问题诊断表现象检查步骤解决方案所有网站显示不可达1. 检查Blackbox日志2. 测试curl localhost:9115/metrics3. 验证网络连通性1. 重启Blackbox2. 检查防火墙规则3. 验证DNS配置告警重复发送1. 检查Alertmanager日志2. 验证group_interval设置3. 查看告警历史1. 调整repeat_interval2. 配置抑制规则企业微信消息格式错乱1. 检查模板语法2. 测试简单消息3. 验证Markdown格式1. 转义特殊字符2. 简化模板内容8.2 日志分析技巧通过PromQL快速定位问题# 查找响应最慢的10个网站 topk(10, avg_over_time(probe_duration_seconds[1h]) ) # 统计各状态码出现次数 count by (probe_http_status_code) ( probe_http_status_code{jobwebsite_availability} ) # 检测证书过期情况 (probe_ssl_earliest_cert_expiry - time()) / 86400 309. 方案扩展方向9.1 与Grafana集成推荐仪表盘配置全局状态看板各区域可用率地图响应时间热力图最近告警事件流单站详情页可用性趋势图状态码分布饼图证书有效期倒计时9.2 多维度监控增强前端性能指标modules: web_perf: prober: http http: preferred_ip_protocol: ip4 fail_if_body_not_matches_regexp: - window.performance.timing.loadEventEndAPI功能测试modules: payment_api: prober: http http: method: POST headers: Authorization: Bearer ${API_KEY} body: {amount: 1, currency: CNY} valid_status_codes: [200] fail_if_not_matches_regexp: - status:success这套监控方案经过多个生产环境验证在日均百万级探测请求下仍能稳定运行。关键在于根据实际业务需求灵活调整配置并建立完善的告警分级机制。对于需要更高可用性的场景可以考虑部署Prometheus高可用集群和Alertmanager集群模式。
企业数字化 ERP 产品动态
相关推荐
电商履约系统架构设计与高并发优化实践 1. 项目概述 在电商行业摸爬滚打多年,我深刻体会到履约系统才是真正考验技术团队功力的战场。商品从下单到交付用户手中,看似简单的流程背后隐藏着数十个关键环节和上百个技术决策点。今天我就以一线开发者的视角,带大家完整拆解这个"黑… · 2026/11/6 7:58:33
E3-1231 v3+B85黑苹果EFI配置与排错指南 简介:这份EFI引导包面向使用Intel E3 1231V3处理器与B85 D3H主板的黑苹果用户,提供一套围绕该硬件组合整理的引导配置,重点覆盖声卡、显卡及常见外设的兼容性适配,适合具备一定黑苹果安装基础、希望减少反复调试的玩家参考。压缩包… · 2026/11/6 7:57:33
栈与队列实战:逆波兰表达式与滑动窗口最大值 1. 栈与队列实战:从逆波兰表达式到滑动窗口最大值 作为一名算法工程师,我经常需要处理各种数据结构相关的问题。今天想和大家分享三个经典的栈与队列应用场景:逆波兰表达式求值、滑动窗口最大值和前K个高频元素。这些题目看似简单,… · 2026/11/6 7:57:33
带Classification的LAS跑通PointNet++点云语义分割 简介:面向需要将 PointNet 或 PointNet 落地到自有 LAS 点云的研究者与工程人员,这份资料聚焦带 Classification 属性的 LAS 点云如何组织训练与预测,基于 yanx27 的 PyTorch 实现整理,可在两种网络结构间按需选择,适合… · 2026/11/6 9:03:24
内网产线快速交付:FileZilla Server绿色版FTP配置与排障 简介:这份 FileZilla Server 0.9.39 汉化绿色版面向需要在 Windows 环境中快速搭建 FTP 服务的个人用户、小型团队与运维初学者,解压后即可运行,适合文件共享、内网传输、课程实验和轻量级服务端测试。压缩包共 11 个文件,约 1.4M… · 2026/11/6 9:03:24
ZXCA自签证书实战:根CA、SAN与内网HTTPS信任链配置 简介:ZXCA自信数字证书制作工具是一套面向个人用户与小微型组织的数字证书制作与管理软件包,围绕证书申请、签发、撤销、导入导出及文件加密、代码签名等场景,帮助读者在本地模拟CA流程,降低对外部证书服务的依赖。压缩包共8个文件… · 2026/11/6 9:03:24
CNN人脸识别四段流水线:检测对齐、Embedding与阈值标定实战 简介:面向具备深度学习基础、希望用卷积神经网络完成人脸识别实战的开发者与学习者,这份代码包围绕Olivetti人脸数据集给出从模型训练到识别调用的完整实现,可用于课程实验、算法复现和入门项目练习。压缩包共4个文件,以2个Python… · 2026/11/6 9:03:24
单机模拟横向联邦学习:FedAvg工程实践与调参指南 简介:面向希望理解横向联邦学习完整流程的Python开发者与机器学习初学者,这份项目资料以本地模拟方式复现多客户端独立训练、中央服务器聚合并广播全局模型的协作过程,适合用作课程实验、毕业设计原型或分布式机器学习入门练习。压缩包共25个… · 2026/11/6 9:03:24
OpenCV几何+包络双路细胞计数方法 简介:本资源是一个基于OpenCV与Qt开发的细胞图像自动计数系统实现,面向计算机视觉初学者、生物医学图像处理学习者及嵌入式/桌面端图像分析工具开发者。项目聚焦连通域分析核心流程,完整覆盖二值化、形态学去噪、轮廓提取与连通组件标记等关键… · 2026/11/6 9:02:23
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:07
三菱PLC数据采集到数据库的时序设计:Python+MC协议实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11
ASIC主模式RTL设计:状态机与三态驱动的流片级实现 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11
STM32嵌入式C++开发:GDB调试与Renode仿真实战指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:07