Debian 环境下 JavaScript 日志的关键指标
一 基础上下文指标
- 时间戳:精确到毫秒,便于排序、聚合与根因定位。
- 日志级别:如 DEBUG/INFO/WARN/ERROR/FATAL,用于快速筛选严重性与噪声。
- 进程/线程标识:PID/TID,在多进程/集群中追踪具体执行上下文。
- 服务/应用/模块:如 service name、component,支持按业务线或微服务聚合。
- 请求/事务 ID:贯穿一次调用的唯一标识,便于端到端串联。
- 用户信息/会话:如 user、session_id,用于用户维度分析与合规审计。
- 客户端 IP 与来源:如 remote_addr、user-agent,支持安全分析与地域统计。
- 操作描述:简要说明事件目的,便于非技术人员理解。
- 相关配置快照:记录影响本次行为的开关/版本,便于回溯。
以上字段构成“可观测性最小集”,建议在日志结构化时统一输出。
二 错误与异常指标
- 异常类型与名称:如 TypeError、SyntaxError、ReferenceError,用于快速分类。
- 错误消息与上下文:包含失败原因、输入片段、关键变量值。
- 堆栈跟踪:函数调用链与 文件名:行号:列号,定位到具体代码位置。
- 源码映射支持:记录 source map 可用性,便于线上压缩代码还原。
- 出错的代码行/片段:直接展示问题点,减少二次检索。
- 发生时机与频率:首次/重复发生时间、按版本/模块的报错计数。
这些指标能显著缩短 MTTR,建议对 ERROR/FATAL 强制输出完整堆栈与上下文。
三 性能与依赖指标
- HTTP 性能:响应时间/耗时、状态码、content-length、method、url,衡量接口健康度与 SLA。
- 业务处理时间:如 数据库查询、外部 API 调用、缓存命中/未命中 的耗时分布。
- 内存与 GC:heap used、heap total、rss、GC 暂停/次数(Node.js 可用 V8/Inspector 采集)。
- 事件循环与异步:tick/loop delay、pending callbacks,识别阻塞与背压。
- 自定义计时:使用 console.time/console.timeEnd 或 performance.now() 输出关键路径耗时。
- 系统资源关联:将 CPU、内存、磁盘 I/O 与日志事件关联,定位资源瓶颈。
这些指标帮助发现慢查询、慢接口、内存泄漏与阻塞等性能隐患。
四 安全与审计指标
- 认证与授权:登录成功/失败、权限变更、token 刷新/失效。
- 访问控制:越权访问尝试、IP 黑名单命中、速率限制触发。
- 输入与注入:SQL/NoSQL/命令注入特征、XSS 可疑 payload。
- 异常来源特征:高频失败登录、非常规 UA/Referer、异常 地理位置。
- 数据访问与变更:敏感数据读写、配置变更、管理操作审计。
安全类指标应与 告警 联动,缩短检测与响应时间。
五 采集与落盘建议
- 统一结构化输出:使用 JSON,字段命名规范(如 timestamp、level、service、msg、trace_id、user_id、ip、status、duration_ms、err_name、err_stack、heap_used_mb)。
- 日志库与中间件:Node.js 推荐 winston、pino;Web 框架可用 morgan 输出 method、url、status、response-time。
- 集中化与可视化:多实例/多机房建议接入 ELK/Graylog,便于检索、聚合与仪表盘展示。
- 系统日志联动:通过 journalctl -u 查看服务日志,必要时结合 tail -f /var/log/syslog、dmesg 排查系统层问题。
- 轮转与保留:使用 logrotate 控制单文件大小与保留天数,避免磁盘被占满。
- 采样与降噪:对 DEBUG 与高频事件采样,避免写入放大与成本失控。
上述实践能提升可观测性、降低运维成本,并增强问题复现与追溯能力。