https://cloud.tencent.com/developer/article/1582979
step1
新建一个表testgraph,用来存放查询的数据。
DROP TABLE IF EXISTS `testgraph`;
CREATE TABLE `testgraph` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`create_time` datetime(0) NULL DEFAULT NULL,
`value` int(20) NULL DEFAULT NULL,
`metric` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
在表中添加如下数据,用来测试,注意create_time特意填入的日期每个都不一样,不是同一天。
step2
打开grafana,选择折线图表并选择mysql数据源。
选择SQL Edit模式,在编辑框中输入以下sql语句:
SELECT
create_time AS "time",
value,metric
FROM testgraph
WHERE
$__timeFilter(create_time)
ORDER BY create_time desc
我们来回顾一下sql语句的格式:
必须要在返回的结果集中有的三个字段是time, value,metric。
如果数据库中的字段名称不为这三个必须字段名,可以使用类似create_time AS "time"的形式将返回参数名进行别名命名。
如果你的数据表中设计的值字段和名称字段不为value和metric的话,也需要在查询语句中使用AS进行别名命名。
另外time字段也可以被别名成time_sec,经过我测试,二者都可以,暂时没发现区别是什么。
$__timeFilter(create_time)的含义是,将sql语句的where条件的时间段,替换成grafana中的用户自定义选择的时间段。
sql语句的其他部分不再赘述。
step3
我们尝试在同一个折线图中显示两条折线。
我们首先编辑数据表中的数据,将其编辑成如下内容:
你会发现,我在metric列中加入了支出这一个数据名。
你看到这里已经明白啦,我想要一条折线显示收入,一条折线显示支出。
为了使step2中的数据和之前保持一致,我们修改上一步的sql语句,在其中加入限定的where条件:metric="收入" 。即我们的第一个折线的sql内容修改成:
SELECT
create_time AS "time",
value,metric
FROM testgraph
WHERE
$__timeFilter(create_time) AND metric="收入"
ORDER BY create_time desc
修改之后,我们点击Add Query,添加一个新的查询语句,并选择SQL Edit模式,输入以下sql语句
SELECT
create_time AS "time",
value,metric
FROM testgraph
WHERE
$__timeFilter(create_time) AND metric="支出"
ORDER BY create_time desc
点击编辑框外的空白处,sql将自动执行查询。
确定我们选择的时间段是最近7天之后,我们看到了两个折线在同一个图表中的情况
step4
https://segmentfault.com/a/1190000014935629
如果想要将数据改成柱状图
X: 不是时间,是指标名称,例如收入 ,支出
Y: 还是value