New Relic:实时应用性能管理
bash npm install newrelic --save
**步骤 2**:从 node_modules 中复制默认配置文件到项目根目录。
```bash
cp node_modules/newrelic/newrelic.js ./newrelic.js
步骤 3:编辑 newrelic.js 文件,填入你的 License Key 和应用名称。
exports.config = {
app_name: ['My App Name'], // 在 New Relic 界面中显示的名称
license_key: 'YOUR_LICENSE_KEY',
logging: {
level: 'info' // 调试时可改为 'trace'
}
};
步骤 4:在应用启动入口的第一行引入代理。
require('newrelic');
// 其他应用代码...
步骤 5:重启应用,代理便会开始自动采集数据。
3.3 验证数据上报
重启应用后,生成一些业务请求(如访问几个页面或调用 API)。登录 New Relic 网站,进入 APM & Services 页面,应该能在几分钟内看到你的应用出现,并显示吞吐量、响应时间等实时图表。如果没有数据,检查 newrelic_agent.log 日志文件排查连接问题。
4. APM 界面导航与关键指标解读
成功接入数据后,让我们熟悉最重要的几个监控视图。
4.1 概览仪表板
打开任一 APM 应用,默认显示的 Overview 页面包含时间序列图表:
- 响应时间(Web response time):平均、中位数、95 分位的耗时曲线。
- 吞吐量(Throughput):每分钟请求数(rpm)。
- 错误率(Error rate):错误数占请求总数的百分比。
- Apdex 评分:一条彩色条带,绿色为满意区域。
所有图表支持拖拽选择时间范围,或切换 30 分钟到 7 天的视图。
4.2 事务列表与慢查询追踪
点击左侧菜单 Transactions,你会看到所有自动识别的事务列表,按最耗时排序。每个事务展示:
- 平均响应时间、每分钟调用次数、Apdex 等。
- 点击某个事务,进入详情页,可查看 响应时间分解(代码、数据库、外部服务各占多少)。
- 切换到 Slowest traces 标签,列出该事务近期最慢的若干次追踪。展开一次慢追踪,能看到火焰图式的分段计时,精准定位缓慢的数据库查询或慢方法。
4.3 数据库与外部服务监控
New Relic 自动解析到数据库、缓存、消息队列、HTTP 客户端的调用。
- Databases 页面:展示各数据库的平均查询时间、吞吐量、慢查询列表。支持 MySQL、PostgreSQL、MongoDB 等。
- External services 页面:显示对外部 HTTP API 的调用耗时、失败率,帮你快速发现第三方服务引发的性能问题。
4.4 错误收件箱与堆栈跟踪
点击 Errors 进入错误分析模块。左侧列出错误分组(按类型和消息),右侧显示:
- 错误发生次数趋势图。
- 影响的事务和用户数。
- 错误详情:完整堆栈跟踪、发生的请求 URL、查询参数、用户代理等上下文信息。
你可以设置“期望错误”将这些错误标记为已处理,降低噪声。
5. 自定义监控与告警
默认监控已经非常强大,但根据业务需求自定义属性和告警能让可观测性更贴合你的系统。
5.1 添加自定义属性
在某些语言代理中,你可以向事务注入业务属性,以便后续过滤和分组。以 Node.js 为例:
const newrelic = require('newrelic');
app.get('/order/:id', (req, res) => {
newrelic.addCustomAttribute('orderId', req.params.id);
newrelic.addCustomAttribute('customerType', req.user.type);
// ... 业务逻辑
});
这些属性会出现在事务追踪的详情中,并可在 NRQL 查询中使用。
5.2 创建告警策略与条件
进入 Alerts & AI 菜单,按以下流程配置告警:
- 创建策略(Policy):给策略命名,如“生产环境关键应用”。
- 添加条件(Condition):选择受监控的应用,设置指标阈值。例如:
- 错误率 > 5% 持续 5 分钟
- 平均响应时间 > 800ms 持续 10 分钟
- Apdex < 0.8 持续 5 分钟
- 设置通知渠道:将条件绑定到通知目的地,如邮件、Slack、PagerDuty 等。
5.3 Webhook 与通知集成
New Relic 支持通过 Webhook 将告警推送到自定义服务。配置 Webhook 时,提供端点 URL 和自定义 Payload,告警触发后 New Relic 将 POST JSON 数据。配合企业聊天工具或 ITSM 系统,可实现自动化运维。
6. 深入分布式追踪(Distributed Tracing)
现代微服务架构中,一个请求可能经过多个服务。分布式追踪让你跨服务查看完整调用链。
- 开启分布式追踪:在代理配置中启用
distributed_tracing.enabled = true(多数语言默认开启)。 - Span 上下文传递:New Relic 自动在 HTTP 头中注入 W3C Trace Context 信息,连接上下游服务。
- 使用 Distributed Tracing 页面:选择一个事务,可展开其分布式追踪树,清晰展示每个 Span(服务、操作)的耗时、调用关系和错误标记。
这极大缩短了多服务环境下定位根因的时间。
7. 使用 Insights 查询数据(NRQL 基础)
所有上报到 New Relic 的数据都可通过 NRQL(New Relic Query Language)进行即席查询。Insights 查询界面位于 Query your data 区域。
基础查询语法:
SELECT <attributes> FROM <event_type> WHERE <conditions> SINCE <time> LIMIT <n>
常用例子:
-- 查看过去1小时平均响应时间最长的事务
SELECT average(duration) FROM Transaction WHERE appName = 'My App' SINCE 1 hour ago FACET name LIMIT 10
-- 统计过去24小时错误率
SELECT percentage(count(*), WHERE error is true) FROM Transaction SINCE 24 hours ago
-- 列出特定用户ID相关的所有事务追踪
SELECT * FROM Transaction WHERE custom.userId = '12345' SINCE 30 minutes ago