当前位置: 首页 > news >正文

Linux 告警:使用企业微信发送通知

背景

        在一个 单主多从结构 的数据库架构中,主库部署于 阿里云服务器,从库部署于 本地BI 系统抽取数据使用。由于网络的不稳定性,偶尔会发生 本地网络到阿里云的访问不可达 的情况。然而,这种网络故障 无法被及时发现,导致从库 数据不同步,进而影响 BI 业务的数据准确性。因此,我们需要在 Linux 上配置一套 端口监控告警机制,在检测到端口异常时,能 及时通知 相关负责人,以便尽快排查和解决问题。

解决方案

        本方案通过 Bash 脚本 + 企业微信 API 来实现 端口监控告警,并使用 crontab 定时任务 定期检测端口连通性,在端口不可达时 自动发送通知 至相关人员。


一、获取企业微信 API 相关信息

 

(1) 登录企业微信

  • 进入 企业微信官网
  • 登录你的企业微信后台

 (2) 创建企业内部应用

  1. 进入 "应用管理"
    • "应用管理" 选项卡,点击 "创建应用"
  2. 填写应用信息
    • 应用名称端口监控
    • 可见范围:选择你的团队成员
    • 记录下
      • CorpID(企业ID)
      • AgentID(应用ID)
      • Secret(应用密钥)

(3) 获取用户 ID

  • 你需要知道哪些用户会收到告警(通常是你的企业微信用户名)。
  • 获取方式
    • 进入 "通讯录" > 找到你的用户名,例如 zhangsan(userId)

(4)开发者中心

首页 - 企业微信开发者中心https://developer.work.weixin.qq.com/


二、编写 Shell 监控脚本

(1) 创建监控脚本

#!/bin/bash

# 企业微信 API 信息(请替换成你的)
CORP_ID="your_corp_id"      # 企业 ID
SECRET="your_secret"        # 应用 Secret
AGENT_ID="your_agent_id"    # 应用 ID
USER="zhangsan"             # 接收告警的用户名(可以是多个用户,用 '|' 分隔)

# 监控的服务器和端口
SERVER_IP="192.168.1.100"
SERVER_PORT="80"

# 获取 AccessToken
get_access_token() {
    response=$(curl -s -G "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CORP_ID&corpsecret=$SECRET")
    echo "$response" | jq -r .access_token
}

# 发送企业微信告警
send_alert() {
    local message="⚠️ [告警] 服务器 $SERVER_IP 端口 $SERVER_PORT 不可用!请检查!"
    local token=$(get_access_token)

    curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$token" \
        -H "Content-Type: application/json" \
        -d "{
            \"touser\": \"$USER\",
            \"msgtype\": \"text\",
            \"agentid\": $AGENT_ID,
            \"text\": { \"content\": \"$message\" }
        }"
}

# 检测端口是否通畅
check_port() {
    nc -z -w3 $SERVER_IP $SERVER_PORT
    if [ $? -ne 0 ]; then
        echo "端口 $SERVER_PORT 不可用,发送告警..."
        send_alert
    else
        echo "端口 $SERVER_PORT 正常"
    fi
}

# 运行检查
check_port

三、赋予执行权限

(1)授权

chmod +x  /opt/monitor_port.sh

四、创建 crontab 定时任务

(1)编辑 crontab

crontab -e

(2)添加定时任务

        每 5 分钟检测一次端口:

*/5 * * * * /bin/bash /opt/monitor_port.sh >> /var/log/port_monitor.log 2>&1

日志文件: /var/log/port_monitor.log 记录检查日志。


五、测试告警

(1) 手动执行脚本

/opt/monitor_port.sh
  • 如果目标端口不可用,你应该会在企业微信中收到告警消息:
⚠️ [告警] 服务器 192.168.1.100 端口 80 不可用!请检查!
  • 如果端口正常,则不会发送通知。


 

总结

        这篇博客详细介绍了如何使用 Bash 脚本 + 企业微信 API 监控端口异常,并通过 crontab 定时执行。当然实际情况中可能不止监控端口异常一个场景,具体的我们只需要按需调整check_port方法中的逻辑即可。

如果觉得这篇博客对你有帮助,记得点赞 ⭐、收藏 📌、关注 🚀!

相关文章:

  • 【玩转全栈】---- Django 基于 Websocket 实现群聊(解决channel连接不了)
  • 目标和 (leetcode 494
  • 解决SpringCloud整合Nacos启动报Client not connected, current status:STARTING
  • [C++面试] 迭代器面试点(难点)
  • 一个KADB测试实践
  • Leetcode 378. 有序矩阵中第 K 小的元素 二分查找
  • gonet开源游戏服务器环境配置
  • leetcode127.单词接龙
  • 在 Linux下使用 Python 3.11 和 FastAPI 搭建带免费证书的 HTTPS 服务器
  • HarmonyOS开发,A持有B,B引用A的场景会不会导致内存泄漏,看这里!
  • python|exm6-1try-except结构|raise关键字|异常类型
  • Cannot find module @rollup/rollup-win32-x64-msvc
  • AES 简介 以及 C# 和 js 实现【加密知多少系列_3】
  • 鸿蒙Next开发与未来发展的变革:全场景操作系统的全新纪元
  • UE4学习笔记 FPS游戏制作10 制作UI准星
  • Linux 修改国内镜像源
  • 基于Debian搭建FTP服务器
  • 腾讯云创建DeepSeek AI应用及使用教程
  • 人工智能和量子时代的网络安全
  • 类与对象(二)——类的 6 个默认成员函数
  • 印度外交秘书:印巴军方将于12日再次对话
  • 中俄弘扬正确二战史观:缅怀历史,重拾初心,阻止悲剧重演
  • 中日有关部门就日本水产品输华问进行第三次谈判,外交部回应
  • 看展览|2025影像上海艺博会:市场与当代媒介中的摄影
  • 追光|铁皮房、土操场,这有一座“筑梦”摔跤馆
  • 绍兴柯桥:用一块布托起中国制造的新经纬