# health-check **Repository Path**: coldco519/health-check ## Basic Information - **Project Name**: health-check - **Description**: 进程守护、健康检查 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-04-09 - **Last Updated**: 2026-04-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Health Check - 企业级进程监控守护系统 [![Go Version](https://img.shields.io/badge/Go-1.19%2B-blue.svg)](https://golang.org) [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![Build Status](https://img.shields.io/badge/Build-Passing-brightgreen.svg)](https://github.com/your-repo/health-check) **Health Check** 是一个用Go语言开发的企业级进程监控和守护系统,专为生产环境设计。提供高可用性、智能告警、自动恢复等核心功能,支持大规模服务器集群部署。 ## 🏆 核心优势 - **🚀 高性能**:基于Go语言,低资源消耗,支持数千进程并发监控 - **🛡️ 高可靠**:多重故障恢复机制,确保监控服务永不中断 - **📊 智能告警**:基于规则的智能通知,避免告警轰炸 - **🔧 零停机**:配置文件热重载,无需重启服务 - **📈 企业级**:支持多服务器部署,统一监控管理 - **🎯 易部署**:一键安装脚本,5分钟完成生产环境部署 ## 🎯 适用场景 ### 🏢 企业生产环境 - **Web服务集群**:nginx、Apache、Tomcat、IIS等Web服务器 - **数据库集群**:MySQL、PostgreSQL、Redis、MongoDB、Elasticsearch - **应用服务集群**:Java Spring Boot、Python Django/Flask、Node.js Express - **微服务架构**:Docker容器、Kubernetes Pod、服务网格 - **消息队列**:RabbitMQ、Kafka、ActiveMQ、RocketMQ - **缓存服务**:Redis Cluster、Memcached、Hazelcast ### 🛠️ 开发运维环境 - **CI/CD流水线**:Jenkins、GitLab CI、GitHub Actions集成 - **开发环境**:本地开发服务器、测试数据库、Mock服务 - **测试环境**:自动化测试服务、性能测试工具 - **预生产环境**:灰度发布、A/B测试服务 ### 🏗️ 基础设施监控 - **系统服务**:systemd服务、Windows服务、守护进程 - **定时任务**:cron任务、Windows计划任务 - **批处理作业**:ETL任务、数据同步、报表生成 - **第三方服务**:API服务、第三方集成服务 ## ⚡ 快速体验 ```bash # 1. 克隆项目 git clone https://github.com/your-repo/health-check.git cd health-check # 2. 编译程序 go build -o health-check cmd/main.go # 3. 创建配置文件 ./health-check -create-config # 4. 启动监控(测试模式) ./health-check -daemon # 5. 查看监控状态 ./health-check -list-groups ``` **5分钟快速部署到生产环境:** ```bash # 一键安装为系统服务 sudo ./scripts/install.sh # 启动服务 sudo systemctl start health-check # 设置开机自启 sudo systemctl enable health-check ``` ## 🚀 功能特性 ### 🔍 核心监控能力 - **多维度进程检测**:支持进程名、PID、命令行参数匹配 - **进程组批量监控**:支持模式生成和手动指定两种方式 - **实时资源监控**:CPU使用率、内存占用、文件描述符等 - **进程生命周期跟踪**:启动时间、运行时长、重启次数统计 - **智能故障检测**:基于退出码的故障分类和恢复策略 ### 🛡️ 高可用保障 - **自动故障恢复**:进程异常时自动重启,支持重试机制 - **多重保护机制**:程序崩溃恢复、系统服务重启、看门狗监控 - **零停机配置更新**:配置文件热重载,无需重启服务 - **配置备份回滚**:自动备份配置,错误时自动回滚 ### 📊 智能告警系统 - **飞书通知**:支持飞书机器人通知,卡片消息和文本消息 - **智能告警规则**:基于时间、频率、严重程度的告警策略 - **告警聚合**:避免告警轰炸,提供清晰的告警摘要 - **告警升级**:根据问题持续时间自动升级告警级别 ### 🏢 企业级特性 - **多服务器部署**:支持集群环境,统一监控管理 - **服务器身份标识**:自定义服务器标识,便于多环境管理 - **多配置文件系统**:模块化配置管理,支持团队协作 - **配置语法检查**:启动前验证配置正确性,避免配置错误 - **详细日志记录**:结构化日志,支持日志分析和审计 ### 🔧 运维友好 - **命令行工具**:完整的CLI工具集,支持脚本化运维 - **系统服务集成**:支持systemd、Windows服务等系统服务 - **性能优化**:低资源消耗,支持大规模部署 - **跨平台支持**:Linux、macOS、Windows全平台支持 ## 🚀 快速开始 ### 📋 系统要求 | 组件 | 要求 | 说明 | |------|------|------| | **操作系统** | Linux 2.6+, macOS 10.12+, Windows 10+ | 支持主流操作系统 | | **Go版本** | Go 1.19+ | 仅编译时需要,运行时无需Go环境 | | **内存** | 最小64MB,推荐256MB+ | 支持数千进程监控 | | **CPU** | 单核心即可 | 低CPU消耗设计 | | **磁盘** | 最小100MB | 包含程序、配置、日志 | | **权限** | 安装系统服务需要root/admin权限 | 运行时可使用普通用户 | | **网络** | 出站HTTPS访问 | 用于飞书等通知服务 | ### 📦 安装方式 #### 🛠️ 方式一:源码编译(开发环境推荐) ```bash # 1. 克隆项目 git clone https://github.com/your-repo/health-check.git cd health-check # 2. 安装依赖 go mod tidy # 3. 编译程序(支持交叉编译) # Linux AMD64 GOOS=linux GOARCH=amd64 go build -o health-check-linux-amd64 cmd/main.go # Windows AMD64 GOOS=windows GOARCH=amd64 go build -o health-check-windows-amd64.exe cmd/main.go # macOS AMD64 GOOS=darwin GOARCH=amd64 go build -o health-check-darwin-amd64 cmd/main.go # 4. 创建配置文件 ./health-check-linux-amd64 -create-config # 5. 测试运行 ./health-check-linux-amd64 -daemon ``` #### 🚀 方式二:预编译二进制(生产环境推荐) ```bash # 1. 下载预编译版本(选择对应平台) # Linux AMD64 wget https://github.com/your-repo/health-check/releases/latest/download/health-check-linux-amd64 chmod +x health-check-linux-amd64 mv health-check-linux-amd64 /usr/local/bin/health-check # Windows AMD64 # 下载 health-check-windows-amd64.exe # macOS AMD64 # 下载 health-check-darwin-amd64 # 2. 创建配置文件 health-check -create-config # 3. 安装为系统服务 sudo ./scripts/install.sh ``` #### 📋 方式三:包管理器安装(未来支持) ```bash # Ubuntu/Debian sudo apt install health-check # CentOS/RHEL sudo yum install health-check # macOS brew install health-check # Windows choco install health-check ``` ## 🚀 完整部署指南 ###步骤 1: 准备工作 #### 1.1 编译程序 ```bash # 在开发机上编译 Linux 版本 cd /path/to/health-check GOOS=linux GOARCH=amd64 go build -o health-check-linux cmd/main.go # 或者使用提供的脚本 ./build_linux.sh ``` #### 1.2 准备配置文件 ```bash # 确保配置文件目录结构完整 ls -la configs/ # 应该看到: # - config.yaml # 主配置文件 # - processes/ # 进程配置目录 # - SK2_DY_61191.yaml # - SK2_WX_4001.yaml # - ... # 检查配置文件语法 ./health-check --check-config --config configs/config.yaml ``` **⚠️ 配置文件格式检查清单:** - [ ] `configs/processes/` 目录中的每个文件都使用 `process:` 作为顶级键 - [ ] 每个文件只包含一个进程配置 - [ ] 所有文件以 `.yaml` 结尾 - [ ] 进程名称不重复 - [ ] 工作目录路径正确 - [ ] 重启命令可执行 ### 步骤 2: 上传到服务器 #### 2.1 创建安装包 ```bash # 创建临时目录 mkdir -p /tmp/health-check-deploy # 复制必要文件 cp health-check-linux /tmp/health-check-deploy/health-check cp -r configs /tmp/health-check-deploy/ cp -r scripts /tmp/health-check-deploy/ # 设置执行权限 chmod +x /tmp/health-check-deploy/health-check chmod +x /tmp/health-check-deploy/scripts/*.sh # 打包(可选) cd /tmp tar -czf health-check-deploy.tar.gz health-check-deploy/ ``` #### 2.2 上传到服务器 ```bash # 方式1: 使用 scp scp /tmp/health-check-deploy.tar.gz root@your-server:/tmp/ # 方式2: 使用 rsync(推荐,支持断点续传) rsync -avz --progress /tmp/health-check-deploy/ root@your-server:/opt/health-check/ # 方式3: 直接复制目录 scp -r /tmp/health-check-deploy/* root@your-server:/opt/health-check/ ``` ### 步骤 3: 服务器端安装 #### 3.1 解压并准备 ```bash # SSH 登录到服务器 ssh root@your-server # 解压文件(如果使用tar.gz) cd /tmp tar -xzf health-check-deploy.tar.gz # 移动到安装目录 mkdir -p /opt/health-check mv health-check-deploy/* /opt/health-check/ cd /opt/health-check # 确认文件权限 chmod +x health-check chmod +x scripts/*.sh ``` #### 3.2 验证配置 ```bash # 检查配置文件 ./health-check --check-config --config configs/config.yaml # 预期输出: # === 配置文件语法检查 === # ✅ 配置文件语法正确: configs/config.yaml # 📊 配置统计: # - 全局配置: ✅ # - 进程配置: X 个 # - 日志配置: ✅ # - 通知配置: ✅ 已启用 # - 启用进程: X 个 # # 🎉 配置文件检查通过,可以安全使用! ``` #### 3.3 安装为系统服务 ```bash # 使用安装脚本(推荐) cd /opt/health-check/scripts ./install.sh # 安装脚本会自动: # 1. 检查并构建程序(如果需要) # 2. 创建安装目录和配置 # 3. 安装 systemd 服务 # 4. 设置开机自启 ``` #### 3.4 启动服务 ```bash # 启动服务 systemctl start health-check # 查看状态 systemctl status health-check # 查看日志(实时) journalctl -u health-check -f # 查看最近100行日志 journalctl -u health-check -n 100 # 设置开机自启(如果安装脚本没有自动设置) systemctl enable health-check ``` ### 步骤 4: 验证部署 #### 4.1 检查服务状态 ```bash # 查看服务状态 systemctl status health-check # 应该看到: # ● health-check.service - Health Check Process Monitor # Loaded: loaded (/etc/systemd/system/health-check.service; enabled; ...) # Active: active (running) since ... ``` #### 4.2 检查进程监控 ```bash # 列出所有进程配置 /opt/health-check/health-check --list-process-files --config /opt/health-check/configs/config.yaml # 检查进程组状态(如果有进程组) /opt/health-check/health-check --list-groups --config /opt/health-check/configs/config.yaml ``` #### 4.3 测试通知功能 ```bash # 测试飞书通知 /opt/health-check/health-check --test-notify --config /opt/health-check/configs/config.yaml # 检查是否收到测试消息 ``` ### 步骤 5: 日常运维 #### 5.1 服务管理命令 ```bash # 启动服务 systemctl start health-check # 停止服务 systemctl stop health-check # 重启服务 systemctl restart health-check # 重新加载配置(不重启服务) # 配置文件支持热更新,直接修改即可 # 查看服务状态 systemctl status health-check # 查看日志 journalctl -u health-check -f # 实时查看 journalctl -u health-check -n 100 # 查看最近100行 journalctl -u health-check --since "1 hour ago" # 查看最近1小时 ``` #### 5.2 配置管理 ```bash cd /opt/health-check # 添加新的进程监控 vim configs/processes/new-process.yaml # 检查配置语法 ./health-check --check-config --config configs/config.yaml # 配置会自动重载,无需重启服务 # 查看日志确认重载成功 journalctl -u health-check -f | grep "CONFIG" ``` #### 5.3 进程控制 ```bash cd /opt/health-check # 启用/禁用进程监控 ./health-check --enable-process SK2_DY_61191 --config configs/config.yaml ./health-check --disable-process SK2_WX_4001 --config configs/config.yaml # 重启进程组 ./health-check --restart-group MY_GROUP --config configs/config.yaml ``` ### 步骤 6: 故障排查 #### 6.1 服务启动失败 ```bash # 查看详细错误信息 systemctl status health-check -l # 查看系统日志 journalctl -xe # 直接运行查看错误 cd /opt/health-check ./health-check --daemon --config configs/config.yaml ``` #### 6.2 配置错误 ```bash # 检查配置文件语法 ./health-check --check-config --config configs/config.yaml # 查看具体哪个文件有问题 ls -la configs/processes/ cat configs/processes/problematic-file.yaml # 常见错误: # 1. 使用了 `processes:` 而不是 `process:` # 2. 缩进不正确(使用Tab而不是空格) # 3. 进程名称为空 # 4. 文件权限问题 ``` #### 6.3 通知不工作 ```bash # 测试通知 ./health-check --test-notify --config configs/config.yaml # 检查网络连接 curl -X POST "https://open.feishu.cn/open-apis/bot/v2/hook/your-webhook-url" # 检查配置 grep -A 10 "feishu:" configs/config.yaml ``` ### 步骤 7: 卸载(如果需要) ```bash # 使用卸载脚本 cd /opt/health-check/scripts ./uninstall.sh # 手动卸载 systemctl stop health-check systemctl disable health-check rm -f /etc/systemd/system/health-check.service systemctl daemon-reload rm -rf /opt/health-check ``` ## 📋 部署检查清单 ### 部署前检查 - [ ] 已在本地编译 Linux 版本二进制文件 - [ ] 已准备好所有配置文件 - [ ] 配置文件语法检查通过 - [ ] 所有进程配置文件使用正确的格式(`process:` 而不是 `processes:`) - [ ] 已配置飞书 webhook 和 secret - [ ] 已设置正确的工作目录和重启命令 - [ ] 已测试配置文件热更新功能 ### 部署后检查 - [ ] systemd 服务启动成功 - [ ] 服务设置为开机自启 - [ ] 进程监控正常工作 - [ ] 能够接收到测试通知 - [ ] 日志文件正常写入 - [ ] 配置文件修改后能自动重载 - [ ] 进程停止后能自动重启 - [ ] 资源监控正常(如果配置了) ## 🔧 高级配置 ### 多服务器部署 当部署到多台服务器时,为每台服务器设置不同的 `server_id`: ```yaml # 服务器1: /opt/health-check/configs/config.yaml global: server_id: "web-01(192.168.1.10)" # 服务器2: /opt/health-check/configs/config.yaml global: server_id: "web-02(192.168.1.11)" # 服务器3: /opt/health-check/configs/config.yaml global: server_id: "db-01(192.168.1.20)" ``` 所有服务器可以使用同一个飞书群接收通知,`server_id` 会显示在通知消息中。 ### 性能优化建议 ```yaml # 根据进程重要性设置不同的检查间隔 # configs/processes/critical-service.yaml process: name: critical-service check_interval: 10s # 关键服务:10秒检查一次 # configs/processes/normal-service.yaml process: name: normal-service check_interval: 30s # 普通服务:30秒检查一次 # configs/processes/backup-service.yaml process: name: backup-service check_interval: 300s # 备份服务:5分钟检查一次 ``` ## 📖 使用指南 ### 1. 创建配置文件 ```bash # 创建默认配置文件 ./health-check -create-config # 创建指定路径的配置文件 ./health-check -create-config -config /path/to/config.yaml # 检查配置文件语法 ./health-check -check-config ``` ### 2. 运行模式 #### 守护进程模式(生产环境推荐) ```bash # 使用默认配置文件运行守护进程 ./health-check -daemon # 使用指定配置文件运行守护进程 ./health-check -daemon -config /path/to/config.yaml # 设置监控间隔 ./health-check -daemon -interval 10s ``` #### 单次检查模式(测试和调试) ```bash # 按进程名检查 ./health-check -name "nginx" # 按PID检查 ./health-check -pid 1234 # 持续监控进程(前台运行) ./health-check -name "nginx" -monitor # 列出所有进程 ./health-check -list ``` ### 3. 进程组管理 ```bash # 列出所有进程组 ./health-check -list-groups # 显示进程组状态 ./health-check -group-status DEMO_GROUP # 重启进程组(只重启不在运行的进程) ./health-check -restart-group DEMO_GROUP # 强制重启进程组(重启所有进程) ./health-check -restart-group-all DEMO_GROUP ``` ### 4. 进程控制 ```bash # 启用指定进程监控 ./health-check -enable-process DEMO # 禁用指定进程监控 ./health-check -disable-process DEMO # 启用指定进程组监控 ./health-check -enable-group DEMO_GROUP # 禁用指定进程组监控 ./health-check -disable-group DEMO_GROUP ``` ### 5. 多配置文件管理 ```bash # 列出所有进程配置文件 ./health-check -list-process-files # 创建新的进程配置文件 ./health-check -add-process-file redis # 删除进程配置文件 ./health-check -remove-process-file redis # 检查所有配置文件的语法 ./health-check -check-config ``` ### 6. 其他功能 ```bash # 显示重启信息 ./health-check -restart-info # 测试通知功能 ./health-check -test-notify ``` ### 命令行参数 #### 基础监控命令 - `-name`: 要监控的进程名称 - `-pid`: 要监控的进程PID - `-monitor`: 持续监控模式 - `-interval`: 监控间隔时间(默认5秒) - `-list`: 列出所有进程 - `-config`: 配置文件路径 - `-daemon`: 守护进程模式 #### 配置文件管理 - `-create-config`: 创建默认配置文件 - `-check-config`: 检查配置文件语法 - `-list-process-files`: 列出所有进程配置文件 - `-add-process-file`: 添加进程配置文件(进程名称) - `-remove-process-file`: 删除进程配置文件(进程名称) #### 进程组管理 - `-list-groups`: 列出所有进程组 - `-group-status`: 显示指定进程组状态 - `-restart-group`: 重启进程组(只重启不在运行的进程) - `-restart-group-all`: 强制重启进程组(重启所有进程) #### 进程控制 - `-enable-process`: 启用指定进程监控 - `-disable-process`: 禁用指定进程监控 - `-enable-group`: 启用指定进程组监控 - `-disable-group`: 禁用指定进程组监控 #### 其他功能 - `-restart-info`: 显示重启信息 - `-test-notify`: 测试通知功能 ## 🏗️ 系统架构 ### 核心架构图 ```mermaid graph TB A[Health Check 主程序] --> B[配置管理器] A --> C[进程监控器] A --> D[通知管理器] A --> E[日志管理器] B --> F[主配置文件] B --> G[进程配置文件] B --> H[配置监控器] C --> I[进程检测器] C --> J[进程组管理器] C --> K[资源监控器] D --> L[飞书通知] D --> M[告警聚合器] D --> N[智能通知] E --> O[结构化日志] E --> P[日志轮转] Q[系统服务] --> A R[命令行工具] --> A S[配置文件] --> B ``` ### 🔧 核心组件 | 组件 | 功能 | 技术特点 | |------|------|----------| | **配置管理器** | 配置文件加载、验证、热重载 | YAML解析、文件监控、配置合并 | | **进程监控器** | 进程状态检测、资源监控 | 多维度检测、实时监控、批量处理 | | **通知管理器** | 多渠道告警、智能通知 | HTTP客户端、消息聚合、规则引擎 | | **日志管理器** | 结构化日志、日志轮转 | JSON格式、异步写入、自动轮转 | ## 📊 性能指标 ### 🚀 性能基准 | 指标 | 数值 | 说明 | |------|------|------| | **监控进程数** | 10,000+ | 单实例支持监控进程数量 | | **检测延迟** | < 100ms | 进程状态检测响应时间 | | **内存占用** | < 50MB | 监控1000个进程的内存消耗 | | **CPU占用** | < 1% | 单核心CPU使用率 | | **启动时间** | < 2s | 从启动到开始监控的时间 | | **配置重载** | < 500ms | 配置文件热重载时间 | ### 📈 扩展性 - **水平扩展**:支持多服务器部署,每台服务器独立监控 - **垂直扩展**:单服务器可监控数千进程 - **集群支持**:支持大规模服务器集群统一管理 ## 📁 项目结构 ``` health-check/ ├── cmd/ # 主程序入口 │ └── main.go ├── internal/ # 内部包 │ ├── process/ # 进程监控模块 │ │ ├── monitor.go │ │ └── group.go # 进程组管理 │ ├── config/ # 配置管理模块 │ │ ├── config.go │ │ ├── loader.go │ │ └── watcher.go # 配置文件监控 │ ├── monitor/ # 监控管理器 │ │ └── manager.go │ ├── logger/ # 日志模块 │ │ └── logger.go │ ├── notification/ # 通知模块 │ │ ├── feishu.go │ │ ├── manager.go │ │ ├── card.go # 飞书卡片消息 │ │ ├── aggregator.go # 消息聚合 │ │ └── smart.go # 智能通知 │ └── identity/ # 服务器身份标识 │ └── server.go ├── configs/ # 配置文件目录 │ ├── config.yaml # 主配置文件 │ ├── processes/ # 进程配置文件目录 │ │ ├── nginx.yaml # 单个进程配置 │ │ ├── redis.yaml # 单个进程配置 │ │ └── README.md # 使用说明 │ └── backups/ # 配置备份目录 ├── scripts/ # 部署脚本 │ ├── install.sh # 安装脚本 │ ├── uninstall.sh # 卸载脚本 │ ├── start.sh # 启动脚本 │ └── health-check.service # systemd服务文件 ├── logs/ # 日志目录 ├── go.mod # Go模块文件 ├── go.sum # Go依赖锁定文件 └── README.md # 项目说明 ``` ## 进程组功能 ### 配置方式 #### 1. 模式生成方式 使用 `group_pattern` + `group_start` + `group_end` 自动生成进程组成员: **文件:`configs/processes/DEMO_GROUP.yaml`** ```yaml process: name: "DEMO_GROUP" enabled: true is_group: true group_pattern: "DEMO%d" # 生成 DEMO1, DEMO2, ..., DEMO10 group_start: 1 group_end: 10 auto_restart: true work_dir: "/tmp/process/demo%d" # 支持%d模式替换 restart_cmd: "nohup ./DEMO%d > /tmp/process/demo%d/demo%d.log 2>&1 &" ``` #### 2. 手动指定方式 使用 `group_members` 手动指定进程组成员: **文件:`configs/processes/WEB_SERVERS.yaml`** ```yaml process: name: "WEB_SERVERS" enabled: true is_group: true group_members: ["nginx", "apache", "httpd"] auto_restart: true work_dir: "/var/log/%s" # 支持%s模式替换 restart_cmd: "systemctl restart %s" ``` ### 模式替换 - **`%d`**: 替换为成员名称中的数字部分(适用于模式生成) - **`%s`**: 替换为完整的成员名称(适用于手动指定) ### 状态监控 进程组提供整体状态监控: - **healthy**: 所有成员正常运行 - **warning**: 部分成员停止运行 - **critical**: 存在错误或所有成员停止 ## 配置文件示例 ### 主配置文件 (`configs/config.yaml`) ```yaml # 全局配置 global: check_interval: 10s timeout: 10s retry_count: 3 retry_delay: 5s server_id: "web-server-01(192.168.1.100)" # 自定义服务器标识 # 进程监控配置 # 注意:所有进程配置都在 configs/processes/ 目录中定义 # 日志配置 logging: level: "info" format: "json" output: "file" file_path: "./logs/health-check.log" # 通知配置 notify: enabled: true feishu: enabled: true webhook_url: "https://open.feishu.cn/open-apis/bot/v2/hook/xxx" secret: "your_secret" use_card: true # 使用卡片消息 smart_notify: true # 启用智能通知 ``` ### 进程配置文件示例 #### 单个进程配置 (`configs/processes/nginx.yaml`) ```yaml process: name: "nginx" enabled: true auto_restart: true work_dir: "/etc/nginx" restart_cmd: "systemctl restart nginx" ``` #### 进程组配置 - 模式生成 (`configs/processes/DEMO_GROUP.yaml`) ```yaml process: name: "DEMO_GROUP" enabled: true is_group: true group_pattern: "DEMO%d" group_start: 1 group_end: 10 auto_restart: true work_dir: "/tmp/process/demo%d" restart_cmd: "nohup ./DEMO%d > /tmp/process/demo%d/demo%d.log 2>&1 &" ``` #### 进程组配置 - 手动指定 (`configs/processes/WEB_SERVERS.yaml`) ```yaml process: name: "WEB_SERVERS" enabled: true is_group: true group_members: ["nginx", "apache", "httpd"] auto_restart: true work_dir: "/var/log/%s" restart_cmd: "systemctl restart %s" ``` ## 📁 多配置文件系统 ### 💡 设计理念 Health Check 采用**模块化配置管理**设计,将进程配置从主配置文件中分离出来,每个进程一个独立的配置文件。这种设计带来以下优势: - ✅ **配置隔离**:单个进程配置错误不影响其他进程 - ✅ **易于维护**:添加/删除进程只需添加/删除文件 - ✅ **团队协作**:多人可同时编辑不同的进程配置 - ✅ **版本控制友好**:每个配置文件有独立的 Git 历史 - ✅ **配置热更新**:修改文件后自动生效,无需重启 ### 📂 目录结构详解 ``` health-check/ ├── health-check # 主程序(二进制文件) ├── configs/ # 配置文件目录 │ ├── config.yaml # 🔹 主配置文件 │ │ # - 全局配置(监控间隔、重试次数等) │ │ # - 日志配置(日志级别、输出格式等) │ │ # - 通知配置(飞书webhook等) │ ├── processes/ # 🔹 进程配置目录 │ │ ├── SK2_DY_61191.yaml # 抖音进程配置 │ │ ├── SK2_WX_4001.yaml # 微信进程配置 │ │ ├── SK2_ZFB_4000.yaml # 支付宝进程配置 │ │ ├── SK2_COMMON_4002.yaml # 通用进程配置 │ │ └── SK2_TB_61190.yaml # 淘宝进程配置 │ └── backups/ # 🔹 配置备份目录(自动生成) │ └── config_backup_*.yaml # 配置变更时自动备份 ├── logs/ # 日志目录 │ └── health-check.log # 运行日志 └── scripts/ # 部署脚本目录 ├── install.sh # 安装脚本 ├── uninstall.sh # 卸载脚本 ├── start.sh # 启动脚本 └── health-check.service # systemd 服务文件 ``` ### ⚙️ 配置文件格式说明 #### 1️⃣ 主配置文件 (`configs/config.yaml`) 主配置文件包含**全局配置**、**日志配置**和**通知配置**,但**不包含进程配置**(所有进程配置都在 `configs/processes/` 目录中)。 ```yaml # configs/config.yaml # ====================== # 全局配置 # ====================== global: check_interval: 25s # 默认检查间隔(每个进程可单独设置) timeout: 10s # 默认超时时间 retry_count: 3 # 重试次数 retry_delay: 5s # 重试延迟 server_id: "" # 自定义服务器标识(留空则自动获取主机名和IP) # 示例:server_id: "web-server-01(192.168.1.100)" # ====================== # 进程监控配置 # ====================== # 注意:所有进程配置都在 configs/processes/ 目录中定义 # 每个进程一个独立的 .yaml 文件 # ====================== # 日志配置 # ====================== logging: level: "info" # 日志级别: debug, info, warn, error format: "text" # 日志格式: text, json output: "file" # 输出方式: stdout, file file_path: "./logs/health-check.log" # 日志文件路径 max_size: 100 # 单个日志文件最大大小(MB) max_backups: 3 # 保留的日志文件数量 max_age: 7 # 日志文件保留天数 # ====================== # 通知配置 # ====================== notify: enabled: true # 是否启用通知 # 飞书通知配置 feishu: enabled: true webhook_url: "https://open.feishu.cn/open-apis/bot/v2/hook/your-webhook-url" secret: "your-secret-key" # 飞书机器人签名密钥(可选) use_card: true # 使用卡片消息(推荐) smart_notify: true # 启用智能通知(避免告警轰炸) # 智能通知规则配置 rules: # 进程告警规则 - 当进程停止运行时发送告警 process_alert: message_type: "process_alert" min_interval: "2s" # 最小通知间隔:2秒内不重复发送 max_frequency: 20 # 每小时最大通知次数 quiet_hours: # 静默时间段(夜间不发送告警) - start: "22:00" # 晚上10点 end: "08:00" # 早上8点 escalation_time: "20s" # 升级时间 enabled: true # 进程重启规则 - 当进程重启时发送通知 process_restart: message_type: "process_restart" min_interval: "10s" max_frequency: 20 quiet_hours: - start: "22:00" end: "08:00" escalation_time: "20s" enabled: true # 进程恢复规则 - 当进程恢复正常时发送通知 process_recovery: message_type: "process_recovery" min_interval: "30s" max_frequency: 30 quiet_hours: [] # 无静默时间,恢复通知随时发送 escalation_time: "0s" enabled: true # 系统告警规则 - 当系统资源超限时发送告警 system_alert: message_type: "system_alert" min_interval: "20s" max_frequency: 5 quiet_hours: - start: "22:00" end: "08:00" escalation_time: "20s" enabled: true ``` #### 2️⃣ 进程配置文件 (`configs/processes/*.yaml`) 每个进程一个独立的配置文件,文件名建议使用进程名(如 `SK2_DY_61191.yaml`)。 **⚠️ 重要格式说明:** - 文件必须使用 `process:` 作为顶级键(**不是** `processes:`) - 每个文件只包含一个进程的配置 - 文件必须以 `.yaml` 或 `.yml` 结尾 ##### 单个进程配置示例 ```yaml # configs/processes/SK2_DY_61191.yaml process: name: SK2_DY_61191 # 进程名称(必填) enabled: true # 是否启用监控(必填) auto_restart: true # 进程停止时是否自动重启 work_dir: /extend/deploy/pre-sdkv2-api/douyin/shortcut/61191 # 工作目录 restart_cmd: (nohup ./SK2_DY_61191 douyin >/dev/null 2>error.log < /dev/null &) 2>/dev/null # 重启命令 check_interval: 10s # 检查间隔(可选,默认使用全局配置) # 资源限制配置(可选) resource_limits: max_cpu_percent: 80.0 # 最大CPU使用率(百分比) max_memory_percent: 90.0 # 最大内存使用率(百分比) max_memory_mb: 1024 # 最大内存使用量(MB) check_interval: 30s # 资源检查间隔 # 退出码配置(可选) exit_code_config: restart_on_exit_codes: [1, 2, 126, 127] # 这些退出码会触发重启 no_restart_on_exit_codes: [0] # 这些退出码不重启 default_restart: true # 默认是否重启 ``` #### 进程组配置文件 ```yaml # configs/processes/WEB_SERVERS.yaml process: name: "WEB_SERVERS" enabled: true is_group: true group_members: - "nginx" - "apache" - "httpd" auto_restart: true work_dir: "/var/log/%s" restart_cmd: "systemctl restart %s" check_interval: 10s ``` ### 管理命令 ```bash # 列出所有进程配置文件 ./health-check --list-process-files --config configs/config.yaml # 创建新的进程配置文件 ./health-check --add-process-file redis --config configs/config.yaml # 删除进程配置文件 ./health-check --remove-process-file redis --config configs/config.yaml # 检查所有配置文件的语法 ./health-check --check-config --config configs/config.yaml ``` ### 🔄 配置加载机制 **重要说明**:本系统采用纯目录化配置方式 ### 配置文件监控 - **自动检测变化**:程序会监控配置文件的变化 - **自动重新加载**:检测到变化后自动重新加载配置 - **自动备份**:配置变化前自动备份当前配置 - **自动回滚**:配置错误时自动回滚到备份版本 - **错误隔离**:单个配置文件错误不影响其他进程 ### 优势 - ✅ **模块化管理**:每个进程一个文件,便于维护 - ✅ **错误隔离**:单个配置文件错误不影响其他进程 - ✅ **版本控制友好**:可以单独跟踪每个进程的配置变更 - ✅ **团队协作**:不同团队成员可以管理不同的进程配置 - ✅ **向后兼容**:完全保留主配置文件的功能 ## 开发计划 - [x] 基础进程检测功能 - [x] 配置文件支持 - [x] 监控管理器 - [x] 自动重启功能 - [x] 日志系统 - [x] 飞书通知集成 - [x] 系统服务安装 - [x] 自动崩溃恢复 - [x] **进程组监控功能** - [x] **飞书卡片消息** - [x] **消息聚合和智能通知** - [x] **服务器身份标识** - [x] **进程资源阈值监控** - [x] **进程启动时间监控** - [x] **进程退出码分析** - [x] **智能通知规则配置** - [x] **多配置文件系统** - [x] **配置文件监控和自动重载** - [x] **配置文件备份和回滚** - [x] **配置文件语法检查** - [ ] Docker支持 ## 示例输出 ### 单次检查 ``` 进程信息: 名称: nginx PID: 1234 状态: S 运行中: true CPU使用率: 0.50% 内存使用率: 1.20% ``` ### 进程组状态 ``` === 进程组状态: DEMO_GROUP === 总成员数: 10 运行中: 8 已停止: 2 错误: 0 整体状态: warning 成员状态: DEMO1: 运行中 (PID: 1234, CPU: 0.50%, 内存: 1.20%) DEMO2: 运行中 (PID: 1235, CPU: 0.45%, 内存: 1.18%) DEMO3: 已停止 DEMO4: 运行中 (PID: 1237, CPU: 0.52%, 内存: 1.22%) ... ``` ### 持续监控 ``` [2024-01-15 10:30:00] nginx - PID: 1234, 状态: 运行中, CPU: 0.50%, 内存: 1.20% [2024-01-15 10:30:05] nginx - PID: 1234, 状态: 运行中, CPU: 0.45%, 内存: 1.18% [2024-01-15 10:30:10] nginx - PID: 1234, 状态: 运行中, CPU: 0.52%, 内存: 1.22% ``` ### 飞书通知示例 ``` 🔔 进程告警 服务器: web-server-01(192.168.1.100) 进程: DEMO_GROUP 状态: warning 详情: 进程组 DEMO_GROUP 状态异常: 运行中 8/10, 已停止 2, 错误 0 时间: 2024-01-15 10:30:00 ``` ### 多配置文件管理示例 #### 列出进程配置文件 ``` === 进程配置文件列表 === 📁 进程配置目录: configs/processes 📄 找到 3 个进程配置文件: 1. nginx.yaml - 进程名: nginx - 状态: ✅ 启用 - 类型: 单个进程 2. redis.yaml - 进程名: redis - 状态: ✅ 启用 - 类型: 单个进程 3. WEB_SERVERS.yaml - 进程名: WEB_SERVERS - 状态: ✅ 启用 - 类型: 进程组 ``` #### 配置文件语法检查 ``` === 配置文件语法检查 === ✅ 配置文件语法正确: configs/config.yaml 📊 配置统计: - 全局配置: ✅ - 进程配置: 4 个 - 日志配置: ✅ - 通知配置: ✅ 已启用 - 启用进程: 4 个 🎉 配置文件检查通过,可以安全使用! ``` #### 配置文件监控日志 ``` [CONFIG] 开始监控配置文件: configs/config.yaml [CONFIG] 配置文件已备份到: configs/backups/config_backup_20240925_100204.yaml [CONFIG] 配置文件已更新: configs/config.yaml [CONFIG] 配置已重新加载,监控 4 个进程 ``` ### 智能通知规则配置 智能通知功能可以避免消息轰炸,根据时间、频率等规则控制通知发送: ```yaml notify: feishu: smart_notify: true # 启用智能通知 rules: # 进程告警规则 process_alert: min_interval: "2s" # 最小通知间隔:2秒内不重复发送 max_frequency: 20 # 每小时最大通知次数 quiet_hours: # 静默时间:晚上10点到早上8点 - start: "22:00" end: "08:00" escalation_time: "5m" # 升级时间:5分钟后重置频率限制 enabled: true # 进程恢复规则 process_recovery: min_interval: "30s" # 最小通知间隔:30秒内不重复发送 max_frequency: 30 # 每小时最大通知次数 quiet_hours: [] # 无静默时间:恢复通知随时发送 escalation_time: "0s" # 不升级:恢复通知不需要升级机制 enabled: true ``` #### 智能通知规则说明 - **min_interval**: 最小通知间隔,防止短时间内重复发送相同类型的通知 - **max_frequency**: 每小时最大通知次数,防止通知过于频繁 - **quiet_hours**: 静默时间,在指定时间段内不发送通知(如夜间) - **escalation_time**: 升级时间,如果问题持续超过此时间,重置频率限制 - **enabled**: 是否启用此规则 #### 支持的消息类型 - `process_alert`: 进程告警(进程停止运行) - `process_restart`: 进程重启通知 - `process_recovery`: 进程恢复通知 - `system_alert`: 系统告警(资源超限) ## 🏗️ 实际应用场景 ### 场景1:Web服务器集群监控 ```yaml # configs/processes/nginx.yaml process: name: "nginx" enabled: true auto_restart: true work_dir: "/etc/nginx" restart_cmd: "systemctl restart nginx" check_interval: 30s resource_limits: max_cpu_percent: 80.0 max_memory_percent: 90.0 # configs/processes/apache.yaml process: name: "apache2" enabled: true auto_restart: true work_dir: "/etc/apache2" restart_cmd: "systemctl restart apache2" check_interval: 30s ``` ### 场景2:微服务应用监控 ```yaml # configs/processes/microservices.yaml process: name: "MICRO_SERVICES" enabled: true is_group: true group_members: - "user-service" - "order-service" - "payment-service" - "notification-service" auto_restart: true work_dir: "/opt/services/%s" restart_cmd: "systemctl restart %s" check_interval: 15s ``` ### 场景3:数据库服务监控 ```yaml # configs/processes/databases.yaml process: name: "DATABASES" enabled: true is_group: true group_members: - "mysql" - "redis-server" - "mongod" auto_restart: true work_dir: "/var/lib/%s" restart_cmd: "systemctl restart %s" check_interval: 60s resource_limits: max_cpu_percent: 70.0 max_memory_percent: 85.0 ``` ### 场景4:开发环境服务监控 ```yaml # configs/processes/dev-services.yaml process: name: "DEV_SERVICES" enabled: true is_group: true group_pattern: "dev-service-%d" group_start: 1 group_end: 5 auto_restart: true work_dir: "/home/dev/services/dev-service-%d" restart_cmd: "cd /home/dev/services/dev-service-%d && ./start.sh" check_interval: 10s ``` ## 🎯 最佳实践 ### 1. 生产环境部署 ```bash # 1. 安装为系统服务 sudo ./scripts/install.sh # 2. 设置开机自启 sudo systemctl enable health-check # 3. 配置日志轮转 sudo logrotate -f /etc/logrotate.d/health-check # 4. 设置监控告警 # 在飞书中配置告警群组,确保关键人员能及时收到通知 ``` ### 2. 多服务器部署 ```yaml # 每台服务器配置不同的 server_id global: server_id: "web-server-01(192.168.1.100)" # 或 server_id: "db-server-02(192.168.1.101)" # 或 server_id: "app-server-03(192.168.1.102)" ``` ### 3. 配置文件管理 ```bash # 使用多配置文件系统 mkdir -p configs/processes # 为每个服务创建独立配置文件 ./health-check -add-process-file nginx ./health-check -add-process-file mysql ./health-check -add-process-file redis # 定期检查配置语法 ./health-check -check-config ``` ### 4. 监控策略 ```yaml # configs/processes/nginx.yaml - Web服务器:30秒检查一次 process: name: "nginx" check_interval: 30s # configs/processes/mysql.yaml - 数据库:60秒检查一次 process: name: "mysql" check_interval: 60s # configs/processes/redis.yaml - 缓存:15秒检查一次 process: name: "redis" check_interval: 15s ``` ### 5. 告警配置 ```yaml # 配置智能通知,避免告警轰炸 notify: feishu: smart_notify: true rules: process_alert: min_interval: "5m" # 5分钟内不重复告警 max_frequency: 10 # 每小时最多10次告警 quiet_hours: # 夜间静默 - start: "22:00" end: "08:00" ``` ## 🔌 集成指南 ### 📱 飞书集成(当前唯一支持的通知渠道) #### 1. 创建飞书机器人 ```bash # 1. 在飞书群中添加机器人 # 2. 获取 Webhook URL 和 Secret # 3. 配置到 config.yaml notify: feishu: enabled: true webhook_url: "https://open.feishu.cn/open-apis/bot/v2/hook/xxx" secret: "your_secret" use_card: true smart_notify: true ``` #### 2. 测试通知 ```bash # 测试飞书通知功能 ./health-check -test-notify ``` #### 3. 通知功能说明 **当前支持的通知类型:** - ✅ 进程告警通知(进程停止运行) - ✅ 进程重启通知(进程重启成功) - ✅ 进程恢复通知(进程恢复正常) - ✅ 系统告警通知(资源超限等) **通知特性:** - ✅ 卡片消息和文本消息 - ✅ 智能通知规则(避免告警轰炸) - ✅ 消息聚合(相同类型消息合并) - ✅ 静默时间设置(夜间不发送告警) ### 🔧 CI/CD 集成 #### Jenkins 集成 ```groovy // Jenkinsfile pipeline { agent any stages { stage('Deploy') { steps { // 部署前禁用监控 sh './health-check -disable-process myapp' // 执行部署 sh './deploy.sh' // 部署后启用监控 sh './health-check -enable-process myapp' } } } } ``` #### GitLab CI 集成 ```yaml # .gitlab-ci.yml deploy: script: - ./health-check -disable-process myapp - ./deploy.sh - ./health-check -enable-process myapp ``` ### 📊 监控集成 #### 其他通知渠道(计划支持) ```yaml # 未来版本将支持的通知渠道 notify: # 钉钉通知(计划中) dingtalk: enabled: false webhook_url: "https://oapi.dingtalk.com/robot/send?access_token=xxx" secret: "your_secret" # 企业微信通知(计划中) wechat: enabled: false webhook_url: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx" # 邮件通知(计划中) email: enabled: false smtp_host: "smtp.example.com" smtp_port: 587 username: "your_email@example.com" password: "your_password" to: ["admin@example.com"] # 短信通知(计划中) sms: enabled: false provider: "aliyun" # 阿里云、腾讯云等 access_key: "your_access_key" secret_key: "your_secret_key" template_id: "your_template_id" phone_numbers: ["13800138000"] ``` #### Prometheus 集成(计划支持) ```yaml # 暴露 Prometheus 指标 global: prometheus: enabled: true port: 9090 path: /metrics ``` #### Grafana 仪表板(计划支持) ```json { "dashboard": { "title": "Health Check Dashboard", "panels": [ { "title": "Process Status", "type": "stat", "targets": [ { "expr": "health_check_process_status" } ] } ] } } ``` ## 📚 API 参考 ### 命令行接口 #### 基础命令 ```bash # 进程监控 ./health-check -name <进程名> # 检查指定进程 ./health-check -pid # 检查指定PID ./health-check -list # 列出所有进程 ./health-check -monitor # 持续监控模式 # 守护进程 ./health-check -daemon # 守护进程模式 ./health-check -daemon -config <文件> # 指定配置文件 ./health-check -daemon -interval <时间> # 设置监控间隔 ``` #### 进程组管理 ```bash # 进程组操作 ./health-check -list-groups # 列出所有进程组 ./health-check -group-status <组名> # 显示进程组状态 ./health-check -restart-group <组名> # 重启进程组 ./health-check -restart-group-all <组名> # 强制重启进程组 # 进程控制 ./health-check -enable-process <进程名> # 启用进程监控 ./health-check -disable-process <进程名> # 禁用进程监控 ./health-check -enable-group <组名> # 启用进程组监控 ./health-check -disable-group <组名> # 禁用进程组监控 ``` #### 配置管理 ```bash # 配置文件操作 ./health-check -create-config # 创建默认配置 ./health-check -check-config # 检查配置语法 ./health-check -list-process-files # 列出进程配置文件 ./health-check -add-process-file <进程名> # 添加进程配置文件 ./health-check -remove-process-file <进程名> # 删除进程配置文件 ``` #### 其他功能 ```bash # 工具命令 ./health-check -restart-info # 显示重启信息 ./health-check -test-notify # 测试通知功能 ``` ### 配置文件接口 #### 主配置文件结构 ```yaml # config.yaml global: check_interval: 10s # 监控间隔 timeout: 10s # 超时时间 retry_count: 3 # 重试次数 retry_delay: 5s # 重试延迟 server_id: "server-01" # 服务器标识 # 进程配置现在在 configs/processes/ 目录中的独立文件中 logging: level: "info" # 日志级别 format: "json" # 日志格式 output: "file" # 输出方式 file_path: "./logs/health-check.log" # 日志文件路径 notify: enabled: true # 启用通知 feishu: # 飞书配置 enabled: true webhook_url: "https://open.feishu.cn/open-apis/bot/v2/hook/xxx" secret: "your_secret" use_card: true smart_notify: true ``` #### 进程配置文件结构 ```yaml # configs/processes/nginx.yaml process: name: "nginx" enabled: true auto_restart: true work_dir: "/etc/nginx" restart_cmd: "systemctl restart nginx" check_interval: 30s resource_limits: max_cpu_percent: 80.0 max_memory_percent: 90.0 max_memory_mb: 1024 ``` ## ❓ 常见问题 ### Q: 如何配置进程组? A: 有两种方式配置进程组: 1. **模式生成**:使用 `group_pattern: "DEMO%d"` + `group_start: 1` + `group_end: 10` 2. **手动指定**:使用 `group_members: ["nginx", "apache", "httpd"]` ### Q: 模式替换如何使用? A: 在 `work_dir` 和 `restart_cmd` 中可以使用: - `%d`:替换为成员名称中的数字部分(如 DEMO1 → 1) - `%s`:替换为完整的成员名称(如 nginx → nginx) ### Q: 飞书通知收不到怎么办? A: 检查以下几点: 1. 确认 `webhook_url` 和 `secret` 配置正确 2. 检查网络连接是否正常 3. 查看日志文件 `./logs/health-check.log` 中的错误信息 4. 使用 `./health-check -test-notify` 测试通知功能 ### Q: 程序崩溃了会自动重启吗? A: 是的,有多种自动重启机制: 1. **程序内部**:panic 恢复机制 2. **系统服务**:systemd 自动重启(`Restart=always`) 3. **启动脚本**:`start.sh` 脚本监控 ### Q: 如何部署到多台服务器? A: 每台服务器需要: 1. 配置不同的 `server_id` 用于标识 2. 设置相同的飞书 webhook(消息会包含服务器标识) 3. 使用 `install.sh` 脚本安装为系统服务 ### Q: 如何在部署期间控制监控? A: 使用以下方法: 1. **命令行控制**: ```bash # 部署前禁用监控 ./health-check -disable-process DEMO ./health-check -disable-group DEMO_GROUP # 部署后启用监控 ./health-check -enable-process DEMO ./health-check -enable-group DEMO_GROUP ``` 2. **配置文件控制**: ```yaml # configs/processes/nginx.yaml - 临时禁用某个进程 process: name: "nginx" enabled: false # 临时禁用 ``` ### Q: 为什么 systemctl stop 时会 kill 掉监控的进程? A: 这是 systemd 的 cgroup 管理机制导致的: - **问题原因**:systemd 默认使用 `KillMode=control-group`,停止服务时会终止整个控制组内的所有进程(包括 health-check 启动的子进程) - **解决方案**:在 `/etc/systemd/system/health-check.service` 中添加 `KillMode=process`,这样只会终止 health-check 主进程,不影响监控的进程 - **详细说明**:参考 [SYSTEMD_FIX.md](SYSTEMD_FIX.md) 文档 ## 🔧 故障排除 ### 常见问题诊断 #### 1. 程序无法启动 ```bash # 检查配置文件语法 ./health-check -check-config # 查看详细错误信息 ./health-check -daemon -v # 检查权限 ls -la health-check chmod +x health-check ``` #### 2. 进程监控不生效 ```bash # 检查进程是否存在 ps aux | grep nginx # 检查进程名称是否正确 ./health-check -name "nginx" # 查看监控日志 tail -f logs/health-check.log ``` #### 3. 飞书通知失败 ```bash # 测试通知功能 ./health-check -test-notify # 检查网络连接 curl -X POST "https://open.feishu.cn/open-apis/bot/v2/hook/your-webhook-url" # 查看通知日志 grep "飞书" logs/health-check.log ``` #### 4. 配置文件监控不工作 ```bash # 检查文件权限 ls -la configs/config.yaml ls -la configs/processes/ # 手动触发配置重载 touch configs/config.yaml # 查看配置监控日志 grep "CONFIG" logs/health-check.log ``` #### 5. systemctl stop 时 kill 掉监控的进程 **问题**:执行 `systemctl stop health-check` 时,某些被监控的进程也被 kill 掉 **原因**:systemd 默认使用 `KillMode=control-group`,会终止整个 cgroup 内的所有进程(包括子进程) **解决方案**:修改 `/etc/systemd/system/health-check.service`,添加 `KillMode=process` ```bash # 编辑服务文件 sudo vim /etc/systemd/system/health-check.service # 在 [Service] 部分添加: KillMode=process # 重新加载配置 sudo systemctl daemon-reload # 重启服务 sudo systemctl restart health-check # 验证:停止服务后,监控的进程应该还在运行 sudo systemctl stop health-check ps aux | grep your-process-name ``` 详细说明请参考:[SYSTEMD_FIX.md](SYSTEMD_FIX.md) ### 性能优化 #### 1. 监控间隔优化 ```yaml # configs/processes/nginx.yaml - 关键服务:30秒 process: name: "nginx" check_interval: 30s # configs/processes/mysql.yaml - 数据库:60秒 process: name: "mysql" check_interval: 60s # configs/processes/redis.yaml - 缓存:15秒 process: name: "redis" check_interval: 15s # configs/processes/backup-service.yaml - 备份服务:5分钟 process: name: "backup-service" check_interval: 300s ``` #### 2. 资源限制配置 ```yaml # configs/processes/nginx.yaml - 设置合理的资源阈值 process: name: "nginx" resource_limits: max_cpu_percent: 80.0 # CPU使用率不超过80% max_memory_percent: 90.0 # 内存使用率不超过90% max_memory_mb: 1024 # 内存使用量不超过1GB ``` #### 3. 日志管理 ```bash # 配置日志轮转 sudo tee /etc/logrotate.d/health-check << EOF /opt/health-check/logs/*.log { daily missingok rotate 30 compress delaycompress notifempty create 644 root root } EOF ``` ## 📊 监控指标 ### 关键指标说明 - **进程状态**:运行中、已停止、错误 - **CPU使用率**:进程CPU占用百分比 - **内存使用率**:进程内存占用百分比 - **启动时间**:进程启动耗时(毫秒) - **重启次数**:进程重启统计 - **最后重启时间**:最近一次重启时间 ### 告警级别 - **INFO**:正常状态信息 - **WARNING**:进程停止但可自动恢复 - **ERROR**:进程重启失败或资源超限 - **CRITICAL**:系统级错误或配置错误 ## 🚀 开发计划 ### 已完成功能 - [x] 基础进程监控 - [x] 配置文件支持 - [x] 自动重启功能 - [x] 飞书通知集成 - [x] 进程组监控功能 - [x] 飞书卡片消息 - [x] 消息聚合和智能通知 - [x] 服务器身份标识 - [x] 进程资源阈值监控 - [x] 进程启动时间监控 - [x] 进程退出码分析 - [x] 智能通知规则配置 - [x] 多配置文件系统 - [x] 配置文件监控和自动重载 - [x] 配置文件备份和回滚 - [x] 配置文件语法检查 ### 计划功能 - [ ] **更多通知渠道**:钉钉、企业微信、邮件、短信通知 - [ ] **进程依赖关系监控**:监控进程间的依赖关系 - [ ] **自定义告警规则**:支持复杂的告警条件配置 - [ ] **进程性能分析**:CPU、内存使用趋势分析 - [ ] **集群监控支持**:多节点统一监控管理 - [ ] **Web管理界面**:提供Web UI进行配置管理 - [ ] **API接口**:RESTful API支持第三方集成 - [ ] **插件系统**:支持自定义监控插件 - [ ] **数据持久化**:支持数据库存储历史数据 ## 许可证 MIT License ## 贡献 欢迎提交 Issue 和 Pull Request! ## 📝 更新日志 ### 🚀 v1.2.0 (2024-01-15) - ✨ **新增功能** - 多配置文件系统,支持模块化配置管理 - 配置文件热重载,无需重启服务 - 配置文件备份和自动回滚机制 - 配置文件语法检查工具 - 进程资源阈值监控(CPU、内存) - 进程启动时间监控和性能分析 - 进程退出码分析和智能重启策略 - 智能通知规则配置,避免告警轰炸 - 🔧 **改进优化** - 优化配置文件加载性能 - 改进错误处理和日志记录 - 增强进程组监控功能 - 优化飞书通知消息格式 - 🐛 **问题修复** - 修复进程组模式替换问题 - 修复配置文件监控异常 - 修复通知重试机制 ### 🎯 v1.1.0 (2024-01-01) - ✨ **新增功能** - 进程组监控功能 - 飞书卡片消息支持 - 消息聚合和智能通知 - 服务器身份标识 - 进程控制命令(启用/禁用) - 🔧 **改进优化** - 重构通知系统架构 - 优化进程检测算法 - 改进日志记录格式 - 🐛 **问题修复** - 修复进程重启命令问题 - 修复通知发送失败问题 ### 🎉 v1.0.0 (2023-12-01) - 🎊 **初始版本发布** - 基础进程监控功能 - 自动重启机制 - 飞书通知集成 - 命令行工具支持 - 系统服务安装脚本 - 配置文件支持 ## 🤝 贡献指南 ### 📋 贡献方式 我们欢迎各种形式的贡献,包括但不限于: - 🐛 **Bug 报告**:发现问题请提交 Issue - 💡 **功能建议**:有新想法请提交 Feature Request - 📝 **文档改进**:帮助完善文档和示例 - 🔧 **代码贡献**:提交 Pull Request - 🧪 **测试反馈**:帮助测试新功能 ### 🔧 开发环境搭建 ```bash # 1. Fork 项目到你的 GitHub 账户 # 2. 克隆你的 Fork git clone https://github.com/your-username/health-check.git cd health-check # 3. 添加上游仓库 git remote add upstream https://github.com/original-repo/health-check.git # 4. 安装依赖 go mod tidy # 5. 运行测试 go test ./... # 6. 构建项目 go build -o health-check cmd/main.go ``` ### 📝 提交规范 我们使用 [Conventional Commits](https://www.conventionalcommits.org/) 规范: ```bash # 功能新增 git commit -m "feat: add process group monitoring" # Bug 修复 git commit -m "fix: resolve process restart command issue" # 文档更新 git commit -m "docs: update README with new features" # 性能优化 git commit -m "perf: optimize process detection algorithm" # 重构代码 git commit -m "refactor: restructure notification system" ``` ### 🧪 测试指南 ```bash # 运行所有测试 go test ./... # 运行特定包的测试 go test ./internal/process/... # 运行测试并生成覆盖率报告 go test -coverprofile=coverage.out ./... go tool cover -html=coverage.out ``` ### 📋 Pull Request 流程 1. **创建分支**:`git checkout -b feature/your-feature-name` 2. **提交更改**:按照提交规范提交代码 3. **推送分支**:`git push origin feature/your-feature-name` 4. **创建 PR**:在 GitHub 上创建 Pull Request 5. **代码审查**:等待维护者审查 6. **合并代码**:审查通过后合并到主分支 ### 🏷️ 发布流程 1. **版本规划**:在 Issues 中规划新版本功能 2. **功能开发**:按照规划开发新功能 3. **测试验证**:充分测试新功能 4. **文档更新**:更新 README 和 API 文档 5. **版本发布**:创建 Release 和 Tag 6. **发布公告**:在社区发布新版本公告 ## 📄 许可证 本项目采用 [MIT License](LICENSE) 许可证。 ## 🙏 致谢 感谢所有为这个项目做出贡献的开发者和用户! ### 🌟 主要贡献者 - [@your-username](https://github.com/your-username) - 项目创建者和主要维护者 - [@contributor1](https://github.com/contributor1) - 核心功能开发 - [@contributor2](https://github.com/contributor2) - 文档和测试 ### 📚 参考项目 - [gopsutil](https://github.com/shirou/gopsutil) - 系统信息获取 - [go-resty](https://github.com/go-resty/resty) - HTTP 客户端 - [fsnotify](https://github.com/fsnotify/fsnotify) - 文件系统监控 - [gitee.com/ixgo/log](https://gitee.com/ixgo/log) - 日志库 ## 📞 联系我们 - **GitHub Issues**: [提交问题](https://github.com/your-repo/health-check/issues) - **讨论区**: [GitHub Discussions](https://github.com/your-repo/health-check/discussions) - **邮箱**: your-email@example.com - **微信群**: 扫码加入技术交流群 ---
**如果这个项目对你有帮助,请给我们一个 ⭐ Star!** [![Star History Chart](https://api.star-history.com/svg?repos=your-repo/health-check&type=Date)](https://star-history.com/#your-repo/health-check&Date)