如何设置真正有效的网站监控:开发者指南

发布: (2026年1月4日 GMT+8 06:22)
7 分钟阅读
原文: Dev.to

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 有免费层供副项目使用。

你的监控设置是什么?在评论中分享你的战斗经历!

Back to Blog

相关文章

阅读更多 »

RGB LED 支线任务 💡

markdown !Jennifer Davishttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%...

Mendex:我为何构建

介绍 大家好。今天我想分享一下我是谁、我在构建什么以及为什么。 早期职业生涯与倦怠 我在 17 年前开始我的 developer 生涯……