# opsxj **Repository Path**: wxd_ops/opsxj ## Basic Information - **Project Name**: opsxj - **Description**: OpsXJ 是一款面向企业级 IT 运维场景的自动化巡检平台,支持多类型资源的健康巡检、异常检测、趋势分析,并可一键生成结构化的 PDF/HTML 巡检报告并通过邮件发送到指定邮箱。平台适用于服务器、中间件、应用、备份、域名、SSL证书、K8S 等多种运维对象,极大提升了运维效率和规范性。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-21 - **Last Updated**: 2025-09-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: Go语言, 运维巡检 ## README # 运维巡检自动化平台(OpsXJ) ## 项目简介 OpsXJ 是一款面向企业级 IT 运维场景的自动化巡检平台,支持多类型资源的健康巡检、异常检测、趋势分析,并可一键生成结构化的 PDF/HTML 巡检报告。平台适用于服务器、中间件、应用、备份、域名、SSL证书、K8S 等多种运维对象,极大提升了运维效率和规范性。 --- ## 核心思想 - **自动化**:通过配置文件,自动批量巡检服务器基础资源、端口、中间件等,减少人工干预。 - **结构化**:巡检结果统一结构化输出,便于分析、归档和报告生成。 - **可视化**:自动生成趋势图、得分表、异常明细,报告一目了然。 - **一键报告**:支持 HTML/PDF 格式报告导出,同时打通邮件通道,自动发送巡检报告到指定邮箱,满足审计和管理需求。 --- ## 巡检功能简述 ### 巡检模式 OpsXJ支持两种巡检模式,通过配置文件中的`PROMETHEUS.enabled`参数进行切换: 1. **SSH巡检模式**(默认):通过SSH连接服务器进行传统巡检 2. **Prometheus巡检模式**:通过Prometheus API进行监控数据巡检 ### SSH巡检模式功能 - 服务器 - ssh端口连通性 - 基础资源巡检(CPU/内存/磁盘/inode) - 应用系统(支持GET/POST,定开接口检查) - 接口连通性 - 接口响应时间 - 接口状态码 - 接口返回内容检查 - 中间件 - 所有中间件端口连通性(基于net库实现,目前支持tcp) - mysql健康检查 - 当前连接数(小于max_connections) - 锁等待(大于50) - 慢SQL(大于10)(//TODO:已开发完成,待测试) - 主从健康检查 - 主从延迟检查 - redis健康检查 - 连通性 - 主从健康检查 - 集群健康检查 - 大key检查(大于5MB) - 内存使用率(大于80%) - key值查找失败(没有命中)次数(keyspace_misses,大于50则告警) - 客户端连接数(小于maxclients,超过则告警) - 缓存命中率(大于90%,低于则告警) - 最后一次持久化保存磁盘的时间戳(大于10分钟则告警) - elasticsearch健康检查 - 集群健康检查 - 节点健康检查 - 节点数检查 - 未分片索引检查 - 索引状态检查 - 集群总体写入QPS(小于1则告警) - 集群总体读取QPS(小于主分片数则告警) - 客户端连接数(大于500则告警) - 大数据集群组件健康检查(//TODO:待开发) - 调用大数据集群组件接口,实现对hdfs、yarn、spark、hbase、hive等组件的深入检查 - 备份 - Mysql备份检查(基于全量备份日志的检查) - Mongodb备份检查(//TODO:待开发) - pgsql备份检查(//TODO:待开发) - 域名 - 域名到期时间检查 - SSL证书 - 证书到期时间检查 - K8S - 证书时间检查 - pod状态检查 - 组件状态检查 - node状态检查 - node中pod调度是否均衡检查(//TODO:支持开关控制) - 集群events事件检查(//TODO:支持开关控制) ### Prometheus巡检模式功能(基于所配置的巡检项进行巡检) - 基础资源监控 - CPU使用率监控 - 内存使用率监控 - 磁盘使用率监控 - Kubernetes监控 - Pod状态监控 - 节点状态监控 - 容器重启次数监控 - 应用服务监控 - HTTP请求错误率 - 响应时间监控 - 服务可用性监控 - 数据库监控 - MySQL连接数监控 - Redis内存使用率监控 - 数据库性能指标监控 - 自定义监控规则 - 支持自定义Prometheus查询语句 - 灵活的阈值配置 - 多维度分类管理 --- ## 主要功能 1. **多资源类型巡检** - 支持服务器、应用系统、中间件、备份、域名、SSL证书、K8S等多类型资源的健康巡检。 - 支持端口连通性、资源阈值(CPU/内存/磁盘/inode)、服务状态、证书/域名到期等多维度检查。 - 支持多类型资源巡检,并支持自定义巡检规则。 2. **自动趋势分析** - 自动记录每日告警历史,生成 CPU/内存/磁盘等趋势图,辅助容量与风险分析。 3. **结构化报告生成** - 自动生成分组、带表头的巡检明细表格。 - 支持 HTML 在线浏览和 PDF 一键导出,报告内容完整、格式美观,支持中文。 4. **异常与建议输出** - 自动归纳异常项,输出针对性的运维建议,便于快速定位和处理问题。 --- ## 实现过程简述 - **配置驱动**:所有巡检对象、阈值、账号等均通过 `config.yaml` 配置,灵活扩展。 - **巡检执行**:后端基于 Go 并发调度,自动批量巡检所有配置资源,聚合结果。 - **趋势与历史**:每日巡检后自动追加历史数据(如 `server_alarm_history.json`),用于趋势图生成。 - **报告生成**: - HTML 报告:`/api/v1/inspect/report/html`,结构化展示所有巡检内容、趋势图、得分、异常明细等。 - PDF 报告:`/api/v1/inspect/report/pdf`,自动调用 wkhtmltopdf 工具将 HTML 转为 PDF,支持中文字体。 - **接口开放**:支持 RESTful API 调用,便于集成自动化运维流程。 --- ## 快速使用 1. **安装依赖** - 安装wkhtmltopdf工具依赖 yum install -y xorg-x11-fonts-75dpi.noarch xorg-x11-fonts-Type1.noarch - 安装 [wkhtmltopdf](https://wkhtmltopdf.org/downloads.html)(用于 HTML 转 PDF) - 服务器需安装中文字体(如 SimSun.ttf、YaheiMono.ttf) 2. **配置资源 --放置同一目录下** - 编辑 `config.yaml`,配置所有需要巡检的url、备份、证书、域名、k8s等信息。 - 编辑 `middleware_info.txt`,配置所有需要巡检的中间件信息。 - 编辑 `server_info.txt`,配置所有需要巡检的服务器信息。 3. **启动服务** 第一种方式 ```bash go run -mod=vendor cmd/main.go ``` 第二种方式 ```bash go build -o opsxj cmd/main.go ./opsxj --config=config.yaml --inspect # 启动服务并自动执行一次全量巡检并输出PDF报告 ``` 4. **巡检与导出** - 浏览器访问 HTML 报告: `http://localhost:8080/api/v1/inspect/report/html` (默认巡检所有类型) - 导出 PDF 报告: `curl -OJ http://localhost:8080/api/v1/inspect/report/pdf` (默认巡检所有类型) `./opsxj --config=config.yaml --inspect` (巡检所有类型) 5. **单项巡检(返回 JSON)** #### SSH巡检模式示例 ```json curl http://localhost:8080/api/v1/inspect?type=server { "type": "服务器", "total": 2, "normal": 0, "abnormal": 2, "details": [ { "Abnormal": 2, "fail_detail": "服务器21.16.1.1 端口22检测失败\n服务器21.17.1.1 端口23检测失败", "inspection_type": "服务器", "normal": 0, "total": 2 } ] } ``` #### Prometheus巡检模式示例 ```json curl http://localhost:8080/api/v1/inspect?type=prometheus { "type": "Prometheus", "total": 8, "normal": 6, "abnormal": 2, "details": [ { "inspection_type": "Prometheus", "name": "CPU使用率", "description": "节点CPU使用率统计", "category": "node", "severity": "warning", "instance": "node-1.example.com", "status": "异常", "fail_detail": "值 85.20 > 80.00", "query": "100 - (avg by(instance) (irate(node_cpu_seconds_total{mode='idle'}[5m])) * 100)", "threshold": 80, "operator": ">", "value": "85.20" } ] } ``` ```json curl http://localhost:8080/api/v1/inspect?type=application { "type": "业务", "total": 24, "normal": 0, "abnormal": 24, "details": [ { "fail_detail": "context deadline exceeded (Client.Timeout exceeded while awaiting headers)", "inspection_type": "APPLICATION", "name": "test1系统", "status": "异常", "url": "https://12.28.24.87/getList?startTime=&endTime=&pageSize=10&pageNo=1" }, { "fail_detail": "dial tcp: lookup 11.11.11.11: no such host", "inspection_type": "APPLICATION", "name": "test2系统", "status": "异常", "url": "http://11.11.11.11/api/share/b61e38d4f14f4" } ] } ``` ```json curl http://localhost:8080/api/v1/inspect?type=middleware { "type": "服务器", "total": 2, "normal": 0, "abnormal": 2, "details": [ { "Abnormal": 2, "fail_detail": "服务器172.16.1.1 端口23检测失败\n服务器172.16.1.1 端口22检测失败", "inspection_type": "服务器", "normal": 0, "total": 2 } ] } ``` ```json curl http://localhost:8080/api/v1/inspect?type=k8s { "type": "K8S", "total": 3, "normal": 0, "abnormal": 3, "details": [ { "Abnormal": 1, "fail_detail": "kubeconfig连接失败: CreateFile conf/kubeconfig.yaml: The system cannot find the path specified.", "inspection_type": "K8S", "name": "component", "normal": 0, "total": 0 }, { "Abnormal": 1, "fail_detail": "kubeconfig连接失败: CreateFile conf/kubeconfig.yaml: The system cannot find the path specified.", "inspection_type": "K8S", "name": "pod", "normal": 0, "total": 0 }, { "Abnormal": 1, "fail_detail": "kubeconfig连接失败: CreateFile conf/kubeconfig.yaml: The system cannot find the path specified.", "inspection_type": "K8S", "name": "certs", "normal": 0, "total": 0 } ] } ``` ```json curl http://localhost:8080/api/v1/inspect?type=domain { "type": "域名", "total": 2, "normal": 2, "abnormal": 0, "details": [ { "expire_time": "2028-10-11 11:05:17", "fail_detail": "", "inspection_type": "DOMAIN", "is_renew": "N", "name": "baidu.com" }, { "expire_time": "2032-09-13 04:00:00", "fail_detail": "", "inspection_type": "DOMAIN", "is_renew": "N", "name": "tencent.com" } ] } ``` ```json curl http://localhost:8080/api/v1/inspect?type=ssl_cert { "type": "SSL证书", "total": 1, "normal": 1, "abnormal": 0, "details": [ { "expire_time": "2026-05-13 06:45:06", "fail_detail": "", "inspection_type": "SSL_CERT", "is_renew": "N", "name": "crxn.cn" } ] } ``` ```json curl http://localhost:8080/api/v1/inspect?type=backup { "type": "Mysql备份", "total": 1, "normal": 0, "abnormal": 1, "details": [ { "Abnormal": 1, "fail_detail": "数据库11.137.20.8:3306 端口检测失败", "inspection_type": "BACKUP", "name": "mysql1", "normal": 0, "total": 1 } ] } ``` 6. PDF报告发送至邮箱 开启邮箱配置 执行巡检后会将生成的pdf巡检报告发送给对应的邮箱 ![邮件通知截图](image/image.png) --- ## 目录结构简要说明 - `cmd/` 启动入口与服务初始化 - `api/` 路由与接口实现 - `internal/` 核心业务逻辑与巡检实现 - `pkg/` 工具库、报告生成、日志等 - `static/` 静态资源(趋势图、PDF等) - `config.yaml` 配置文件 - `middleware_info.txt` 中间件信息文件 - `server_info.txt` 服务器信息文件 --- ## 典型巡检流程 1. 读取配置,初始化所有巡检对象。 2. 并发执行各类资源巡检,聚合结果。 3. 生成趋势图、得分表、异常明细。 4. 结构化输出 HTML/PDF 报告,支持一键下载。 5. 自动追加历史数据,便于趋势分析。 --- ## 其他说明 - 支持自定义报告名称、巡检人、并发数等参数。 - 支持自定义表头、字段顺序和美化样式。 - 代码结构清晰,便于二次开发和扩展。 - 支持将生成的PDF报告发送至邮箱。 --- --- ## Prometheus巡检配置 ### 启用Prometheus巡检 在`config.yaml`中添加以下配置: ```yaml # Prometheus巡检配置 PROMETHEUS: enabled: true # 设置为true启用Prometheus巡检,false使用SSH巡检 server_url: "http://prometheus.k8s.kubehan.cn" # Prometheus服务器地址 timeout: 30 # 查询超时时间(秒) query_step: "5m" # 查询步长 # Prometheus巡检规则配置 PROMETHEUS_RULES: # 基础资源使用情况 - name: "CPU使用率" description: "节点CPU使用率统计" query: "100 - (avg by(instance) (irate(node_cpu_seconds_total{mode='idle'}[5m])) * 100)" threshold: 80 operator: ">" severity: "warning" category: "node" - name: "内存使用率" description: "节点内存使用率统计" query: "(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100" threshold: 85 operator: ">" severity: "warning" category: "node" ``` ### 规则参数说明 | 参数 | 说明 | 示例 | |------|------|------| | `name` | 规则名称 | "CPU使用率" | | `description` | 规则描述 | "节点CPU使用率统计" | | `query` | Prometheus查询语句 | "100 - (avg by(instance) (irate(node_cpu_seconds_total{mode='idle'}[5m])) * 100)" | | `threshold` | 阈值 | 80 | | `operator` | 比较操作符 | ">", "<", ">=", "<=", "==", "!=" | | `severity` | 严重程度 | "critical", "warning", "info" | | `category` | 分类 | "node", "pod", "service", "database" | 详细使用说明请参考 [PROMETHEUS_USAGE.md](PROMETHEUS_USAGE.md) --- 如需详细开发文档或二次开发支持,请联系项目维护者。