news 2026/6/25 3:45:03

springboot服务监控脚本1.0

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
springboot服务监控脚本1.0

背景:

系统刚上线,需要监控各网格服务的运行状态,仅靠人工监控,费事费力,费成本。但还要满足系统需求,还需要满足领导的要求。于是乎,开干~

实现思路:

编写脚本,加入定时任务,配置服务异常邮件告警,最好结合SpringBoot 多应用管理脚本实现,这篇文章使用。当然也可自行改造。

监控内容:

1. 检查期望的服务列表是否运行。
2. 显示运行服务的详细状态(服务名、PID、运行状态、运行时长、CPU使用率、物理内存、线程数 )。
3. 对停止的服务进行告警。
4. 支持邮件和企业微信两种告警方式(脚本里配置)。

开干上脚本:

都是热乎的,刚用,小伙伴们估计看到了,有2.0版本,晚会上:

java_health_checker1.0.sh

#!/bin/bash # ============================================================================== # Java服务状态监控脚本 (健康检查与告警完整版) # 功能: # 1. 检查期望的服务列表是否运行。 # 2. 显示运行服务的详细状态。 # 3. 对停止的服务进行告警。 # 4. 支持邮件和企业微信两种告警方式。 # ============================================================================== # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # ============================================================================== # 配置区域:请在这里修改配置 # ============================================================================== # --- 期望监控的服务列表 --- # 格式: "服务名:端口号" EXPECTED_SERVICES=( "model:8286" "esb:8285" *****服务自定义(根据实际情况修改) ) # --- 邮件告警设置 (方案一) --- EMAIL_ENABLED=false # true:启用, false:禁用 EMAIL_TO="*****@dtestcom" # 接收告警的邮箱 EMAIL_SUBJECT="[******] Java服务健康检查报告" # 邮件主题 # --- 企业微信告警设置 (方案二) --- WECHAT_ENABLED=false # true:启用, false:禁用 # 请替换为您自己的企业微信机器人Webhook地址 WECHAT_WEBHOOK_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY_HERE" # ============================================================================== # 打印标题 echo -e "${BLUE}============================================${NC}" echo -e "${BLUE} ****** $(hostname) Java服务健康巡检报告${NC}" echo -e "${BLUE} $(date '+%Y-%m-%d %H:%M:%S')${NC}" echo -e "${BLUE} 当前IP:$(hostname -I | awk '{print $1}')${NC}" echo -e "${BLUE}============================================${NC}" # 创建一个关联数组,用于存储正在运行的服务信息 declare -A running_services # --- 1. 扫描并收集所有正在运行的Java服务信息 --- echo -e "${GREEN}🔍 正在扫描当前运行的Java服务...${NC}" echo "" # 使用pgrep获取所有Java进程的PID java_pids=$(pgrep -f java) if [ -n "$java_pids" ]; then for pid in $java_pids; do # 获取完整命令行 full_cmd=$(ps -p $pid -o cmd=) if [[ "$full_cmd" != *"java"* ]]; then continue fi # 提取服务名和端口 service_name=$(echo "$full_cmd" | grep -oP 'SW_AGENT_NAME=\K[^ ]+' | head -1) if [ -z "$service_name" ]; then service_name=$(echo "$full_cmd" | grep -oP '\-jar\s+\K[^\.]+' | head -1) fi #port=$(echo "$full_cmd" | grep -oP 'server\.port=\K\d+' | head -1) port=$(echo "$full_cmd" | grep -oP 'D?server\.port=\K\d+' | head -1) # 如果服务名和端口都有效,存入数组 if [ -n "$service_name" ] && [ -n "$port" ]; then running_services["${service_name}:${port}"]="$pid" fi done fi # --- 2. 检查期望的服务状态 --- echo -e "${BLUE}📋 开始检查期望的服务状态...${NC}" echo "" down_services_count=0 down_services_list="" # 遍历期望的服务列表 for expected_service in "${EXPECTED_SERVICES[@]}"; do if [[ -n "${running_services[$expected_service]}" ]]; then # 服务正在运行 pid=${running_services[$expected_service]} service_name=${expected_service%:*} # 获取运行时信息 etime=$(ps -p $pid -o etime= | tr -d ' ') cpu_usage=$(ps -p $pid -o %cpu= | tr -d ' ') mem_rss=$(ps -p $pid -o rss= | tr -d ' ') threads=$(ps -p $pid -o nlwp= | tr -d ' ') mem_rss_mb=$(echo "$mem_rss" | awk '{printf "%.0f", $1/1024}') echo -e "${GREEN}✅ ${service_name} (PID: ${pid}) - 运行正常${NC}" printf " %-10s: %s\n" "运行时长" "$etime" printf " %-10s: %s%%\n" "CPU使用率" "$cpu_usage" printf " %-10s: %s MB\n" "物理内存" "$mem_rss_mb" printf " %-10s: %s\n" "线程数" "$threads" echo "" else # 服务停止或异常 service_name=${expected_service%:*} echo -e "${RED}❌ ${service_name} - 服务停止或异常!${NC}" ((down_services_count++)) down_services_list="${down_services_list} ${service_name}" fi done # --- 3. 最终报告与告警发送 --- echo -e "${BLUE}============================================${NC}" if [ "$down_services_count" -eq 0 ]; then echo -e "${GREEN}🎉 所有期望的服务都在正常运行!${NC}" else echo -e "${RED}⚠️ 发现 ${down_services_count} 个服务存在问题,请立即检查!${NC}" # --- 发送邮件告警 --- if [ "$EMAIL_ENABLED" = true ]; then echo -e "${YELLOW}📧 正在发送告警邮件到 $EMAIL_TO ...${NC}" email_body=$(cat <<EOF 服务器 $(hostname) 上的Java服务健康检查发现异常! 时间: $(date '+%Y-%m-%d %H:%M:%S') 异常服务数量: $down_services_count 异常服务列表: $down_services_list 请登录服务器检查详细情况。\n EOF ) echo "$email_body" | mailx -s "$EMAIL_SUBJECT - [ALERT]" "$EMAIL_TO" if [ $? -eq 0 ]; then echo -e "${GREEN}✅ 告警邮件发送成功!${NC}" else echo -e "${RED}❌ 告警邮件发送失败!请检查邮件配置。${NC}" fi fi # --- 发送企业微信告警 --- if [ "$WECHAT_ENABLED" = true ]; then echo -e "${YELLOW}📱 正在发送企业微信告警...${NC}" # 构建JSON消息体 message=$(cat <<EOF { "msgtype": "markdown", "markdown": { "content": "<font color='warning'>【$(hostname)服务告警】</font>\n\n> 服务器: <code>prd1</code>\n> 时间: <code>$(date '+%Y-%m-%d %H:%M:%S')</code>\n> 异常服务数: <code>$down_services_count</code>\n> 异常列表: <code>${down_services_list//\\n/ }</code>\n\n请立即登录服务器检查!" } } EOF ) # 发送HTTP请求 curl -s -X POST "$WECHAT_WEBHOOK_URL" \ -H "Content-Type: application/json" \ -d "$message" > /dev/null 2>&1 if [ $? -eq 0 ]; then echo -e "${GREEN}✅ 企业微信告警发送成功!${NC}" else echo -e "${RED}❌ 企业微信告警发送失败!请检查Webhook URL和网络。${NC}" fi fi fi echo -e "${BLUE}============================================${NC}" # 如果有服务停止,脚本的退出码为1,便于告警系统识别 if [ "$down_services_count" -gt 0 ]; then exit 1 fi

