
云服务器上New Relic基础设施与APM集成部署实战指南
一、为什么需要基础设施与APM的集成?
在云服务器环境中,运维团队常常面临一个尴尬的局面:监控体系被人为割裂成两块——一块是基础设施监控,负责看CPU、内存、磁盘、网络等底层资源;另一块是应用性能管理(APM),负责跟踪业务代码的事务耗时、错误率、外部调用。当线上出现故障时,工程师不得不在两个甚至更多的后台之间来回切换,一边盯着云服务器的资源曲线,一边翻看APM的慢事务明细,全靠经验和直觉把两边的情况拼凑起来。
这种数据孤岛的危害在复杂场景下尤为突出。比如某台云服务器的CPU突然飙高,APM里也出现了大量慢调用,但究竟是哪条SQL语句引发的?是内存泄漏导致GC频繁?还是同一台宿主机上的其他容器抢占了资源?如果缺乏统一的关联视图,排查链路就会被拉得很长,平均故障恢复时间(MTTR)往往以小时计。
New Relic的基础设施监控(Infrastructure)与APM的集成部署,正是为了解决这个问题。通过在云主机上运行基础设施代理,并将应用侧的APM代理指向同一账号和相同的实体标签,运维团队可以在一个界面里同时看到某台云服务器的CPU抢占情况和它上面运行的Java服务的慢调用。这种“上下打通”的能力,让定位效率大幅提升,原本需要多人协作的排查任务,一个人几分钟就能理清头绪。
二、云服务器上安装New Relic基础设施代理
2.1 基础设施代理的功能与安装准备
New Relic基础设施代理负责采集云服务器的操作系统级指标,包括CPU使用率、内存占用、磁盘IO、网络吞吐以及进程列表。这些数据是判断云服务器健康状态的基础,也是后续与APM数据关联的起点。在主流Linux发行版上,官方提供了脚本化安装方式,只需准备好License Key即可。
以Ubuntu为例,安装过程非常简洁。首先通过SSH登录云服务器,执行官方提供的安装脚本。脚本会自动添加New Relic的软件源、导入GPG密钥,然后安装newrelic-infra包。安装完成后,代理的配置文件位于/etc/newrelic-infra.yml,其中最重要的字段是license_key,必须填写正确,否则数据无法上报到New Relic后台。此外,还可以在这个文件中配置代理的显示名称、自定义标签等。
对于Windows云服务器,需要下载MSI安装包。运行安装程序后,在配置界面填入License Key,或者安装完成后手动编辑C:\ProgramData\New Relic\newrelic-infra\newrelic-infra.yml。安装完成后,代理会以系统服务的形式自动启动,并在开机时自启。
2.2 验证代理上线与网络连通性
安装完成后,登录New Relic控制台,进入Infrastructure页面,就能看到该主机出现在主机清单中,并且实时刷新各项指标。如果等了很久还是没有看到主机,首先要检查网络连通性。基础设施代理需要与New Relic的多个端点通信,包括infra-api.newrelic.com和metric-api.newrelic.com,这两个域名都必须能从云服务器通过HTTPS(443端口)访问。如果云服务器位于私有网络,需要配置NAT网关或代理出口,确保出站流量不被拦截。
可以用一个简单的curl命令来测试连通性:
curl -v https://infra-api.newrelic.com如果返回{"status":"OK"},说明网络没问题。如果超时或被拒绝,就需要检查安全组规则或防火墙策略。另外,有些企业环境会限制出站域名,需要将New Relic的域名加入白名单。
2.3 配置自定义标签:关联的关键一步
为了让后续APM数据能和这台云主机关联,强烈建议在基础设施代理配置中添加自定义标签。标签是New Relic里串联不同遥测数据的纽带,没有统一标签,APM里的应用实例可能和主机“认不上亲”。例如,在/etc/newrelic-infra.yml中添加:
labels:
environment: production
role: order-service
team: backend配置完成后重启代理,主机卡片上就会显示这些标签维度。在后续的告警策略、仪表盘筛选、实体关联中,这些标签都会发挥作用。实际项目中,标签命名规范非常重要,建议团队内部统一约定,比如一律用小写字母、单词间用短横线连接,避免出现大小写不一致导致的分组混乱。
三、APM代理与基础设施监控的关联部署
3.1 APM代理的安装与配置要点
APM侧需要在云服务器上部署对应语言的应用代理。以Java为例,需要下载newrelic.jar和配套的newrelic.yml配置文件。关键动作是在APM配置里设置与基础设施代理相同的license_key,并尽量复用基础设施代理打上的标签思路。在newrelic.yml中,除了app_name之外,还可以通过labels字段设置与基础设施一致的标签:
common:
license_key: 'your_license_key'
labels:
environment: production
role: order-service这样,New Relic后端会根据上报的IP地址和主机代理的心跳,自动把同一台云服务器上的APM应用实体和基础设施主机实体做映射。需要注意的是,APM代理的app_name可以设置多个,但建议与业务模块对应,方便在Entity Explorer中区分。
3.2 容器化场景的特殊处理
现代应用经常跑在Docker容器里,这时基础设施代理若只安装在宿主机上,它能采集到容器的资源占用情况,但APM代理如果也在容器里运行,两者的关联可能会出现问题。因为容器有自己的网络命名空间,APM上报的IP可能是容器内部的IP,而不是宿主机的IP,导致New Relic无法自动匹配。
解决办法有两种:一种是在宿主机上安装基础设施代理,并开启容器集成功能(通过配置docker_options或使用官方提供的容器镜像);另一种是在APM代理中显式设置host.name或instance.id,使之与基础设施代理上报的主机名一致。更推荐的做法是:在宿主机上安装基础设施代理,并开启容器集成,这样基础设施代理会自动发现宿主机上的所有容器,并采集它们的资源数据。同时,APM代理在容器内运行时,也要设置与宿主机基础设施代理相同的environment标签。这样在Entity Explorer里点开主机,侧边栏就能列出该主机上所有容器化的APM服务。
曾经有一个团队在测试环境中漏打了标签,导致APM报错率飙升却找不到对应的云服务器。后来排查发现,是因为APM代理的labels字段为空,而基础设施代理的标签是environment: test,两者不匹配,所以New Relic没有将它们关联起来。补上标签后,十分钟就定位到是一台缩容后的机器磁盘写满导致的应用崩溃。
3.3 云厂商元数据的自动注入
如果云服务器运行在AWS、阿里云、腾讯云等主流云平台上,New Relic基础设施代理还能通过云厂商的元数据接口自动获取实例ID、可用区、规格类型等信息。这些信息会自动变成基础设施实体的属性,APM里也能通过关联查询到。例如,在APM的慢事务详情页中,可以直接看到该事务运行在哪个可用区的哪台实例上,这对于排查区域性故障非常有帮助。
建议在部署文档中明确操作顺序:先安装基础设施代理并验证主机在线,再发布带APM代理的应用。如果顺序颠倒,APM代理先启动,而基础设施代理尚未上报数据,可能会导致关联延迟几十分钟。虽然New Relic最终会自动关联,但尽早建立关联有助于第一时间获得完整的监控视图。
四、统一监控视图与告警联动实践
4.1 统一视图的价值
集成部署完成后,最核心的收益就是统一视图。在New Relic的Entity Explorer页面,选择一台云服务器,不仅能看到CPU、内存、磁盘的实时曲线,还能直接看到该服务器上部署的所有APM应用的错误率、吞吐量和Apdex分数。当基础设施代理报出某台机器网络丢包时,右侧APM面板若同步出现数据库调用延时变长,基本可以断定是网络层抖动拖慢了事务,而不用分别查两个系统再靠脑补对应。
这种“上下打通”的视图在排障时尤其高效。比如有一次,运维人员发现一台云服务器的CPU使用率突然从20%跳到95%,同时APM中对应的Java服务出现了大量超时。通过统一视图,他们立刻看到CPU飙升的时间点和慢事务的开始时间完全吻合,进一步点击慢事务详情,发现是一条未优化的SQL语句在全表扫描。如果没有集成视图,他们可能需要先在基础设施页面截图,再去APM页面对比时间轴,效率低得多。
4.2 跨类型告警策略的构建
告警方面,集成部署使得建立跨类型的告警策略成为可能。传统做法中,基础设施告警和应用告警是分开的,比如CPU过高发一条通知,APM Apdex过低又发一条通知,值班人员需要自己判断两者是否相关。而在New Relic的Alerts中,可以使用NRQL(New Relic Query Language)将基础设施指标和APM指标做联合查询。
例如,可以创建一条告警规则:当主机CPU持续高于85%,并且同一environment标签下的APM应用Apdex低于0.8时,触发紧急通知。这种组合条件依靠单一APM或单一基础设施工具都难以实现,集成后只需在NRQL里把infraMetric和apmMetric做join。某家SaaS公司采用这种方法后,平均故障恢复时间从四十分钟降到了十二分钟,因为值班人员收到的通知直接携带了双向证据链——既显示了是哪台机器出了问题,又显示了是哪个应用受到了影响。
4.3 日常运维中的标签与版本管理
集成部署不是一次性任务,而是需要持续维护的工程实践。日常运维中应定期审查标签规范和代理版本。基础设施代理和APM代理都有版本更新,旧版本可能不支持新的云服务器规格元数据,或者存在已知的性能问题。建议使用配置管理工具(如Ansible、SaltStack)统一推送代理升级,并在变更单中检查标签是否遗漏。
另外,标签的命名规范也需要定期对齐。随着业务发展,可能会有新的环境、新的角色加入,如果每个人随意添加标签,最终会导致标签爆炸,反而失去了关联的意义。建议团队制定标签字典,明确每个标签的用途和取值范围,并在部署脚本中强制校验。
五、常见部署误区与排查思路
5.1 License Key与账号一致性
不少团队在云服务器上装完基础设施代理就以为集成完成了,结果APM里应用还是孤零零的,没有与任何主机关联。最常见的原因是APM的license_key复制错了账号。每个New Relic账户有唯一的License Key,如果基础设施代理用的是A账号的Key,而APM代理用的是B账号的Key,那么两者永远不会关联。排查时,先检查主机是否出现在Infrastructure清单中,再检查APM应用设置里的Account ID是否与基础设施账号一致,最后确认两者标签里的environment值是否完全相同——哪怕大小写不同,New Relic也会视为两个不同的维度。
5.2 防火墙与网络策略
另一个常见误区是防火墙只开了APM上报端口,却堵了基础设施代理需要的域名。基础设施代理除了上报指标,还要拉取实体状态和日志配置,如果HTTPS出站被限制,主机可能会间歇性掉线。可以用curl从云服务器测试infra-api.newrelic.com的连通性,如果返回{"status":"OK"}则正常。如果返回超时,需要检查安全组或代理配置。
5.3 容器内代理的错误安装
还有人把基础设施代理装进了容器,却没有挂载宿主机的PID namespace,导致采集到的进程全是容器自身的,失去了对宿主机整体资源的可见性。正确的做法是使用官方提供的容器镜像,并授权host PID模式,或者在宿主机上裸装基础设施代理,再通过容器集成功能来采集容器数据。如果坚持要在容器内运行基础设施代理,务必在启动参数中加入--pid=host。
5.4 关联延迟的处理
当所有检查都通过,但实体仍然没有关联时,可以借助New Relic的Entity Relations图人工比对。点开主机实体,查看“Linked entities”列表中是否有对应的APM应用。如果为空,多半是因为上报时间间隔没有重叠。让APM应用制造一点流量,等待两分钟刷新,关联通常会自动出现。如果还是不行,可以提交工单给New Relic技术支持,提供主机ID和应用ID,让他们后台检查映射关系。
把这些常见误区写进内部运维手册,能够帮助新入职的同事快速上手,减少重复踩坑。集成部署的本质是建立一套数据关联的“高速公路”,而标签就是这条路上的路标,只有路标清晰、道路畅通,监控数据才能真正发挥1+1>2的效果。