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

腾讯云 CLS

接入 CLS 数据源

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

地域(Region)可以在腾讯云 CLS 的日志主题中找到,地域需要和腾讯云日志主题所在地域一致; 如下图所示

AK ID 和 AKS腾讯云用户密钥管理查看创建。

CLS 日志查询

日志原文

展示腾讯云 CLS 接入源数据,未经过原文处理。

统计图表

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

表格图

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

语句简析 | select …: |管道符左侧是检索条件;|管道符右侧 select …是 SQL 语句;

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

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

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

更多语法学习可以参考:语法规则

时序图

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

常用检索条件语法

检索 GET 请求中失败(状态码大于400)的日志:method:GET AND status>400

检索 ERROR 或 WARNING 级别的日志:level:(ERROR OR WARNING)

检索非 INFO 级别 的日志:NOT level:INFO

检索不存在remote_user字段的日志:not remote_user:*

检索存在remote_user字段的日志:remote_user:*

检索host字段值不为123的日志: not host:123.*

场景一:按分钟统计 GET 请求中失败(状态码大于400)的日志条数

method:GET AND status:>400 | select histogram(__TIMESTAMP__, interval 1 minute) as analytic_time_minute, count(*) as errorCount group by analytic_time_minute limit 1000

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

method:GE* and remote_addr:116.178.232.* | SELECT http_host AS host,method AS method,request_uri AS url,count(*) AS count GROUP BY host,method,url

场景三:查询请求时间小于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 COUNT GROUP BY host, method, url,st,rqt

CLS 日志告警

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

配置场景一:查询代理日志中状态码为200和301的日志数量,如果查询结果大于10且小于15报警。

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

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

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

注意

  • 与PromQl一样,如果数据标签不一致查询分析语句会被视为两条不同的曲线,无法进行比较运算。这种情况下不对 LabelKey 进行设置,这样就能保证数据曲线不会因为标签不同无法进行运算了。

  • 目前暂时只支持 “等于” 数值,但不支持 “等于” 字符串。所以在过滤字符串时需要将字符串放到查询语句中即可。

排错分析

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

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

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

开源版
Flashcat
Flashduty