什么是 Laravel Nightwatch
Laravel Nightwatch 是一个用来持续监控 Laravel 生产环境的托管型 SaaS 平台。它会实时采集并可视化 HTTP 请求、SQL 查询、异常、队列作业、日志、定时任务等应用整体的遥测数据。Nightwatch 是付费服务(按月计费)。免费额度也能使用,但可采集的事件数量有上限。要在免费额度下实用起来,后面提到的采样与过滤配置几乎是必备的。
与 Telescope、Pulse 的差异
Nightwatch 与 Laravel 生态里已有的监控/调试工具目标不同,下面梳理各自用途。| 工具 | 用途 | 托管形式 | 目标环境 |
|---|---|---|---|
| Telescope | 开发时的调试与查询排查 | 自托管(在 Laravel 应用内) | 本地开发 |
| Pulse | 性能指标聚合与展示 | 自托管(在 Laravel 应用内) | 生产 / 预发布 |
| Nightwatch | 生产应用的实时监控 | Laravel 托管的 SaaS | 生产环境 |
架构
Nightwatch 采用在 Laravel 应用和 Nightwatch 云之间夹一个 agent 进程的架构。 Agent 在本地(127.0.0.1:2407)等待,接收来自 Laravel 应用的事件后转发到云端。因此 agent 进程需要一直保持运行。
安装与初始设置
1. 创建账号与应用
在 nightwatch.laravel.com 创建账号,并注册组织和应用。注册应用后会得到一份环境 token。2. 安装包
--dev 标志。Nightwatch 就是面向生产环境使用的。
3. 配置 token
在.env 中加上 token。
4. 启动 agent
5. 在测试环境中禁用
建议在测试执行时禁用 Nightwatch。phpunit.xml 里配置。
在免费额度下也能实用起来的配置
降低采样率
NIGHTWATCH_REQUEST_SAMPLE_RATE 默认是 1.0(采集所有请求)。免费额度下建议压到 0.1(10%)左右。
关闭 query 采集
数据库查询占用的事件量往往非常大。免费额度下关掉查询采集,能为异常、请求、作业等重要事件腾出空间。其他过滤配置
需要时也可以关闭缓存事件、邮件的采集。免费额度推荐配置汇总
主要功能
请求监控
按 HTTP 请求采集响应时间、状态码、路由信息等。可以定位异常慢的端点,发现性能瓶颈。异常追踪
实时捕获生产环境中的未处理异常。自动记录堆栈跟踪与源代码片段,方便排查原因。日志采集
与 Laravel 的日志系统(Log::error() 等)集成,把结构化日志发送到 Nightwatch。
作业与定时任务监控
追踪队列作业、定时任务的执行历史、成功/失败状态、执行时间。可以快速定位批处理问题。部署追踪
把每次发布的变更与问题关联起来。可以直观地进行“这次部署之后异常增加了”一类的排查。告警与通知
通过 Slack 集成或 Webhook,可以在异常激增或性能下降时立即通知。Telescope 和 Nightwatch 的取舍
- 本地开发 → Telescope
- 想要生产的聚合面板 → Pulse
- 想要生产的详细追踪与告警 → Nightwatch
总结
Laravel Nightwatch 是一款能大幅提升生产 Laravel 应用可观测性的 SaaS 工具。引入时请记住以下几点:- agent 进程需要一直运行
- 在免费额度下,
NIGHTWATCH_REQUEST_SAMPLE_RATE=0.1和NIGHTWATCH_IGNORE_QUERIES=true基本是必备 - Telescope(开发)、Pulse(聚合)、Nightwatch(监控)角色不同,可以配合使用
Laravel Telescope 实战技巧
本地开发调试请使用 Telescope。