夜莺-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
参考资料

MySQL 查询

场景一:配置MySQL单条件告警规则

值字段

在查询条件 SQL 语句中,选择你想要的列名作为查询结果的值字段。如下图所示,我将 count(*) 起个别名 count ,将别名 count 作为值字段取 A 这个查询条件的结果。

mysql001

标签字段

使用 GROUP BY 字段作为标签字段,告警将以此字段进行分组告警。

场景二:将过滤字段放在 where 进行过滤

如下面的查询语句:计算 severity 等级为 1、2、3的活跃告警数量。

SELECT COUNT(*) AS count FROM n9e_v6.alert_cur_event WHERE severity IN (1,2,3);

mysql002

最终产生告警时,只会展现 count 值。

mysql003

场景三:将过滤字段放在 where 进行过滤并分组告警

查询条件设置为以 severity 分组,并将 severity 设定为标签字段

SELECT severity as severity,COUNT(*) AS count FROM n9e_v6.alert_cur_event WHERE severity IN (1,2,3) GROUP BY severity;

mysql004

通过报警时间与数据预览对比发现,使用 severity 分组后,告警会根据标签字段进行分组告警。

mysql005

mysql006

场景四:多查询条件表达式模式

配置多条查询条件 sql ,并将两个查询条件的结果进行阈值告警。

mysql007

mysql008

场景五:根据时间分表的查询

在实际业务中,为了提高查询性能和便于数据管理,经常会对数据表按时间进行分表。Nightingale 支持在 SQL 语句中使用 Go 模板语法,可以动态生成表名来查询时间分表。

5.1 按日分表查询

假设日志表按天分表,表名格式为 logs_20260119logs_20260120 等。可以使用 Timestamp 函数动态生成今天的表名:

SELECT COUNT(*) AS count FROM logs_{{Timestamp "20060102"}} WHERE level = 'error';
  • {{Timestamp "20060102"}} 会被渲染为当前日期,格式为 yyyyMMdd
  • 例如今天是 2026年1月19日,SQL 会被渲染为:SELECT COUNT(*) AS count FROM logs_20260119 WHERE level = 'error';

5.2 按月分表查询

如果表按月分表,表名格式为 orders_202601orders_202602 等:

SELECT SUM(amount) AS total_amount FROM orders_{{Timestamp "200601"}} WHERE status = 'completed';
  • {{Timestamp "200601"}} 会被渲染为当前年月,格式为 yyyyMM
  • 例如今天是 2026年1月,SQL 会被渲染为:SELECT SUM(amount) AS total_amount FROM orders_202601 WHERE status = 'completed';

5.3 按年分表查询

对于按年分表的场景,表名格式为 archive_2026archive_2025 等:

SELECT COUNT(*) AS record_count FROM archive_{{Timestamp "2006"}} GROUP BY category;
  • {{Timestamp "2006"}} 会被渲染为当前年份
  • 例如今天是 2026年,SQL 会被渲染为:SELECT COUNT(*) AS record_count FROM archive_2026 GROUP BY category;

注意事项

  1. 时间格式说明:Go 语言的时间格式化使用特殊的参考时间 2006-01-02 15:04:05,不同于其他语言的格式化方式

    • 2006 - 年份(4位)
    • 01 - 月份(2位)
    • 02 - 日期(2位)
    • 15 - 小时(24小时制)
    • 04 - 分钟
    • 05 - 秒
  2. 表不存在的情况:如果分表不存在(例如当月第一天查询上月的表),查询会失败并产生告警,需要在 SQL 中做好容错处理

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