效果展示:

其他功能:

1、可配置邮件通知。

2、使用crontab定时巡检。

因为时间有限,这些之前文章也提到过,可自行配置。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 0:20:10

2025最新Facefusion 3.1.2 Docker部署教程

2025最新Facefusion 3.1.2 Docker部署教程 在AI生成内容爆发的今天&#xff0c;人脸替换技术早已不再是实验室里的“黑科技”&#xff0c;而是广泛应用于短视频创作、影视后期甚至虚拟主播生产链中的核心工具。而 Facefusion ——这个从开源社区成长起来的明星项目&#xff0c…

作者头像 李华
网站建设 2026/6/23 13:20:37

一维动态规划 - 从递归/记忆化搜索入手动态规划

从递归/记忆化搜索入手动态规划 在入门动态规划时&#xff0c;记忆化搜索往往比递推形式更容易想。可以先写出记忆化搜索&#xff0c;再转为递推形式。 记忆化搜索很好用&#xff0c;但并不是万能的&#xff0c;某些题目只有写成递推&#xff0c;才能结合数据结构等来优化时间…

作者头像 李华
网站建设 2026/6/24 21:07:24

自动驾驶世界模型核心成果、论文代码与最新进展全景解析

一、核心参与主体与技术生态布局&#xff08;一&#xff09;参与主体分类及定位主体类型代表机构/企业核心定位与研发方向车企/科技企业理想、小鹏、华为、百度、小米、吉利、滴滴、地平线、蔚来、NVIDIA、阿里高德技术落地与规模化应用&#xff0c;聚焦车端部署、仿真体系搭建…

作者头像 李华
网站建设 2026/6/24 17:23:54

Dify平台API权限控制机制的设计与实施

Dify平台API权限控制机制的设计与实施 在AI应用快速渗透企业核心业务的今天&#xff0c;一个看似不起眼的技术细节——API能不能被随意调用——往往决定了整个系统的安危。设想一下&#xff1a;某天你发现外部合作伙伴通过一个公开的接口&#xff0c;不仅调用了你的智能客服模型…

作者头像 李华
网站建设 2026/6/24 20:37:15

LobeChat能否实现多人协同编辑?共享会话功能设想

LobeChat能否实现多人协同编辑&#xff1f;共享会话功能设想 在远程办公常态化、AI助手深度融入工作流的今天&#xff0c;一个看似简单却日益凸显的问题浮出水面&#xff1a;我们能否像协作编辑一份文档那样&#xff0c;多人实时共用同一个AI对话&#xff1f; 想象这样一个场…

作者头像 李华
网站建设 2026/6/23 23:08:20

基于单片机的智能温控风扇系统设计(温度+风速调节)【附代码】

&#x1f4c8; 算法与建模 | 专注PLC、单片机毕业设计 ✨ 擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。✅ 专业定制毕业设计✅ 具体问题可以私信或查看文章底部二维码本系统的核心设计内容在于构建一个以单片机…

作者头像 李华