SLS新版告警支持多种监控目标 如SLS的日志存储 时序存储 也支持对外部系统如Promethus,Grafana,Zabbix产生的告警进行管理 在对SLS的存储进行监控时 用户可以自定义告警监控规则或者使用内置的告警规则。自定义告警监控规则主要包括监控目标 触发条件 行动配置等。本文主要介绍在创建自定义告警规则时 如何使用统一的查询分析语法来查询并定义监控目标。
查询分析语法概览SLS支持可观测性的Log Metric Trace的存储 对于不同类型的存储 SLS支持使用统一的查询分析语法来查询分析数据。本文主要介绍下查询日志 查询时序 机器学习等语法。
配置索引对于SLS中的数据日志服务采用半结构化的数据模式定义一条日志 包含日志主题 Topic 、时间 Time 、内容 Content 、来源 Source 和标签 Tags 五个数据域 其中内容数据域记录了日志的具体内容 有一个或多个内容项组成 每一个内容项为一个键值对 Key:Value 。
对于日志内容中的键值对 只有配置索引后 才能进行查询和分析操作 索引类型主要包括全文索引和字段索引。其区别如下
索引类型说明全文索引日志服务根据您设置的分词符将整条日志拆分成多个词并构建索引。在查询时 字段名称 KEY 和字段值 Value 都是普通文本。例如查询语句error 表示查询包含error关键字的日志。字段索引配置字段索引后 您可以指定字段名称和字段值 Key:Value 进行查询 缩小查询范围。例如查询语句level:error 表示查询level字段值包含error的日志。如果您要使用分析功能 必须配置字段索引且开启对应字段的统计功能。开启统计功能不会产生额外的索引流量和索引存储空间。
在SLS控制台查询页面 可以配置索引 如下示例是nginx的日志索引配置 包括日志中的host,http_referer等字段的索引。
查询分析语法基本语法
查询语句|分析语句
SLS的查询分析语法包含两部分 一部分是查询语句 一部分是分析语句 两者之间用小竖线 | 来分隔 查询语法为SLS专有语法 可以参考查询语法 分析语句支持标准的SQL92语法并且包含SLS增强的函数 可以参考分析概述。查询语句和分析语句区别如下
语句类型说明查询语句查询语句用于指定日志查询时的过滤规则 返回符合条件的日志。查询语句可以为关键词、数值、数值范围、空格、星号 * 等。 如果为空格或星号 * 表示无过滤条件。
分析语句分析语句用于对查询结果或全量数据进行计算和统计。比如需要查询一个nginx的5xx错误的次数 可以使用如下查询语句 其中查询语句用查询status超过500的日志 分析语句是一条标准的SQL聚合语句。
status 500 | SELECT count(1) as err_cnt from log
SLS新版告警自定义告警规则完全支持SLS的查询分析语法 通过SLS的查询分析语句 可以根据业务和监控需求 查询出需要监控的数据 然后设置相应的触发条件 来触发告警。
场景1 查询语句比如在监控Nginx日志时 需要查询5xx的错误日志 并且想要把这些错误相关的日志通过告警发出来 我们可以直接使用status 500 查询出来的结果包含错误的request_uri, host request_method等 这里的字段包含所有的日志索引字段。
根据上面的查询语句 我们可以直接另存为新版告警 触发条件设置为有数据。告警监控在评估时如果查询到有5xx的错误 就会触发告警。在内容模板中引用${fire_results}或者${fire_results_as_kv}即可展示错误信息。
场景2 查询语句|分析语句跟场景1中的例子相似 我们可能在告警中不需要把每个字段都通知出来 只需要最关键的字段比如host request_method request_uri status。这时候我们可以机上分析语句筛选出特定的字段
status 500 | SELECT host, request_method, request_uri, status
查询结果示例如下
在配置告警时 触发条件同样选择有数据 在内容模板中引用${fire_results}或者${fire_results_as_kv}即可展示select后的字段信息。
场景3 时序数据监控对于时序数据 SLS支持两种查询方式 SQL查询分析和SQL PromQL查询分析
SQL查询分析使用SLS时序存储接入了主机监控。现在查询主机在过去5分钟内的最大和平均CPU使用率 可有使用SQL查询分析 例句如下
*| SELECT element_at(__labels__, hostname ) as host_name, max(__value__) as max_cpu_util, avg(__value__) as avg_cpu_util FROM ecs-metric.prom WHERE __name__ cpu_util group by element_at(__labels__, hostname )
查询结果如图 在配置告警规则时 触发条件可以配置为有数据匹配 条件写avg_cpu_util 80 即可实现对平均使用率超过80%的主机进行监控 可以使用${fire_results}或者${fire_results_as_kv}引用平均使用率高于80%的主机数据。
SQL PromQL方式SLS支持使用PromQL语法对时序数据进行查询链接 支持5个PromQL函数 promql_query、promql_query_range、promql_labels、promql_label_values和promql_series。
promql_query(string)、promql_query_range(string, string)函数返回的表的结构如下表所示
字段名字段类型说明metricvarchar时序名称。如果查询分析中使用了Group By语法 那么该值可能为空。labelsmap varchar, varchar Lables信息 Map类型。timebigint时间。valuedouble某个时间点对应的值。这里以promql_query_range函数为例介绍查询CPU使用率高于80%的时序点。告警规则配置为有数据。分组评估选择“标签自动” 即会
* | select promql_query_range( cpu_util ) from metrics having value 80 limit 1000
SLS机器学习功能为您提供多种功能丰富的算法和便捷的调用方式 您可以在日志查询分析中通过分析语句和机器学习函数调用机器学习算法 分析某一字段或若干字段在一段时间内的特征。
接下来以一个异常检测函数ts_predicate_simple为例介绍下查询分析方。
函数格式
select ts_predicate_simple(x, y, nPred, isSmooth)
参数说明如下
参数说明取值x时间列 从小到大排列。格式为Unixtime时间戳 单位为秒。y数值列 对应某时刻的数据。-nPred预测未来的点的数量。long类型 取值大于等于1。isSmooth是否需要对原始数据做滤波操作。bool类型 默认为true表示对原始数据做滤波操作。以OSS访问日志为例 查询每30秒的pv波动情况 并找出异常点
* | 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)
如下图 红色圆圈表示通过机器学习算法找到的异常点 对应查找结果中的anomaly_prob 1.0 其中src表示原始值 predict表示预测值 可以在告警规则配置中对这些异常点进行检测。
告警配置如下 触发条件选择有大于2条数据满足anomaly_prob 0 表示在过取4小时内 有两个异常点即告警。
本文转载自公众号读芯术(ID:AI_Discovery)。 这一刻你正在应对什么挑战?这位前...
基本介绍 给定 n 个权值作为 n 个叶子节点,构造一颗二叉树,若该树的带权路径长...
TIOBE 公布了 2021 年 3 月的编程语言排行榜。 本月 TIOBE 指数没有什么有趣的变...
背景 我们知道 如果在Kubernetes中支持GPU设备调度 需要做如下的工作 节点上安装...
溢价 域名 的续费价格如何?通常来说,因为溢价域名的价值高于普通域名,所以溢...
本文转载自微信公众号「bugstack虫洞栈」,作者小傅哥 。转载本文请联系bugstack...
前言 统计科学家使用交互式的统计工具(比如R)来回答数据中的问题,获得全景的认...
近几年,互联网行业蓬勃发展,在互联网浪潮的冲击下,互联网创业已成为一种比较...
在Python开发过程中,我们难免会遇到多重条件判断的情况的情况,此时除了用很多...
想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区 https://...