低成本实现7x24小时网站内容监控

网极科技1个月前代码笔记79

运维工作经常遇到网站打不开,APP的接口超时,SSL证书过期等等问题,我们就需要一个24小时的自动化监控

通过阿里云函数计算可实现分钟级的定时任务运行,支持php/java/go/python/nodejs等代码环境,而且还有免费额度


一、成本预估(按月计算)

资源用量费用
函数调用次数1440次(每分钟1次)¥0.00(免费额度内)
出网流量1MB/次 × 1440约¥0.23
日志服务1MB/day¥0.00

二、典型告警效果

📌 钉钉机器人收到的告警消息

[监控告警] 内容异常
URL: https://example.com/status
预期内容: running
实际返回: <html>503 Service Unavailable</html>
时间:2023-08-20 14:30:05

通过这个方案,您可以用 低成本 实现7x24小时网站内容监控,异常时10秒内触达钉钉群。


以下是用 阿里云函数计算(PHP) 实现定时检测网址内容并发送钉钉告警的完整解决方案:

三、阿里云函数计算配置步骤

  1. 创建PHP函数

    • 运行环境:PHP 7.2

    • 处理程序类型:处理 HTTP 请求

    • 代码包:上传包含上述代码的 index.php

    • 登录 阿里云函数计算控制台

    • 创建新函数:

  2. 配置环境变量

    • 在函数配置页添加环境变量:

      DINGDING_WEBHOOK = https://oapi.dingtalk.com/robot/send?access_token=你的token
  3. 设置定时触发器

    • 触发器类型:定时触发器

    • Cron表达式:0 *\/30 * * * * (每30分钟检测一次)

    • 高级选项:勾选「启用」

    • 在函数详情页点击「触发器」→「创建触发器」:

  4. 测试函数

    • 使用控制台的「测试函数」功能模拟触发

    • 检查钉钉群机器人是否收到测试告警



四、完整PHP代码(函数计算入口文件 index.php

<?php
function handler($event, $context) {
    // 1. 配置要监控的网址和预期内容(格式:URL => 预期包含的字符串)
    $urls = [
        'https://example.com/status' => 'running',      // 示例配置1
        'https://api.example.com'    => '"status":"OK"' // 示例配置2(检测JSON字段)
    ];
    
    // 2. 钉钉机器人配置(从环境变量获取Webhook)
    $dingding_webhook = getenv('DINGDING_WEBHOOK');
    
    // 3. 开始检测每个URL
    foreach ($urls as $url => $expected) {
        $content = fetchUrlContent($url);
        if (strpos($content, $expected) === false) {
            sendDingAlert($dingding_webhook, "[监控告警] 内容异常", "URL: $url\n预期内容: $expected\n实际返回: " . substr($content, 0, 200));
        }
    }
    
    return "监控执行完成";
}

// 抓取网页内容(带超时和重试)
function fetchUrlContent($url, $retry = 2) {
    $options = [
        'http' => ['timeout' => 5], // 5秒超时
        'ssl'  => ['verify_peer' => false] // 简单起见跳过证书验证
    ];
    
    while ($retry-- > 0) {
        try {
            $content = file_get_contents($url, false, stream_context_create($options));
            return $content !== false ? $content : "无法获取内容";
        } catch (Exception $e) {
            // 最后一次重试仍失败则返回错误
            if ($retry <= 0) return "请求异常: " . $e->getMessage();
        }
    }
}

// 发送钉钉机器人警报
function sendDingAlert($webhook, $title, $text) {
    $data = [
        'msgtype' => 'markdown',
        'markdown' => [
            'title' => $title,
            'text'  => "**{$title}**\n\n{$text}\n\n时间:" . date('Y-m-d H:i:s')
        ]
    ];
    
    $options = [
        'http' => [
            'method'  => 'POST',
            'header'  => "Content-Type: application/json",
            'content' => json_encode($data)
        ]
    ];
    
    file_get_contents($webhook, false, stream_context_create($options));
}
?>

如需帮助可联系QQ/wx:706448591

相关文章

table表格css样式

table表格css样式

效果图 table { border-collapse: collapse; margin: 0 auto;...

【精选】PHP将股票日K线数据转换为周K线数据

【精选】PHP将股票日K线数据转换为周K线数据

可以使用PHP来将股票日K线数据转换为周K线数据。具体实现方法如下:获取日K线数据,例如从数据库中查询出所有日期的股票数据,保存在一个数组中,每个元素包含如下信息: $day_data = [...

jQuery uploadify上传插件修改为ajax上传

jQuery uploadify上传插件修改为ajax上传

近期客户找到我们升级他们的老古董系统,这个系统创建于十几年前,使用了大量过时老旧的组件,需要更新替换,其中就包括了让很多程序员头疼的Flash组件。本篇文章记录下如何将jQuery uploadify...

不懂技术也能将网页制作成Windows桌面exe文件

不懂技术也能将网页制作成Windows桌面exe文件

基于electron将网页制作成Windows桌面exe文件,使用开源的nativefier可以简单将网页打包成Windows桌面exe文件效果如下图:nativefier开源地址: https:/...

如何防范和应对AI大模型频繁采集访问网站的问题?

如何防范和应对AI大模型频繁采集访问网站的问题?

引言近年来,随着人工智能(AIGC)技术的迅猛发展,ChatGPT、Claude、Gemini 等大型语言模型(LLMs)以及各种数据爬取工具对互联网内容的采集行为越来越频繁。许多网站的运营者发现,服...

私有化部署PaddleOCR图片中文字识别

私有化部署PaddleOCR图片中文字识别

图片文字识别(OCR)的技术目前已经比较成熟,有很多开源模型可以使用。本文主要以百度开源的PaddleOCR为例,进行私有化部署 为什么要进行文字识别私有化很多图片是比较隐私的,比方身份证,虽然市面...