如何设置真正有效的网站监控:开发者指南
Source: Dev.to
(未提供需要翻译的正文内容。)
您的网站已宕机。
您还不知道,但您的用户已经注意到了,他们正在离开。甚至有人在推特上吐槽。
您的 SSL 证书已在三天前过期,Chrome 正向所有访问者显示那令人不安的 “不安全” 警告。
您的域名已过期,而您忘记了续费?
这些情形每天都在上千次上演。令人沮丧的是——这一切本可以完全避免。
大多数监控设置为何失败
问题 1:单地点监控
您的服务器位于弗吉尼亚州。您的监控也从弗吉尼亚州进行 ping。所有看起来都正常。
与此同时,欧洲的用户因 CDN 问题而遭遇 5 秒的加载时间,而中东和北非地区的用户则因路由问题根本无法连接。
解决方案: 从多个地理位置进行监控。
问题 2:仅检查 HTTP 200
# This is what most basic monitoring does
curl -s -o /dev/null -w "%{http_code}" https://yoursite.com
# Returns: 200
# You think: "Great, site is up!"
200 状态并不意味着您的站点正常工作。您的 API 可能返回错误,或者数据库连接可能出现故障。
问题 3:忘记 SSL 证书
SSL 证书会过期。过期后,浏览器会完全阻止访问您的站点。
问题 4:域名过期
这很尴尬,但发生的频率比您想象的要高。您的域名过期的原因可能是:
- 备案的信用卡已过期
- 续费邮件被归入垃圾邮件
- 注册域名的人员已离职
当您的域名过期时,整个线上存在会消失。更糟的是,域名抢注者可能在数小时内抢走它。
构建合适的监控策略
第 1 层:端点健康检查
创建专用的健康端点:
// Express.js health endpoint example
app.get('/api/health', async (req, res) => {
const health = {
status: 'healthy',
timestamp: new Date().toISOString(),
checks: {}
};
// Check database
try {
await db.query('SELECT 1');
health.checks.database = 'ok';
} catch (e) {
health.checks.database = 'failing';
health.status = 'unhealthy';
}
// Check Redis
try {
await redis.ping();
health.checks.cache = 'ok';
} catch (e) {
health.checks.cache = 'failing';
health.status = 'unhealthy';
}
const statusCode = health.status === 'healthy' ? 200 : 503;
res.status(statusCode).json(health);
});
第 2 层:SSL 证书监控
在多个阈值设置告警:
| 距离到期天数 | 告警级别 |
|---|---|
| 30 天 | 提醒 |
| 14 天 | 警告 |
| 7 天 | 严重 |
| 1 天 | 紧急 |
第 3 层:域名到期监控
域名是所有事物的基石。应将其监控与 SSL 分开:
- 跟踪 所有 域名的到期日期
- 在到期前 60 / 30 / 14 / 7 天设置告警
- 包含您拥有的次要域名
- 不要依赖注册商的邮件——它们常被过滤为垃圾邮件
第 4 层:多区域检查
至少从三个地理区域进行监控:
- 美洲 – 美国东部 / 西部
- 欧洲 – 法兰克福 / 伦敦
- 亚太 / 中东与北非 – 新加坡、迪拜、利雅得
使用 Uptime Chef 设置
我一直在使用 Uptime Chef 因为它可以从全球各地进行监控——包括中东和北非地区(利雅得、开罗、迪拜)——而大多数服务并不提供此功能。
步骤 1:添加监控
注册后:
- 主页监控 – 基本可用性
- 健康端点监控 – 您的
/api/health - SSL 监控 – 证书到期
- 域名监控 – 域名到期跟踪
步骤 2:配置 Webhook 警报
Slack 集成
{
"webhook_url": "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",
"payload_template": {
"text": "🚨 Alert: {{monitor_name}} is {{status}}",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*{{monitor_name}}*\nStatus: {{status}}\nResponse Time: {{response_time}}ms"
}
}
]
}
}
Discord 集成
{
"webhook_url": "https://discord.com/api/webhooks/YOUR/WEBHOOK",
"payload_template": {
"embeds": [
{
"title": "{{monitor_name}} is {{status}}",
"color": 15158332,
"fields": [
{ "name": "Response Time", "value": "{{response_time}}ms" }
]
}
]
}
}
步骤 3:创建状态页面
对于 SaaS 产品,公开的状态页面(例如 status.yourcompany.com)可以建立信任并减少支持工单。
步骤 4:API 集成
// Fetch monitor status via API
const response = await fetch('https://dashboard.uptimechef.com/v1/monitors', {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
const monitors = await response.json();
monitors.forEach(monitor => {
console.log(`${monitor.name}: ${monitor.status}`);
});
Monitoring Checklist
- 首页和关键页面已监控
- API 健康端点已监控
- SSL 证书已监控(30 / 14 / 7‑天提醒)
- 域名到期已监控(60 / 30 / 14 / 7‑天提醒)
- 来自 2‑3 个地理区域的监控
- 已配置提醒(email + Slack/Discord)
- 已设置状态页
不监控的成本
| 场景 | 成本 |
|---|---|
| 平均电子商务收入 | $10,000/天 |
| 1 小时未检测到的停机 | ≈ $417 损失 |
| 6 小时夜间停机 | ≈ $2,500 损失 |
将其与 Uptime Chef 的免费层或起价 $0.99 / 月 的付费计划进行比较。
结论
好的监控不是关于更多的警报——而是关于正确的警报,来自多个位置,针对正确的端点。
从基础做起:
- 监控你的健康端点
- 添加多区域检查
- 跟踪 SSL 和域名到期
- 将警报接入 Slack/Discord
- 发布状态页面
现在实施稳健的策略,你就能停止默默看着用户离开。
int,不仅仅是你的主页
- 跟踪 SSL 证书到期
- 跟踪域名到期日期
- 如果有国际用户,可从多个地区进行监控
- 设置 webhook,将其集成到现有工具中
试一试:Uptime Chef 有免费层供副项目使用。
你的监控设置是什么?在评论中分享你的战斗经历!