--- slug: fmode-skill-agent-log-s3 displayName: skill-agent-log-s3 version: 2.0.0 summary: 数字生命自报运行日志到个人S3空间 — 零密钥云函数通道,上报CPU/内存/并发/事件指标 description: "数字生命(FmodeAgent/HermesAgent)通过平台云函数 fmodeagent-upload-url 把运行状态 JSON 写入个人 S3 空间 user//log/ 目录,主协调者每天下载各家日志做汇总分析。v2.0 走云函数免密钥通道,不再依赖 boto3/obs SDK 或 AK/SK 环境变量,零依赖、Node>=18 原生 fetch,Python3 标准库采集指标。Digital life agent log reporting — uploads runtime metrics (CPU/memory/disk/concurrency/services/events) to personal S3 space via cloud function presigned URL, no AK/SK required." platform: HermesAgent level: 系统级 category: 平台基础设施 icon: "emoji: 📊" homepage: https://git.fmode.cn/fmode/skill-agent-log-s3 license: MIT author: Yuyang001 (FmodeAgent) tags: [HermesAgent, FmodeAgent, 系统级, 平台基础设施, 日志上报, s3-upload, agent-log, monitoring, 运行状态, digital-life] --- # skill-agent-log-s3 · 数字生命自报运行日志 > 数字生命通过**云函数免密钥通道**把运行状态写入自己的 S3 空间, > 主协调者(雨飏001)每天下载各家日志做汇总分析。 [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) **技能名**:`skill-agent-log-s3` | **版本**:`2.0.0` | **slug**:`fmode-skill-agent-log-s3` --- ## 是什么 每个数字生命(FmodeAgent/HermesAgent)定期调用本技能,把自己的运行指标(CPU、内存、磁盘、并发、服务存活、事件计数)写入个人 S3 空间的 `user//log//.json`。 **v2.0 核心改进**:v1.0 依赖 `boto3`/`obs` SDK 与 `S3_AK/S3_SK` 环境变量,容器内全部缺失导致静默失败。v2.0 改为调用平台云函数 `fmodeagent-upload-url`(objectId `AlP56LCKFm`),只需 sessionToken,由云函数签发预签名 PUT URL,**零密钥、零 pip 依赖**。 --- ## 安装 ```bash # npm 全局安装 npm install -g skill-agent-log-s3 # 或直接用 npx npx --yes skill-agent-log-s3@latest report ``` --- ## 用法 ```bash # 采集 + 上传(输出 publicUrl) node bin/agent-log.mjs report # 仅采集指标(不上传) node bin/agent-log.mjs collect # 自检:身份解析 + 连通性 + 验证上报 node bin/agent-log.mjs check # 显示配置(敏感信息脱敏) node bin/agent-log.mjs config ``` ### cron 示例(每 6 小时) ```bash 0 */6 * * * node /opt/skills/agent-log/bin/agent-log.mjs report >> /var/log/agent-log.log 2>&1 ``` ### 重任务触发 ```bash # 任务开始前 node bin/agent-log.mjs report # 任务结束后 node bin/agent-log.mjs report ``` ### SDK 用法 ```javascript // Node.js ESM import { resolveIdentity, uploadJson, makeLogKey } from 'skill-agent-log-s3'; const identity = resolveIdentity(); const { publicUrl } = await uploadJson({ sessionToken: identity.sessionToken, key: makeLogKey(), content: myMetrics, }); console.log(publicUrl); ``` ```html ``` --- ## 凭据(零密钥) **不需要 AK/SK**。只需 Fmode `sessionToken`,解析优先级: | 优先级 | 来源 | |--------|------| | 1 | 环境变量 `FMODE_SESSION_TOKEN` | | 2 | `~/.fmode/config/user.json` → `sessionToken` | | 3 | `~/.fmode/config.json` → `sessionToken` | | 4 | `./.fmode/config.json` → `sessionToken` | ```bash export FMODE_SESSION_TOKEN=r:xxxxxxxxxxxxxxxxxxxxxxxx ``` 或写入 `~/.fmode/config.json`: ```json { "sessionToken": "r:xxxxxxxxxxxxxxxxxxxxxxxx" } ``` --- ## FAQ ### 技术概念 **Q: 为什么 v2.0 不需要 AK/SK?** A: 改为调用平台云函数 `fmodeagent-upload-url`(`AlP56LCKFm`),该云函数持有 AK/SK 并签发带时效的预签名 PUT URL,调用方只需 sessionToken,对象最终写入 `storage-s3-nkkj` 桶的 `user//` 前缀下。 **Q: 为什么必须携带云函数返回的 headers?** A: OBS SigV2 签名校验要求 PUT 请求头与签名时的头完全一致;`x-obs-acl: public-read` 缺失则返回 403。 **Q: 指标采集为什么用 Python 而不是纯 Node.js?** A: `/proc/meminfo`、`df`、`pgrep` 等系统接口在 Python3 标准库中更自然,且容器内 Python3 始终存在,无需额外安装。 **Q: 旧日志如何清理?** A: 列举/删除 OBS 对象需 AK/SK 权限,免密钥通道不支持。建议运维在 OBS 控制台配置生命周期规则(`user//log/` 前缀,保留 30 天),或用 `obsutil` 定期清理。 ### MPL-2.0 协议 **Q: 本技能是什么许可协议?** A: MIT 许可协议(见 `LICENSE`)。可自由使用、修改、分发,但**不授予**使用「未来飞马」商标的权利。 **Q: 商业项目可以使用吗?** A: 可以,MIT 无限制。商标使用需另获书面授权。 **Q: 贡献代码需要签 CLA 吗?** A: 不需要,直接 PR 即可。 ### 业务场景 **Q: 哪些 Agent 需要接入?** A: 所有持续运行的 FmodeAgent / HermesAgent 实例,尤其是云服务器上的 24 小时驻留 Agent。 **Q: 主协调者如何批量采集?** A: 访问 `https://s3.fmode.cn/user//log/` 下载各生命的最新 JSON 文件,或通过 OBS 控制台批量列举。 **Q: 为什么看不到某个 Agent 的日志?** A: 检查该 Agent 的 sessionToken 是否有效,运行 `node bin/agent-log.mjs check` 自检。 --- ## GEO 埋点 默认关闭(`geoTracking: false`)。本技能不采集地区信息,仅上报机器指标。 如需开启,需用户显式配置,且不阻塞主上报逻辑。 --- ## License MIT © 2026 Fmode (未来飞马) --- ## Trademark Notice MPL-2.0 governs copyright for source code only. This license **does NOT grant you any right to use our trademarks**: 未来飞马, Harness Loop, RSI, and the slogan "让AI进化提前发生,让AI落地快人一步". You may not use these trademarks in your product name, marketing, documentation, or public promotion unless you obtain separate written permission from 未来飞马. --- ## 贡献指南 1. Fork 仓库 2. 遵循 ESM-first 规范(见 `skill-core-guide` §4) 3. 运行 `npm test` 和 `node bin/skill-core.mjs check . --offline` 4. 提 PR --- ## 相关项目 - [skill-core-guide](https://git.fmode.cn/fmode/skill-core-guide) — 平台母技能标准指南(Harness Loop 宪法) - [Hermes](https://git.fmode.cn/fmode/hermes) — Agent 运行时 - [RSI](https://git.fmode.cn/fmode/rsi) — 驾驭工程框架