惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
W
WeLiveSecurity
T
Troy Hunt's Blog
Project Zero
Project Zero
Security Archives - TechRepublic
Security Archives - TechRepublic
Attack and Defense Labs
Attack and Defense Labs
Google DeepMind News
Google DeepMind News
T
Threat Research - Cisco Blogs
T
Tenable Blog
Jina AI
Jina AI
Recorded Future
Recorded Future
T
The Exploit Database - CXSecurity.com
N
News | PayPal Newsroom
P
Palo Alto Networks Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
G
GRAHAM CLULEY
A
Arctic Wolf
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Register - Security
The Register - Security
Last Week in AI
Last Week in AI
P
Privacy & Cybersecurity Law Blog
Microsoft Azure Blog
Microsoft Azure Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
SecWiki News
SecWiki News
S
Schneier on Security
有赞技术团队
有赞技术团队
IT之家
IT之家
美团技术团队
Cisco Talos Blog
Cisco Talos Blog
NISL@THU
NISL@THU
P
Proofpoint News Feed
C
CERT Recently Published Vulnerability Notes
Hacker News: Ask HN
Hacker News: Ask HN
罗磊的独立博客
博客园_首页
Cyberwarzone
Cyberwarzone
Forbes - Security
Forbes - Security
H
Hacker News: Front Page
爱范儿
爱范儿
云风的 BLOG
云风的 BLOG
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Webroot Blog
Webroot Blog
Latest news
Latest news
D
DataBreaches.Net
Know Your Adversary
Know Your Adversary
P
Privacy International News Feed
宝玉的分享
宝玉的分享
Simon Willison's Weblog
Simon Willison's Weblog
N
News and Events Feed by Topic

洛屿的小站

STM32 UCOS3+HAL库集成中的FPU HardFault问题 一种简单的卡尔曼滤波器设计 Cadence - 应律而动,落指成音 Zephyr - 聆风之息,为你而奏 不改一行插件代码,实现消息优先级与阻断 洛玖定时任务系统 在 butterfly 主题中添加首页点集动画(基于p2line项目) 你好,2026 stm32f4xx-ads1256驱动 stm32f4xx-ad9854并行驱动 右键菜单加入用Trae打开文件和文件夹 三角洲行动ID映射表 洛玖SDK说明 为网页文章开头添加原文连接 Hexo-Butterfly主题在主页添加GitHub贡献日历 Proteus中555定时器仿真问题 装饰器 洛玖开发日记 STS3032舵机获取力矩输出 kotlin网页前后端那些事 mspm0g3507-ad9850 奇怪的bug Paddle模型转PaddleLite 人工智能考核 构建一个yolov3网络 yolo和paddle模型常见输出参数 PaddleDetection 随便写的一些东西 实验室C语言第一次考核题目讲解及相关代码解读 C语言神经网络房价预测系统 C、C++数组,指针,指针数组,数组指针的区别 C、C++的大括号是必须的部分吗? C、C++预处理详解 C、C++其他关键字详解 C、C++存储类型关键字详解 C、C++控制语句关键字详解 C、C++数据类型关键字详解 C、C++关键字 C++药品管理系统 Bi-LSTM(Attention)的PyTorch实现 C语言实现波士顿房价预测 easy库的使用 edgeboardFZ3A相关问题 Predict.py的编写 Paddle环境搭建 百度Paddle模型训练 GMD09601-0.96OLED显示屏 【LeetCode 1617】统计子树中城市之间最大距离 C语言学习相关 STM32阵列按键 CH32(F10X F20X) 最短路 拓扑排序
主动式网站状态监测实现及其应用
洛屿 · 2025-05-22 · via 洛屿的小站

近期有为博客添加网站状态监测页面的想法,可以监测友链的存活状态等

但是根据搜到的,可以使用UptimeRobot进行监测。但是其中的一些操作,比如调整监测页面链接需要进行包月付费

本着能省则省的原则,便想着不如着手实现一下主动监测。

这篇文章算是一个小项目总结与功能说明吧。

项目大概框架如下

定时任务 → API → MongoDB

部署的API服务通过 Vercel Cron 定时任务,主动从 GitHub Issues 获取友链数据并进行存活请求监测,并将状态数据存入MongoDB数据库中

博客页面 → API → 展示数据

博客监测页面,向部署的api获取网站历史存活数据,并进行展示

以上,你需要完成

  • fork我的仓库
  • 向vercel部署
  • 构建MongoDB数据库并进行Connect
  • 配置环境变量(用于控制自动检测任务)
  • 向博客添加监测页面

api部署-向vercel部署

这里偷懒,使用了以往的fork和部署样例图片,请注意名称要为你fork的仓库名称

即:blog-link-monitoring

先将 luoy-oss/blog-link-monitoring: 主动式网站链接状态监测 Fork 到自己的Github

fork

登录 Vercel 后,点击Add New.. => Project

vercel

选择导入的项目,当然如果仓库不是很多的话可以直接看到最近创建的仓库,点击 import导入

choose

然后点击Deploy 进行部署

deploy

直接点击 Add Domain

domain

添加你想要的域名,例如此处我要添加的域名为 blog-links-monitoring.drluo.top

add-domain

添加后出现提示,要求添加一条CNAME记录,指向cname.vercel-dns.com

cname1

按照提示添加一条CNAME记录:

cname3

为了提升访问速度也可以使用加速节点 vercel.cdn.yt-blog.top 或者 vercel.cdn.cyfan.top

cname3

关于加速节点的介绍可参考文章 推一下 Vercel 加速节点

