MySQL

查询表格

和在终端登录 MySQL 之后,输入 SQL 查询类似,例如查询整个表的数据:

  1. select * from database_name.table_name limit 10

查询时序图

  1. 必须在 SQL 中使用 as time 的语法指定哪一列是时间列,然后 group by time order by time desc 对时间做排序,例如
  1. select count(*) as count, trigger_time as time
  2. from n9e_v6_plus.alert_his_event
  3. group by time
  4. order by time
  5. desc LIMIT 100

MySQL - 图1

  1. 可以使用 where 条件,执行查询某一个时间段的数据,样例如下

2.1 查询最近一分钟的数据,也可以把 WEEK 换成 MINUTE、 SECOND、HOUR、DAY、MONTH 等

  1. SELECT count(*) AS count, trigger_time AS time FROM n9e_v6_plus.alert_his_event WHERE FROM_UNIXTIME(trigger_time) >= DATE_SUB(NOW(), INTERVAL 1 WEEK)

MySQL - 图2

2.2 查询某一个时间段的数据,trigger_time 是 unix 时间戳 (1720061167) 的情况WHERE 语句可以直接写 WHERE trigger_time >= 1720060214 AND trigger_time < 1720061214或者 trigger_time >= $__unixEpochFrom() AND trigger_time < $__unixEpochTo(), $__unixEpochFrom() 表示开始的unix时间戳,$__unixEpochTo() 表示结束时间的unix时间戳

  1. SELECT count(*) AS count, trigger_time AS time
  2. FROM n9e_v6_plus.alert_his_event
  3. WHERE trigger_time >= $__unixEpochFrom() AND trigger_time < $__unixEpochTo()
  4. GROUP BY time
  5. ORDER BY time DESC

MySQL - 图3

2.3 查询最近 7 天每分钟产生的告警数量

  1. SELECT FROM_UNIXTIME(trigger_time, '%Y-%m-%d %H:%i:00') AS alert_minute,COUNT(*) AS alert_count
  2. FROM n9e_v6_plus.alert_his_event
  3. WHERE trigger_time >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY))
  4. GROUP BY alert_minute
  5. ORDER BY alert_minute DESC LIMIT 100;

MySQL - 图4

2.4 查询最近 7 天每分钟产生的告警数量

  1. SELECT FROM_UNIXTIME(trigger_time, '%Y-%m-%d %H:%i:00') AS alert_minute,COUNT(*) AS alert_count
  2. FROM n9e_v6_plus.alert_his_event
  3. WHERE trigger_time >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY))
  4. GROUP BY alert_minute
  5. ORDER BY alert_minute DESC;

2.5 alert_his_event 样例表结构如下

  1. CREATE TABLE `alert_his_event` (
  2. `id` bigint unsigned not null AUTO_INCREMENT,
  3. `cate` varchar(128) not null,
  4. `rule_id` bigint unsigned not null,
  5. `rule_name` varchar(255) not null,
  6. `prom_ql` varchar(8192) not null comment 'promql',
  7. `first_trigger_time` bigint,
  8. `trigger_time` bigint not null,
  9. `trigger_value` varchar(255) not null,
  10. PRIMARY KEY (`id`),
  11. KEY (`trigger_time`, `rule_id`)
  12. ) ENGINE=InnoDB DEFAULT CHARSET = utf8mb4;

宏变量使用

在配置仪表盘的时候,一般我们要查询数据的时间范围不是固定的,需要随着仪表盘右上角的时间返回变化而变化,这个时候就需要使用和时间相关的宏变量了,下面是我们目前支持的宏变量以及使用说明 (备注:下面说明中的 1494410783 是前端传的 start_time,1494410983 是前端传的 end_time)

宏变量描述
$timeFilter(dateColumn)如果 dateColumn 格式是 %Y-%m-%d %H:%i:%s,可以使用此宏变量,将被替换为  dateColumn BETWEEN FROM_UNIXTIME(1494410783) AND FROM_UNIXTIME(1494410983)
$timeFrom()如果时间列格式是%Y-%m-%d %H:%i:%s,可以使用此宏变量,将被替换为当前时间选择的开始时间。FROM_UNIXTIME(1494410783)
$timeTo()如果时间列格式是%Y-%m-%d %H:%i:%s,可以使用此宏变量,将被替换为当前时间选择的结束时间。FROM_UNIXTIME(1494410983)
$unixEpochFilter(dateColumn)如果 dateColumn 格式是 Unix时间戳。将会被替换为 dateColumn > 1494410783 AND dateColumn < 1494497183
$unixEpochFrom()将被替换为当前活动时间选择的开始时间,以Unix时间戳表示。例如,1494410783
$unixEpochTo()将被替换为当前活动时间选择的结束时间, 以Unix时间戳表示。例如,1494497183
$unixEpochNanoFilter(dateColumn)如果 dateColumn 格式是以纳秒时间戳表示。将会被替换为 dateColumn > 1494410783152415214 AND dateColumn < 1494410983142514872
$unixEpochNanoFrom()将被替换为当前活动时间选择的开始时间,以纳秒时间戳表示。例如,1494410783152415214
$unixEpochNanoTo()将被替换为当前活动时间选择的结束时间,以纳秒时间戳表示。例如,1494410983142514872
$timeGroup(dateColumn,’5m’)在 group by 的时候使用,以 5m 为分组粒度,对数据进行计算
$__unixEpochGroup(dateColumn,’5m’)在 group by 的时候使用,以 5m 为分组粒度,对数据进行计算

宏变量使用示例

以上面的 alert_his_event 表为例,查询一段时间范围内每分钟的告警数量的 SQL 如下

  1. SELECT
  2. $__unixEpochGroup(trigger_time, '1m') AS time,
  3. COUNT(*) AS alert_count
  4. FROM
  5. n9e_v6_plus.alert_his_event
  6. WHERE
  7. $__unixEpochFilter(trigger_time)
  8. GROUP BY
  9. time
  10. ORDER BY
  11. time