WEB-27:网站监控与告警设置

王尘宇 网站建设 2

作者:王尘宇

公司:西安蓝蜻蜓网络科技有限公司

网站:wangchenyu.com

微信:wangshifucn | QQ:314111741

地点:西安 | 从业经验:2008 年至今(18 年)




一句话答案


网站监控与告警设置 是通过配置可用性监控、性能监控、错误追踪、日志分析,设置多级告警规则,确保网站问题及时发现、快速响应,最大限度减少停机时间和用户损失的系统化管理方法。




为什么需要监控?


监控价值


业务价值:

✅ 减少停机时间
✅ 快速发现问题
✅ 提升用户体验
✅ 数据驱动优化

成本对比:

监控成本:每月几百元
停机损失:每分钟数千到数万
ROI:非常明显

监控场景


可用性监控:

- 网站是否可访问
- 响应时间是否正常
- SSL 证书状态
- 域名到期提醒

性能监控:

- 页面加载时间
- API 响应时间
- 数据库性能
- 服务器资源

错误监控:

- 应用错误
- JavaScript 错误
- API 错误
- 数据库错误



可用性监控


监控工具选择 ⭐⭐⭐⭐⭐


国际工具:

1. Uptime Robot
   - 免费 50 个监控
   - 5 分钟检查
   - 邮件/短信告警
   - 推荐 ⭐⭐⭐⭐⭐

2. Pingdom
   - 功能强大
   - 详细报告
   - $10/月起

3. StatusCake
   - 免费 10 个监控
   - 功能全面
   - 性价比高

国内工具:

1. 阿里云监控
   - 免费额度
   - 国内节点
   - 与阿里云集成

2. 腾讯云监控
   - 免费额度
   - 国内节点
   - 微信告警

3. 监控宝
   - 专业监控
   - 国内节点
   - 付费

配置监控 ⭐⭐⭐⭐⭐


Uptime Robot 配置:

1. 注册账号
   - 访问 uptimerobot.com
   - 免费注册

2. 添加监控
   - Monitor Type: HTTP(s)
   - Friendly Name: 网站名称
   - URL: https://yourdomain.com
   - Monitoring Interval: 5 minutes

3. 设置告警
   - Add Alert Contact
   - 邮箱/短信/微信
   - 告警阈值

4. 确认配置
   - 保存
   - 开始监控

多地点监控:

监控节点:
- 北京
- 上海
- 广州
- 美国
- 欧洲

优势:
- 发现区域性问题
- CDN 效果监控
- 全球可用性

监控指标 ⭐⭐⭐⭐⭐


核心指标:

1. 可用性
   - 目标:99.9%+
   - 计算:正常运行时间/总时间

2. 响应时间
   - 目标:<3 秒
   - 警告:>5 秒
   - 严重:>10 秒

3. SSL 状态
   - 证书有效
   - 到期提醒(30 天)
   - 加密强度

告警级别:

P0 - 网站不可用:立即电话
P1 - 响应慢:5 分钟内通知
P2 - SSL 即将到期:邮件通知
P3 - 性能下降:每日报告



性能监控


页面性能 ⭐⭐⭐⭐⭐


Google PageSpeed:

// PageSpeed Insights API
const PSI_KEY = 'YOUR_API_KEY';

async function checkPageSpeed(url) {
  const response = await fetch(
    `https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=${url}&key=${PSI_KEY}`
  );
  const data = await response.json();
  
  return {
    performance: data.lighthouseResult.categories.performance.score,
    fcp: data.lighthouseResult.audits['first-contentful-paint'].numericValue,
    lcp: data.lighthouseResult.audits['largest-contentful-paint'].numericValue,
    cls: data.lighthouseResult.audits['cumulative-layout-shift'].numericValue
  };
}

性能指标:

Core Web Vitals:
- LCP (最大内容绘制): <2.5 秒
- FID (首次输入延迟): <100 毫秒
- CLS (累积布局偏移): <0.1

其他指标:
- FCP (首次内容绘制): <1.5 秒
- TTI (可交互时间): <3.5 秒
- TBT (总阻塞时间): <200 毫秒

API 性能监控 ⭐⭐⭐⭐


监控实现:

const axios = require('axios');

async function monitorAPI(endpoint) {
  const start = Date.now();
  
  try {
    const response = await axios.get(endpoint, {
      timeout: 5000
    });
    
    const responseTime = Date.now() - start;
    
    return {
      status: 'success',
      statusCode: response.status,
      responseTime: responseTime,
      timestamp: new Date().toISOString()
    };
  } catch (error) {
    return {
      status: 'error',
      error: error.message,
      responseTime: Date.now() - start,
      timestamp: new Date().toISOString()
    };
  }
}

