Ubuntu Node.js 日志应覆盖的关键事件
为确保可观测性与可运维性,建议将日志重点覆盖以下事件类别,并在每条日志中尽量包含时间戳、日志级别、消息、堆栈/请求上下文等关键字段,便于检索与告警。
一、核心事件清单
| 事件类别 | 典型场景 | 建议记录字段 | 日志级别 |
|---|---|---|---|
| 应用生命周期 | 启动、就绪、优雅关闭、重启 | pid、版本、端口、启动参数、信号(SIGTERM/SIGINT)、停机耗时 | info |
| HTTP 访问与性能 | 请求到达、响应返回、耗时、状态码 | method、url、status、user-agent、referer、remote-ip、响应时间、content-length、request-id | info(4xx/5xx 可提升为 warn/error) |
| 未捕获异常 uncaughtException | 同步异常未捕获 | error、堆栈、type、time、pid | fatal(记录后建议安全退出) |
| 未处理 Promise 拒绝 unhandledRejection | Promise 无 .catch() | reason、堆栈、promise | error |
| Node.js 运行时警告 | DeprecationWarning、MaxListenersExceededWarning 等 | warning 类型、模块、堆栈、触发位置 | warn |
| 资源与性能瓶颈 | 内存逼近上限、GC 频繁、事件循环延迟高 | heapUsed、rss、external、gc 统计、loop delay、采样点 | warn/error(阈值触发) |
| 数据库与缓存 | 连接失败/超时、查询慢、断连重连 | db/redis 类型、host、port、错误码、耗时、sql/key、重试次数 | error/warn |
| 外部依赖与消息队列 | HTTP 调用失败、第三方 API 异常、MQ 生产/消费失败 | url/队列、状态码/错误码、时延、重试、trace-id | error/warn |
| 身份认证与授权 | 登录成功/失败、令牌无效/过期、权限不足 | user-id/用户名、ip、ua、路径、结果、原因 | info/warn/error |
| 安全与审计 | 暴力登录、可疑输入、权限变更、配置变更 | 事件类型、来源 ip、账号、时间、变更前后快照 | warn/error |
| 配置与启动问题 | 环境变量缺失、配置校验失败、端口被占用 | 缺失项、期望值、实际值、端口占用详情 | error |
| 定时任务与后台作业 | 任务开始/结束、失败重试、超时 | 任务名、开始/结束时间、耗时、结果、错误 | info/error |
二、日志级别与保留策略
三、在 Ubuntu 上的落地与查看方式
四、关键事件的最小落地示例