添加解析记录后页面会自动刷新,等待片刻校验即可通过

verify

检验通过后可直接点击域名进行预览,出现以下内容代表你已经完成了api的部署:

blog-link-monitoring.drluo.top1

构建MongoDB数据库并进行Connect

新建你的数据库项目,默认不需要进行调整,项目拥有者就是你自己

项目创建完成后,创建新的集群用于存储数据表

选择Free的集群就够我们用啦,其中集群的名称可以按你想要的来,集群服务器建议选用aws,服务器位置根据你的api部署位置酌情选择

我这里使用vercel部署,但是挂了国内cdn转发,所以选用的HongKong

集群创建完成后,会提醒你创建用户用于连接集群,你可以选择在这里直接进行创建(输入用户名和密码后点击Create Database User),或者直接点击Close,按照下方教程创建

点击左侧的Database Access,点击右上方绿色按钮ADD NEW DATABASE USER,输入相应的用户名和密码,并赋予用户Atlas admin权限后,点击Add User完成创建

请牢记用户名密码,不然忘掉了还要回来再改,会麻烦的

由于vercel部署的api服务器地址会变化。点击左侧Network Access,点击右上方绿色按钮ADD IP ADDRESS,输入0.0.0.0/0允许所有ip连接。

如果你是自己服务器进行的部署,有固定ip的前提下,可以键入你自己的ip。

完成相应的数据库用户和ip开放操作后,可以进行集群连接操作。

点击左侧的Clusters,连接Connect刚才创建的集群

调整Driver为Node.js,并复制下方的code

完成上方操作后。你应该有了类似如下格式的code:

1
mongodb+srv://<db_username>:<db_password>@link-monitoring.b86hqbc.mongodb.net/?retryWrites=true&w=majority&appName=link-monitoring

现在,你需要将其中的**<db_username>替换为刚才创建的用户名,我这里是new-user**

将其中的**<db_password>替换为刚才创建的用户名对应的密码,这里是userpasswd**

code中的格式为xxx.mongodb.net/?xxxx

此时默认为test数据表,如果你想指定数据表(不存在会自动创建)请参考下方样例:

1
2
3
xxx.mongodb.net/表名称?xxxx
比如指定表名称为monitoring(不存在会自动创建)
xxx.mongodb.net/monitoring?xxxx

最后的code为:

1
mongodb+srv://new-user:userpasswd@link-monitoring.b86hqbc.mongodb.net/monitoring?retryWrites=true&w=majority&appName=link-monitoring

此时你可以向vercel或你的服务器中配置相应的环境变量(注意是大写字母i,不是小写的L)MONGODB_URI

以上,你已经完成了相应的数据库创建及连接操作。

配置环境变量与自动检测

现在的版本已经内置了自动检测功能,无需额外的服务器或 Bot。

你需要前往 Vercel 项目的 Settings -> Environment Variables,添加以下环境变量来启用自动检测:

变量名 推荐值/说明 是否必须
GITHUB_REPO 您的GitHub用户名/仓库名 (例如 luoy-oss/friend_link) 必须
GITHUB_ISSUE_LABEL active (或者您使用的其他标签) 可选 (默认 active)
GITHUB_TOKEN (您的 GitHub Personal Access Token) 仅需要issue获取权限(只读) 推荐
MONITOR_TIMEOUT 30000 可选
MONITOR_MAX_CHECK_LIMIT 50 (防止 Vercel 函数超时) 可选

配置完成后,Vercel 会自动注册 Cron Job,每天定时从您的 GitHub Issues 获取友链并检测状态。

你也可以手动访问 https://您的域名/api/cron-check 来触发一次检测。

历史数据与状态展示

部署后监测的友链会自动保存每个链接的最新状态并进行多维度数据汇总:

  1. 实时状态:保存每个链接的最新一次检测结果,用于监测页面首屏快速展示。
  2. 最近30天趋势:自动维护最近30天的每日统计数据(可用率、平均响应时间),用于展示每个站点的每日状态条纹,直观反映近期稳定性。
  3. 历史流水记录:保存每次检测的详细记录(时间、状态码、响应时间),用于追溯具体故障。
  4. 月度统计汇总:自动计算每个月的整体可用率和平均响应时间,用于长期数据分析。

在监测页面,您可以直观地看到站点最近30天的在线情况。点击每个站点卡片右上角的 历史图标,还可以查看该站点的详细历史流水与月度汇总报表,支持无限滚动加载更多数据。


向博客添加监测页面

本页面基于butterfly主题生成,其余主题直接使用可能或出现未经验证的问题。

1
git clone https://github.com/luoy-oss/butterfly-link-monitoring.git

将获取到的文件一并复制到butterfly主题下:

/theme/butterfly/

文件存在路径为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
butterfly

├─layout
└─monitoring.pug

└─includes
└─monitoring-layout.pug

└─source
├─css
└─monitoring.css

└─js
└─monitoring.js

在主题配置文件中添加monitoring页面:

友链监测: /monitoring || fas fa-link

1
2
3
4
5
menu:
首页: / || fas fa-home
友链: /links/ || fas fa-link
音乐: /music/ || fas fa-music
友链监测: /monitoring || fas fa-link

hexo三连

1
hexo cl & hexo g & hexo d

访问你的博客监测页面

例如我的博客主页url为:https://www.drluo.top

相应的监测页面为:https://www.drluo.top/monitoring


以上,你完成了主动式网站状态监测的部署。

最后

有什么不懂的,欢迎加群询问哦!

洛の小窝