// 定期监控
setInterval(async () => {
  const result = await monitorAPI('https://api.example.com/health');
  console.log(result);
  
  // 发送告警
  if (result.status === 'error' || result.responseTime > 1000) {
    sendAlert(result);
  }
}, 60000); // 每分钟



错误监控


应用错误 ⭐⭐⭐⭐⭐


Sentry 集成:

// 安装
npm install @sentry/node

// 配置
const Sentry = require('@sentry/node');

Sentry.init({
  dsn: 'YOUR_SENTRY_DSN',
  environment: 'production',
  tracesSampleRate: 1.0,
});

// 捕获错误
try {
  // 可能出错的代码
} catch (error) {
  Sentry.captureException(error);
}

// 自定义上下文
Sentry.configureScope(scope => {
  scope.setUser({ id: user.id, email: user.email });
  scope.setTag('page', 'checkout');
});

前端错误监控:

// 全局错误处理
window.onerror = function(message, source, lineno, colno, error) {
  Sentry.captureException(error, {
    extra: {
      message: message,
      source: source,
      lineno: lineno,
      colno: colno
    }
  });
};

// Promise 错误
window.onunhandledrejection = function(event) {
  Sentry.captureException(event.reason);
};

日志监控 ⭐⭐⭐⭐


日志收集:

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

// 使用
logger.info('用户登录', { userId: 123, ip: '192.168.1.1' });
logger.error('数据库连接失败', { error: err.message });

日志分析:

关键错误:
- 数据库错误
- 认证失败
- 支付失败
- API 超时

告警规则:
- 错误率 > 1%:警告
- 错误率 > 5%:严重
- 特定错误:立即告警



服务器监控


资源监控 ⭐⭐⭐⭐⭐


监控指标:

CPU:
- 使用率:<70%
- 警告:>80%
- 严重:>90%

内存:
- 使用率:<80%
- 警告:>85%
- 严重:>95%

磁盘:
- 使用率:<80%
- 警告:>85%
- 严重:>90%

网络:
- 带宽使用
- 连接数
- 错误率

监控脚本:

#!/bin/bash

# CPU 使用率
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)

# 内存使用率
MEMORY=$(free | grep Mem | awk '{printf("%.2f"), $3/$2 * 100.0}')

# 磁盘使用率
DISK=$(df -h / | tail -1 | awk '{print $5}' | cut -d'%' -f1)

# 检查并告警
if (( $(echo "$CPU > 80" | bc -l) )); then
  echo "CPU 使用率过高:$CPU%" | mail -s "服务器告警" admin@example.com
fi

if (( $(echo "$MEMORY > 85" | bc -l) )); then
  echo "内存使用率过高:$MEMORY%" | mail -s "服务器告警" admin@example.com
fi

if [ $DISK -gt 85 ]; then
  echo "磁盘使用率过高:$DISK%" | mail -s "服务器告警" admin@example.com
fi

进程监控 ⭐⭐⭐⭐


进程监控:

#!/bin/bash

# 检查 Nginx
if ! pgrep -x "nginx" > /dev/null; then
  echo "Nginx 进程已停止" | mail -s "服务告警" admin@example.com
  systemctl start nginx
fi

# 检查 MySQL
if ! pgrep -x "mysqld" > /dev/null; then
  echo "MySQL 进程已停止" | mail -s "服务告警" admin@example.com
  systemctl start mysql
fi

# 检查 PHP-FPM
if ! pgrep -x "php-fpm" > /dev/null; then
  echo "PHP-FPM 进程已停止" | mail -s "服务告警" admin@example.com
  systemctl start php-fpm
fi



告警设置


告警渠道 ⭐⭐⭐⭐⭐


邮件告警:

const nodemailer = require('nodemailer');

async function sendEmailAlert(subject, message) {
  const transporter = nodemailer.createTransport({
    host: process.env.SMTP_HOST,
    auth: {
      user: process.env.SMTP_USER,
      pass: process.env.SMTP_PASS
    }
  });
  
  await transporter.sendMail({
    from: '监控 <monitor@example.com>',
    to: 'admin@example.com',
    subject: `[告警] ${subject}`,
    text: message
  });
}

短信告警:

// 阿里云短信
async function sendSMSAlert(phone, message) {
  // 使用阿里云短信 API
  const result = await client.sendSms({
    PhoneNumbers: phone,
    SignName: '网站监控',
    TemplateCode: 'SMS_123456789',
    TemplateParam: JSON.stringify({ message: message })
  });
  
  return result;
}

