# env-report **Repository Path**: ccbtr/env-report ## Basic Information - **Project Name**: env-report - **Description**: No description available - **Primary Language**: Shell - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-27 - **Last Updated**: 2026-08-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # env-report — 服务器运行状态报告系统 从夜莺(n9e) / Prometheus 采集环境指标 → 中转存储 → 生成 PDF 报告 → 定时推送 + Web 查看。 ## 架构 ``` 目标机器 cron (10:00) └─ collect-env-metrics.sh (bash 3.2, curl+awk) │ POST JSON (X-Upload-Token) ▼ :18099 (中转 + 报告生成) ├─ metrics-recv.py (systemd, Python 3.6, 零依赖) │ 存档: /root/.hermes/metrics-uploads/{env}/{date}_{ts}.json │ 最新: /root/.hermes/metrics-uploads/{env}/latest.json │ ├─ crontab (11:00) │ └─ daily_report.sh → gen_report.py --scan (自动发现所有环境) │ 输出 PDF → 复制到 /var/www/reports/ │ └─ nginx :30971 (Basic Auth) └─ /var/www/reports/ → 浏览器看原生 PDF + 日期列表页 │ ▼ Hermes 桌面端 (11:05 scp 拉回 → 推送) ``` ## 目录结构 ``` env-report/ ├── collector/ │ ├── collect-env-metrics.sh # 采集脚本 (bash 3.2+, curl+awk) │ └── config.env.example # 配置模板 (复制为 config.env 后填值) ├── server/ │ ├── metrics-recv.py # JSON 接收服务 (systemd, Python 3.6) │ ├── gen_report.py # PDF 报告生成器 (Python 3.6, 零外部依赖, --scan 自动发现) │ ├── gen_index.py # Web 日期列表页生成器 (Python 3.6) │ └── daily_report.sh # 每天 11:00 生成 PDF + 发布 web (crontab) └── docs/ ├── ARCHITECTURE.md # 架构说明 + 完整文档 └── DEPLOY.md # 三个服务的部署步骤 (服务端/Web/采集端) ``` ## 快速开始 ### 服务端 () ```bash # 1. 装依赖 dnf install -y chromium-headless google-noto-sans-cjk-ttc-fonts nginx httpd-tools # 2. 上传脚本 scp -P server/* root@:/root/.hermes/ops/ # 3. 生成 token ssh -p root@ \ 'openssl rand -hex 32 > /root/.hermes/ops/metrics-recv.token && chmod 600 /root/.hermes/ops/metrics-recv.token' # 4. 建 systemd 服务 + 启动 (见 docs/DEPLOY.md 1.6) # 5. 配 crontab (见 docs/DEPLOY.md 1.8) # 6. 配 nginx Web (见 docs/DEPLOY.md 1.9) ``` ### 采集端 (目标机器) ```bash # 1. 上传脚本 scp collector/* user@目标机器:/path/to/scripts/ # 2. 改配置 cp config.env.example config.env && vi config.env # 填入: ENV_ID, MODE, 监控系统地址/凭据, UPLOAD_URL, UPLOAD_TOKEN # 3. 试跑 bash collect-env-metrics.sh --dry-run --mode n9e # 4. 配 crontab (见 docs/DEPLOY.md 2.5) ``` ### 端到端验证 ```bash bash collect-env-metrics.sh --mode n9e # 采集+上传 ssh -p root@ '/root/.hermes/ops/daily_report.sh' # 出 PDF + 发布 web scp -P root@:/root/.hermes/metrics-uploads/report_$(date +%Y%m%d).pdf /tmp/ # Web 查看 (Basic Auth) # 打开 http://:30971/ → 日期列表 → 原生 PDF ``` ## 报告版式 - A4 纵向, 每环境一个章节 - 页头: 主机数 / 平均 CPU / 平均内存 / 告警数 (4 张摘要卡片) - 明细表: CPU 当前/日均, 内存 当前/日均, 磁盘当前, 告警状态 - 超阈值行标红, 每页自动分页 - 中文 NotoSansCJK 自动嵌入, 无页眉页脚 ## 告警阈值 (默认) | 指标 | 阈值 | 命令行覆盖 | |---|---|---| | CPU | ≥ 80% | `--cpu-th 70` | | 内存 | ≥ 85% | `--mem-th 80` | | 磁盘 | ≥ 85% | `--disk-th 90` | ## 安全 - 上传/取数均通过 `X-Upload-Token` HTTP 头鉴权 - Token 存储: 本地 `.upload_token` (600), 服务端 `metrics-recv.token` (600) - 18099 端口建议限制来源 IP (云防火墙) - Web 报告站 (30971) 带 Basic Auth, 建议限制来源 IP - 换 token 步骤见 `docs/DEPLOY.md` 4.3 ## 许可证 本项目基于 [木兰宽松许可证,第2版 (Mulan PSL-2.0)](https://license.coscl.org.cn/MulanPSL2) 开源。 Copyright © 2026 ccbtr 允许复制、使用、修改、分发(含商用),再分发时须保留本许可证及版权声明。