0

Shell脚本curl重定向告警钉钉配置:5个实战方案让网站问题无处遁形

2026.06.05 | youres | 34次围观

为什么要用钉钉监控重定向异常

网站重定向异常是最隐蔽的故障之一。301跳转配置错误、HTTPS强制跳转循环、UTM参数丢失,这些问题往往不会直接报错,而是默默吞噬你的SEO权重和营销数据。等你发现流量下滑时,已经晚了。

传统邮件告警有延迟,短信告警成本高。钉钉机器人Webhook免费、实时、支持@指定人,是中小团队的最佳选择。本文分享5个实战方案,从基础监控到智能告警全覆盖。

方案一:基础重定向次数监控脚本

最基础的监控是检测重定向次数。正常网站跳转不超过3次,超过这个阈值就要警惕。

#!/bin/bash
# 基础重定向次数监控
# 配置区域
WEBHOOK_URL=\"https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN\"
TARGET_URL=\"https://www.example.com\"
MAX_REDIRECTS=3

# 获取重定向次数
redirect_count=

# 判断是否异常
if [ \"\" -gt \"\" ]; then
    # 构建钉钉消息
    curl -s \"\" \\
        -H \"Content-Type: application/json\" \\
        -d \"{
            \\\"msgtype\\\": \\\"text\\\",
            \\\"text\\\": {
                \\\"content\\\": \\\"【重定向异常告警】\\n网站: \\n重定向次数: \\n阈值: \\n时间: \\\"
            }
        }\"
fi

关键参数说明

  • -L:跟随重定向,必须加这个参数才能统计跳转次数
  • -o /dev/null:丢弃页面内容,只关注跳转数据
  • -w \"%{num_redirects}\":输出重定向次数变量

方案二:检测最终URL与预期不符

有时候重定向次数正常,但终点URL不对。比如HTTPS强制跳转配置错误,本该跳到https://www.example.com却跳到了https://example.com,这会影响SEO权重传递。

#!/bin/bash
# 检测最终URL是否匹配预期
WEBHOOK_URL=\"https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN\"
TARGET_URL=\"https://www.example.com\"
EXPECTED_FINAL=\"https://www.example.com/\"

# 获取最终URL
final_url=

# 判断是否匹配
if [ \"\" != \"\" ]; then
    curl -s \"\" \\
        -H \"Content-Type: application/json\" \\
        -d \"{
            \\\"msgtype\\\": \\\"markdown\\\",
            \\\"markdown\\\": {
                \\\"title\\\": \\\"重定向终点异常\\\",
                \\\"text\\\": \\\"### 重定向终点异常\\n\\n- 预期: \\n- 实际: \\n- 时间: \\\"
            }
        }\"
fi

curl -w 关键变量

  • url_effective:最终URL,跟随重定向后的终点
  • url_redirect:第一个重定向URL,不跟随重定向也能获取
  • num_redirects:重定向次数

方案三:批量监控多个URL

生产环境往往有多个域名或关键页面。用数组批量监控,一次巡检全覆盖。

#!/bin/bash
# 批量监控脚本
WEBHOOK_URL=\"https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN\"

# URL列表
declare -a URLS=(
    \"https://www.example.com\"
    \"https://www.example.com/product\"
    \"https://www.example.com/contact\"
    \"https://api.example.com/health\"
)

MAX_REDIRECTS=3
ALERT_MSG=\"\"

for url in \"\\"; do
    redirect_count=
    final_url=
    
    if [ \"\" -gt \"\" ]; then
        ALERT_MSG+=\" 跳转次\\n\"
    fi
done

# 统一发送告警
if [ -n \"\" ]; then
    curl -s \"\" \\
        -H \"Content-Type: application/json\" \\
        -d \"{
            \\\"msgtype\\\": \\\"text\\\",
            \\\"text\\\": {
                \\\"content\\\": \\\"【批量监控告警】\\n\\n时间: \\\"
            }
        }\"
fi

方案四:检测UTM参数丢失

营销活动最怕UTM参数在重定向过程中丢失。这个脚本检测带UTM参数的URL跳转后是否还保留参数。

#!/bin/bash
# 检测UTM参数保留
WEBHOOK_URL=\"https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN\"
TEST_URL=\"https://example.com?utm_source=google&utm_medium=cpc&utm_campaign=summer\"

# 检测参数是否保留
final_url=

if [[ \"\" != *\"utm_source\"* ]]; then
    curl -s \"\" \\
        -H \"Content-Type: application/json\" \\
        -d \"{
            \\\"msgtype\\\": \\\"text\\\",
            \\\"text\\\": {
                \\\"content\\\": \\\"【UTM参数丢失告警】\\n原始URL: \\n最终URL: \\nUTM参数已丢失,请检查Nginx重定向配置\\\"
            }
        }\"
fi

常见UTM丢失原因

  • Nginx rewrite规则未加
  • Cloudflare自动HTTPS跳转未保留参数
  • CDN层重定向规则覆盖查询字符串

方案五:智能告警(带阈值判断)

避免频繁告警刷屏,加入阈值判断:只有连续异常才触发告警。

#!/bin/bash
# 智能告警脚本(带状态文件)
WEBHOOK_URL=\"https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN\"
TARGET_URL=\"https://www.example.com\"
STATE_FILE=\"/tmp/redirect_state.txt\"
THRESHOLD=3  # 连续异常次数

redirect_count=

if [ \"\" -gt 3 ]; then
    # 读取异常计数
    if [ -f \"\" ]; then
        count=
    else
        count=0
    fi
    
    # 递增计数
    count=
    echo  > \"\"
    
    # 达到阈值才告警
    if [ \"\" -ge \"\" ]; then
        curl -s \"\" \\
            -H \"Content-Type: application/json\" \\
            -d \"{
                \\\"msgtype\\\": \\\"text\\\",
                \\\"text\\\": {
                    \\\"content\\\": \\\"【重定向持续异常】\\n网站: \\n已连续异常  次\\n时间: \\n请立即检查Nginx配置\\\"
                },
                \\\"at\\\": {
                    \\\"atMobiles\\\": [\\\"13800138000\\\"],
                    \\\"isAtAll\\\": false
                }
            }\"
    fi
else
    # 正常时清零计数
    echo 0 > \"\"
fi

定时任务配置

将脚本加入crontab,每5分钟检测一次:

# 编辑定时任务
crontab -e

# 添加检测任务
*/5 * * * * /opt/scripts/redirect_monitor.sh

# 批量检测每10分钟执行
*/10 * * * * /opt/scripts/batch_redirect_monitor.sh

钉钉机器人安全设置

钉钉机器人支持三种安全设置,推荐使用加签模式:

#!/bin/bash
# 加签模式发送消息
WEBHOOK_URL=\"https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN\"
SECRET=\"SECxxxx\"

# 计算签名
timestamp=000
sign_string=\"\\n\"
sign=

# 发送带签名请求
curl -s \"×tamp=&sign=\" \\
    -H \"Content-Type: application/json\" \\
    -d '{\"msgtype\":\"text\",\"text\":{\"content\":\"测试消息\"}}'

总结

Shell脚本配合curl和钉钉Webhook,可以低成本构建网站重定向监控系统。核心要点:

  • curl -w num_redirects统计跳转次数
  • curl -w url_effective检测最终URL
  • 批量监控用数组循环,统一告警
  • 智能告警加阈值判断,避免刷屏
  • 定时任务用crontab,检测频率5-10分钟

这套方案已在多个生产环境验证,重定向异常10分钟内必被发现。比起商业监控服务,省钱又可控。

版权声明

本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论