即时通讯告警:

// 企业微信
async function sendWechatAlert(message) {
  const webhook = 'YOUR_WEBHOOK_URL';
  
  await axios.post(webhook, {
    msgtype: 'text',
    text: {
      content: `【网站告警】\n${message}`
    }
  });
}

// 钉钉
async function sendDingtalkAlert(message) {
  const webhook = 'YOUR_WEBHOOK_URL';
  
  await axios.post(webhook, {
    msgtype: 'text',
    text: {
      content: `【网站告警】\n${message}`
    }
  });
}

告警规则 ⭐⭐⭐⭐⭐


分级告警:

P0 - 严重(网站不可用):
- 渠道:电话 + 短信 + 即时通讯
- 响应:5 分钟内
- 升级:15 分钟未响应升级

P1 - 警告(性能下降):
- 渠道:短信 + 即时通讯
- 响应:30 分钟内
- 升级:1 小时未响应升级

P2 - 注意(潜在问题):
- 渠道:即时通讯
- 响应:4 小时内
- 升级:次日未处理升级

P3 - 信息(日常报告):
- 渠道:邮件
- 响应:每日查看

告警升级:

const escalationLevels = [
  { delay: 0, contacts: ['oncall@example.com'] },
  { delay: 15, contacts: ['team-lead@example.com'] },
  { delay: 30, contacts: ['manager@example.com'] },
  { delay: 60, contacts: ['cto@example.com'] }
];

async function sendEscalatingAlert(issue) {
  for (const level of escalationLevels) {
    setTimeout(() => {
      if (!issue.resolved) {
        sendAlert(level.contacts, issue);
      }
    }, level.delay * 60000);
  }
}



监控仪表板


数据展示 ⭐⭐⭐⭐


Grafana 配置:

数据源:
- Prometheus
- MySQL
- Elasticsearch

仪表板:
- 可用性概览
- 性能指标
- 错误统计
- 资源使用

关键指标展示:

1. 可用性
   - 当前状态
   - 7 天可用性
   - 30 天可用性

2. 性能
   - 平均响应时间
   - P95 响应时间
   - P99 响应时间

3. 错误
   - 今日错误数
   - 错误率
   - 错误趋势

4. 资源
   - CPU 使用率
   - 内存使用率
   - 磁盘使用率



王尘宇实战建议


18 年经验总结


  1. 多层次监控

- 可用性

- 性能

- 错误

- 资源


  1. 合理告警

- 分级告警

- 避免告警疲劳

- 升级机制


  1. 快速响应

- 值班制度

- 响应流程

- 问题追踪


  1. 持续优化

- 分析告警

- 优化阈值

- 减少误报


  1. 文档记录

- 监控配置

- 告警规则

- 响应流程


西安企业建议


  • 选择国内监控服务
  • 配置多级告警
  • 建立响应机制
  • 定期演练



常见问题解答


Q1:监控间隔多久合适?


答:

  • 可用性:1-5 分钟
  • 性能:5-15 分钟
  • 资源:1-5 分钟
  • 日志:实时

Q2:如何避免告警疲劳?


答:

  • 合理阈值
  • 分级告警
  • 告警聚合
  • 静默时间

Q3:需要监控哪些指标?


答:

  • 可用性(必须)
  • 响应时间(必须)
  • 错误率(必须)
  • 资源使用(推荐)

Q4:告警发给谁?


答:

  • 值班人员
  • 技术负责人
  • 升级机制
  • 轮班制度

Q5:监控成本多少?


答:

  • 免费工具:0 元
  • 基础付费:100-500 元/月
  • 企业级:1000 元+/月
  • 根据需求



总结


网站监控与告警设置核心要点:


  • 📊 可用性监控 — 多地点、多工具
  • 性能监控 — 页面、API、资源
  • 🐛 错误监控 — 应用、前端、日志
  • 📱 告警设置 — 多渠道、分级、升级
  • 📈 仪表板 — 数据展示、可视化

王尘宇建议: 监控是网站健康的眼睛。建立完善的监控体系,及时发现问题,快速响应处理。




关于作者


王尘宇

西安蓝蜻蜓网络科技有限公司创始人


联系方式:

  • 🌐 网站:wangchenyu.com
  • 💬 微信:wangshifucn
  • 📱 QQ:314111741
  • 📍 地址:陕西西安



本文最后更新:2026 年 3 月 18 日

版权声明:本文为王尘宇原创,属于"网站建设系列"第 27 篇,转载请联系作者并注明出处。

下一篇:WEB-28:网站日志分析方法


发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~