You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于New Relic错误日志创建含错误堆栈的精准告警

基于New Relic实现Java微服务错误日志的唯一告警方案

一、先解决告警事件冗余/错误缺失问题

你之前的简单告警出现一个事件包含多错误或无错误,核心是没有精准过滤和聚合错误日志,先从基础查询规则调整:

  • 定位错误日志事件:Java应用的错误日志一般存在Log事件中,用NRQL筛选真实错误:
    SELECT * FROM Log WHERE appName = '你的微服务名称' AND level IN ('ERROR', 'FATAL') AND (message LIKE '%Exception%' OR stackTrace IS NOT NULL)
    
    可根据自身日志格式调整筛选字段(比如部分日志用error字段标记错误),确保只捕获有效错误事件。
  • 避免无意义触发:设置聚合窗口(比如5分钟)和阈值,仅当窗口内出现符合条件的错误时触发告警,而非无差别捕获所有日志。

二、实现相似错误告警唯一:关联规则+特征聚合

New Relic的关联规则可将相似错误归为同一告警,核心是提取错误的唯一特征:

  1. 定义错误唯一标识:
    针对Java错误,核心特征是异常类名+业务关键词+堆栈顶部方法,用NRQL的函数提取并分组:
    SELECT count(*) FROM Log 
    WHERE appName = '你的微服务名称' AND level = 'ERROR'
    FACET regexExtract(stackTrace, '^([a-zA-Z0-9]+Exception)'), regexExtract(message, 'orderId:(\d+)')
    WHERE count(*) >= 1
    SINCE 5 MINUTES AGO
    
    用FACET按异常类、业务标识(比如订单ID)分组,确保同一类错误同一业务场景只生成一个告警事件。
  2. 创建关联规则:
    • 进入New Relic的Alerts & AI > Correlation Rules,点击创建规则。
    • 匹配条件选择上述错误日志查询,关联字段选FACET指定的特征(异常类、业务关键词)。
    • 设置关联策略为“合并相似事件”,配置时间窗口(比如15分钟),同一窗口内的相似错误会合并为一个告警,避免重复触发。

三、让告警通知包含错误堆栈

在告警通知模板中直接引用日志的stackTrace字段即可:

  • 进入告警策略的通知设置,选择目标渠道(邮件、Slack等)。
  • 自定义通知内容,比如邮件模板:

    错误堆栈详情:
    {{$event.stackTrace}}
    Slack模板示例:

    🔴 错误告警:{{$event.appName}}
    异常类型:{{$event.exceptionClass}}
    错误堆栈:
    ```{{$event.stackTrace}}```
    
    若日志中无stackTrace字段,需检查New Relic代理配置,确保开启错误堆栈收集(Java代理默认支持,自定义日志格式需保证堆栈被解析为独立字段)。

四、优化告警触发逻辑

  • 调整触发条件:基于FACET分组结果,仅当某组错误计数从0变为≥1时触发,避免重复告警。
  • 设置关闭条件:比如10分钟内该组无新错误时自动关闭告警,防止告警长期处于触发状态。
  • 测试验证:故意抛出测试错误(如NullPointerException),验证是否仅生成一个告警、通知是否包含完整堆栈,多次触发同一错误时是否合并为同一告警事件。

内容的提问来源于stack exchange,提问作者Furkan Kaya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:13:30