用途
该技能用于配置 Laravel Nightwatch 的数据采集,目标是在可观测性、性能与隐私之间取得平衡。它覆盖所有事件类型的采样策略、过滤规则与脱敏方法。
主要能力
Nightwatch 通过三个阶段处理事件:
- 采样(Sampling):控制哪些入口点被采集,包括请求、命令和计划任务。某个入口点被采样后,其相关所有事件都会被捕获。
- 过滤(Filtering):在采样之后排除特定事件,如查询、缓存、邮件等。用于降低噪音与配额消耗。
- 脱敏(Redaction):修改已采集的数据以去除或模糊敏感信息。与过滤不同,脱敏保留事件本身,只清理其内容。
流程示意:
请求/命令/计划任务
|
v
[采样?] ----否----> 丢弃整条链路
| 是
v
生成事件
|
v
[过滤?] ----是----> 丢弃特定事件
| 否
v
[脱敏] -----------> 存储修改后的数据
使用方式
采样配置
可通过环境变量设置全局采样率:
# 默认:100% 采样(所有请求/命令都会被采集)
NIGHTWATCH_REQUEST_SAMPLE_RATE=0.1 # 推荐:10% 的请求
NIGHTWATCH_COMMAND_SAMPLE_RATE=1.0 # 采集所有命令
NIGHTWATCH_EXCEPTION_SAMPLE_RATE=1.0 # 始终采集异常
还可使用 Sample 中间件对特定路由应用不同采样率,例如对 admin 路由 100% 采样、对 API 路由 5% 采样、对关键端点始终采样、对健康检查从不采样,也可对未匹配路由降低采样。此外支持基于运行时条件(如用户角色)的动态采样,以及通过监听 CommandStarting 事件排除特定命令的采样。框架/内部命令默认被忽略,可用 Nightwatch::captureDefaultVendorCommands() 选择性采集。
过滤配置
- 数据库查询:可用
NIGHTWATCH_IGNORE_QUERIES=true完全关闭,或通过Nightwatch::rejectQueries()按 SQL 模式过滤。 - 缓存事件:可用
NIGHTWATCH_IGNORE_CACHE_EVENTS=true关闭,或用Nightwatch::rejectCacheKeys()按缓存键(支持精确匹配与正则)过滤,也可用回调过滤。 - 邮件:可用
NIGHTWATCH_IGNORE_MAIL=true关闭,或用Nightwatch::rejectMail()按条件过滤。 - 通知:可用
NIGHTWATCH_IGNORE_NOTIFICATIONS=true关闭,或按通知渠道过滤。 - 出站 HTTP 请求:可用
NIGHTWATCH_IGNORE_OUTGOING_REQUESTS=true关闭,或按 URL 过滤。 - 队列任务:可用
Nightwatch::rejectQueuedJobs()过滤特定任务;也可通过Queue::before()解耦任务采样,使其独立于父上下文采样。
脱敏配置
- 请求:敏感请求头(Authorization、Cookie、X-XSRF-TOKEN)会自动脱敏,可通过
NIGHTWATCH_REDACT_HEADERS自定义;请求负载默认不采集,需NIGHTWATCH_CAPTURE_REQUEST_PAYLOAD=true开启,并用NIGHTWATCH_REDACT_PAYLOAD_FIELDS指定脱敏字段;也可用Nightwatch::redactRequests()程序化修改 URL、IP 等。 - 查询、缓存、命令、异常、邮件、出站请求:均提供对应的
redact*方法(如redactQueries、redactCacheEvents、redactCommands、redactExceptions、redactMail、redactOutgoingRequests),在回调中修改记录对象的字段以完成脱敏。
适用场景
适用于正在使用或准备接入 Laravel Nightwatch 的项目,需要在生产环境中控制数据采集量、排除低价值事件噪音,并对敏感信息进行脱敏处理的场景。采样率可用于按请求量调整采集比例,过滤可用于屏蔽高频或无关事件,脱敏用于满足隐私合规要求。
限制与说明
资料强调 Nightwatch Documentation 是所有配置选项的权威且最新的信息来源,本技能提供的是实践指导与常见模式,具体细节、环境变量与 API 行为应以官方文档为准。资料中未提供该技能的安装命令、适用版本范围及收费信息。