夜莺-Nightingale
夜莺V7
项目介绍 功能概览
部署升级 部署升级
数据接入 数据接入
告警管理 告警管理
数据查看 数据查看
功能介绍 功能介绍
API FAQ
夜莺V6
项目介绍 架构介绍
快速开始 快速开始
黄埔营
安装部署 安装部署
升级
采集器 采集器
使用手册 使用手册
API API
数据库表结构 数据库表结构
FAQ FAQ
开源生态
Prometheus
版权声明
第1章:天降奇兵 第1章:天降奇兵
第2章:探索PromQL 第2章:探索PromQL
第3章:Prometheus告警处理 第3章:Prometheus告警处理
第4章:Exporter详解 第4章:Exporter详解
第5章:数据与可视化 第5章:数据与可视化
第6章:集群与高可用 第6章:集群与高可用
第7章:Prometheus服务发现 第7章:Prometheus服务发现
第8章:监控Kubernetes 第8章:监控Kubernetes
第9章:Prometheus Operator 第9章:Prometheus Operator
参考资料

阿里云 SLS

接入 SLS 数据源

在创建数据源连接时,主要填写以下参数;

访问域名可以在阿里云 SLS 的Project中找到,如果 FlashCat 部署的主机和阿里云 SLS 部署在同一个地域,推荐使用私网域名;如果 FlashCat 部署的主机在非阿里云环境,推荐使用公网域名;如果 FlashCat 在私有云部署,访问就需要填写出网代理地址访问公网域名; 如下图所示 AK ID 和 AKS:阿里云 AccessKey 管理查看创建。

SLS 日志查询

日志原文

展示阿里云 SLS 接入源数据,未经过原文处理。

统计图表

统计表是将查询条件结果进行展示,展示方式分为表格图和时序图两种.

表格图

根据举例的查询条件语句*|SELECT status,count(*) as count GROUP BY status。将查询统计 status 字段,并将统计计算结果命名为 count ,将结果 count 以 status 通过表格分组展示。

语句简析

*| select ... 说明: |管道符左侧*是查询语句;|管道符右侧 select...是分析语句;

status :表示日志数据中的一个字段。

count() AS count: 表示对每种 status 进行计数,并将计数结果命名为count。

GROUP BY status:表示将查询结果按照 status 字段进行分组。

更多语法学习可以参考:查询语法 分析语法 函数概览

时序图

将阿里云 SLS 日志查询结果提取值,将过滤条件作为指标中 tag 转存展示。下面有一些查询举例,可以学习理解一下。

常用基础查询语法

查询GET请求成功(状态码为200~299)且请求时间小于60秒的日志: request_method:GET and status in [200 299] not request_time>=60

查询remote_user字段值不为空的日志not remote_user:""

查询remote_user字段值为空的日志remote_user:""

查询remote_user字段值不为null的日志not remote_user:"null"

查询不存在remote_user字段的日志not remote_user:*

查询存在remote_user字段的日志remote_user:*

查询host字段值不为123的日志: not host:123.*

场景一:查询代理日志中状态码为403和405的日志,使用 host 、 method 、request_uri 分组统计。

status:403 OR status:405 | SELECT host AS host,request_method AS method,request_uri AS url,count(*) AS count GROUP BY host,method,url 这个语句也可以变形为程序错误日志,如: errCode: xxx or errCode:xxx | select ...

场景二:查询 request_method 字段以GE开头,且 client_ip 字段范围是 8.140.205.* 的数据,使用 host 、 method 、request_uri 分组统计

request_method:GE* and client_ip:8.140.205.* | SELECT host AS host,request_method AS method,request_uri AS url,client_ip AS cip,count(*) AS count GROUP BY host,method,url,cip

场景三:查询请求时间小于1秒的成功请求的日志中包含 flashcat 字符串的日志,使用 host 、 method 、request_uri 、status 、request_uri 分组统计。

flashcat AND read_request_time < 1 AND (status >= 200 AND status <= 299) | SELECT host AS host, request_method AS method, request_uri AS url,status as st, read_request_time as rqt,count(*) AS A GROUP BY host, method, url,status,read_request_time

场景四:查询昨日代理日志中状态码为403和405的日志,使用 host 、 method 、request_uri 分组统计。

status:403 OR status:405 | SELECT host AS host, request_method AS method, request_uri AS url, from_unixtime(__time__) AS time, count(*) AS A WHERE __time__ < to_unixtime(current_date) AND __time__ > to_unixtime(date_add('day', -1, current_date)) GROUP BY host, method, url, time

这个语句主要使用了from_unixtime()to_unixtime()current_datedate_addday函数;

rom_unixtime 函数用于将UNIX时间戳转化为timestamp类型的日期和时间表达式,格式为YYYY-MM-DD HH:MM:SS.Ms或YYYY-MM-DD HH:MM:SS.Ms Time_zone。

current_date 函数将timestamp类型的日期和时间表达式转化成UNIX时间戳。

current_date 函数用于返回当前日期,格式为YYYY-MM-DD。

date_add 函数用于在日期或时间中添加或减去指定的时间间隔。

day 函数用于提取日期和时间表达式中的天数,按月计算。day函数等同于day_of_month函数。

SLS 日志告警

在告警规则—> 选择 log 数据源 —> 配置查询语句和提取值 ValueKey —> 选择简单模式设置指定时间内 ValueKey 的阈值即可。

配置场景一:查询代理日志中状态码为404和405的日志数量,如果查询结果大于0且不等于3个报警。

查询语句就是上面介绍的查询语法status:404 OR status:405 | SELECT status AS status,count(*) AS count GROUP BY status,这里是以查询值结果进行条件判断,所以在条件判断时使用了$A > 0$A !=3

配置场景二:配置不同的指标进行结果判断,status:404值大于100且status:405值大于1触发报警。

为了实现不同的语句值联合判断,需要填写两个不同的查询分析语句,将值取出进行判断,判断条件分别使用提取值$A$B进行比较运算。

注意

  • 与PromQl一样,如果数据标签不一致查询分析语句会被视为两条不同的曲线,无法进行比较运算。这种情况下不对 LabelKey 进行设置,这样就能保证数据曲线不会因为标签不同无法进行运算了。
  • 目前暂时只支持 “等于” 数值,但不支持 “等于” 字符串。所以在过滤字符串时需要将字符串放到查询语句中即可。

排错分析

如果配置完成告警无法正常报警的话,可以查看一下N9E 的 INFO.log 日志过滤关键词rule_eval,下面就是日志的示例。

正确日志:从日志可以看出 $A 和 $B 都获取了对应值,且表达式返回结果为 true ,表示满足表达式。

错误日志:首先从截图日志可以看出返回结果为 false ,标识不满足表达式条件;其次可以看到配置了一条告警计算条件却出现了两个 false 返回;这就很大可能是因为 数据标签不一致查询分析语句会被视为两条不同的曲线,两个数据曲线无法满足告警计算条件,所以无法正常告警。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat