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

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方法中的逻辑即可。

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


http://www.kler.cn/a/597610.html

相关文章:

  • 利用ffmpeg库实现音频AAC编解码
  • PyTorch 深度学习实战(18):分布式强化学习与 IMPALA 算法
  • 音视频框架详解
  • 蓝桥杯每日一题----海底高铁
  • 【Linux线程】——线程概念线程接口
  • 工具层handle_excel
  • 鱼书--学习2
  • MySQL 中,分库分表机制和分表分库策略
  • Ubuntu搭建Battery Historian环境
  • (八)Reactor响应式框架之核心特性
  • 5、MySQL为什么使用 B+树 来作索引【高频】
  • 矩阵可相似对角化
  • G-Star 校园开发者计划·黑科大|开源第一课之 Git 入门
  • 强化学习中循环神经网络在序列决策中的应用研究
  • 2025新版懒人精灵零基础安装调试+lua基础+UI设计交互+常用方法封装+项目实战+项目打包安装板块-视频教程(初学者必修课)
  • 基于javaweb的SpringBoot医院管理系统设计与实现(源码+文档+部署讲解)
  • maven在windows系统上的详细安装和配置
  • 无阻塞UI:通过Web Worker提升用户体验的新途径
  • 基于LabVIEW的Windows平台高速闭环控制
  • windows+ragflow+deepseek实战之一excel表查询