将日志采集到日志服务后,您可以通过日志服务告警系统实现基于日志关键字的告警。

背景信息

日志记录了系统的运行过程及异常信息,例如warning日志、error日志、Go语言中的panic错误日志、Java语言中的java.lang.StackOverflowError错误日志、系统运行状态(例如支付失败)日志。日志关键字的检索和监控告警是系统运行中比较常见的需求,您可以通过检索日志中的关键字和设置告警,快速感知和定位问题。日志服务提供免运维、高性能、配置灵活的告警方案,帮助您实现基于日志关键字的告警。

案例一:出现关键字即触发告警

如果您希望日志中出现目标关键字时,就能触发告警,则您可以参考本案例设置查询语句和告警监控规则。

  • 查询语句

    选择查询时间范围为15分钟(相对),然后执行如下语句,查询包含ERROR关键字的日志。具体操作,请参见查询和分析日志

    ERROR
  • 查询结果

    根据下述查询结果可知,当前15分钟内出现一次ERROR关键字。

    关键字告警
  • 告警监控规则配置
    基于上述查询结果创建告警监控规则。具体操作,请参见创建日志告警监控规则。重要配置项说明如下:
    • 设置触发条件有数据,则当日志中出现ERROR关键字时,触发告警。
    • 设置标注中的描述${logging}内容模板SLS内置内容模板,则告警通知中将引用原始日志中logging字段的内容。
    告警监控规则
  • 告警通知

    创建上述告警监控规则后,只要日志中出现ERROR关键字,您就可以在钉钉群中收到告警通知。您还可以单击详情,查看告警发生时的日志,进行溯源。

    告警通知

案例二:根据关键字出现的次数设置告警

如果您希望在一定时间范围内日志关键字出现的次数达到指定次数时,才触发告警,则您可以参考本案例设置查询分析语句和告警监控规则。

  • 查询分析语句

    选择查询时间范围为1小时(相对),然后执行如下语句,统计1小时内出现ERROR关键字的次数。具体操作,请参见查询和分析日志

    ERROR | SELECT count(*) AS cnt
  • 查询分析结果

    根据下述查询分析结果可知,当前1小时内出现一次ERROR关键字11次。

    查询结果
  • 告警监控规则配置
    基于上述查询分析结果创建告警监控规则。具体操作,请参见创建日志告警监控规则。重要配置项说明如下:
    • 设置触发条件有数据匹配,cnt > 5,则1小时内日志中出现ERROR关键字大于5次时,触发告警。
    • 设置标注中的描述1小时内发生${cnt}次ERROR报错内容模板SLS内置内容模板,则告警通知中将显示当前1小时内日志中出现ERROR关键字的次数。
    告警规则配置
  • 告警通知

    创建上述告警监控规则后,只要当前1小时内日志中出现ERROR关键字的次数超过5次,您就可以在钉钉群中收到告警通知。您还可以单击详情,查看告警发生时的日志,进行溯源。

    告警通知

案例三:根据关键字出现的次数环比昨日设置告警

当日志关键字的出现存在一定周期(例如以天为周期)时,白天出现的概率高,晚上出现的概率低,则此时不适合使用关键字次数这个绝对值来判断系统是否异常。您可以使用同比和环比函数计算不同日期的同一时间段内关键字出现次数的比值,并设置告警。

  • 查询分析语句

    选择查询时间范围为1小时(相对),然后执行如下语句,统计当前1小时与昨天同时段日志中出现ERROR关键字的次数的比值。具体操作,请参见查询和分析日志。其中关于compare函数的更多信息,请参见同比和环比函数

    ERROR |
    SELECT
      diff [1] AS today,
      diff [2] AS yesterday,
      round((diff [3]-1) * 100, 2) AS ratio
    FROM  (
        SELECT
          compare(cnt, 86400) AS diff
        FROM      (
            SELECT
              COUNT(*) AS cnt
            FROM          log
          )
      )
  • 查询分析结果

    根据下述查询分析结果可知,当前1小时出现ERROR关键字11次、昨天同时段出现ERROR关键字6次、增长率为83.33。

    查询分析结果
  • 告警监控规则配置
    基于上述查询分析结果创建告警监控规则。具体操作,请参见创建日志告警监控规则。重要配置项说明如下:
    • 设置触发条件有数据匹配,ratio > 10,则当前1小时与昨天同时段出现ERROR关键字的次数比值大于10%时,触发告警。
    • 设置标注中的描述1小时内错误数为${today},昨日同期为${yesterday},环比增长${ratio}%内容模板SLS内置内容模板,则告警通知中将显示当前1小时内出现ERROR关键字的次数、昨天同时段出现ERROR关键字的次数以及变化率。
    告警监控规则
  • 告警通知

    创建上述告警监控规则后,只要当前1小时与昨天同时段的日志中出现ERROR关键字的次数比值大于10%,您就可以在钉钉群中收到告警通知。您还可以单击详情,查看告警发生时的日志,进行溯源。

    告警通知

案例四:使用机器学习算法进行异常点检测告警

上述案例已覆盖关键字告警的基本场景,但在某些特殊场景下,还需借助日志服务机器学习算法。例如目标关键字的出现频率在全天都比较平稳,但可能在某个时刻突然出现陡增或陡降的情况,并且您希望及时感知到该变化。针对该场景,您可以通过日志服务机器学习算法,进行时序预测和异常点检测。关于机器学习算法的更多信息,请参见机器学习函数

  • 查询分析语句

    选择查询时间范围为4小时(相对),然后执行如下语句,统计当前4小时内ERROR错误数出现异常的次数。具体操作,请参见查询和分析日志。其中关于ts_predicate_simple函数的更多信息,请参见ts_predicate_simple

    ERROR |
    SELECT
      ts_predicate_simple(stamp, value, 6)
    FROM  (
        select
          __time__-__time__ % 30 AS stamp,
          count(1) AS value
        FROM      log
        GROUP BY
          stamp
        ORDER BY
          stamp
      )
  • 查询分析结果
    根据下述查询分析结果可知,返回列包括src、predict、upper、lower、anomaly_prob等,其中anomaly_prob大于0表示有异常。返回结果中anomaly_prob大于0的数据条数表示异常点个数,因此您可以基于anomaly_prob大于0的数据条数设置告警。查询分析结果

    您还可以选择时序图展示查询分析结果,时序图将更直观地展示陡降的数据。时序图中的红色小圆圈表示异常点,从图中可知,当前时间段内出现了15个异常点。

    查询分析结果
  • 告警监控规则配置
    基于上述查询分析结果创建告警监控规则。具体操作,请参见创建日志告警监控规则。重要配置项说明如下:
    • 设置触发条件有特定条数据匹配,>,5,anomaly_prob > 0,则当前4小时内出现异常的次数超过5,触发告警。
    • 设置标注中的描述过去4小时内ERROR错误数异常次数超过5次内容模板SLS内置内容模板,则告警通知中将显示当前4小时内出现异常点的次数。
    告警监控规则
  • 告警通知
    创建上述告警监控规则后,只要当前4小时内出现异常的次数超过5次,您就可以在钉钉群中收到告警通知。您还可以单击详情,查看告警发生时的日志,进行溯源。告警通知