Fork me on GitHub

版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://vearne.cc

前言

Dashboard是Grafana中非常重要的概念,每个Dashboard都是一个巨大的看板,在Dashboard上可以配置Panel(图表)。在Dashboard中有个特别的配置--Variables,Variables提供了用户和面板交互,可以动态刷新面板。
有些特殊的场景,需要有些小技巧,否则Variables仍然无法满足我们的要求。

1. Case 1

我要查看不同股票的日线图

1.1 Query

SELECT
  trade_date AS "time",
  close
FROM daily_data where ts_code = "$ts_code" order by trade_date

ts_code是股票的代码,显然如果只看股票代码,很难想起这个代码究竟对应的是哪一只股票。

最好的方式是如下图这样,在变量的下拉列表中,显示股票名称,但是在实际的Query中使用股票代码查询。

grafana支持这种玩法,称为text和value

1.2 变量配置

注意需要Grafana的版本在7.4.5 或以上

1.2.1 配置Query

select concat(name, "#", ts_code) from target;

这一步会查出形如下面的结果

中国平安#601318.SH
三一重工#600031.SH
...

1.2.2 分离出text和value

配置Regex

/(?<text>.*)#(?<value>.*)/

2. Case 2

我们有一组MySQL实例需要监控,MySQL的数量多达几十个。
但是实际上大家都知道,MySQL是主从的,1个主和多个从构成了1个集群。每个集群单独为1个业务提供服务。
MySQL实例如果这样列出来,萌叔根本不可能知道,这个实例属于哪个集群,支撑那个业务。

我们希望的效果,是先选择partner(业务方),然后再选择再从这个集群中选出关心的实例

2.1 Query

事实上,我们可以通过构建2个Variables来达到这个目标

2.1.1 Query1

label_values(mysql_up, partner)

得到变量partner

2.1.2 Query2

label_values(mysql_up{partner="$partner"}, instance)

Query2引用Query1的结果

3. Case 3

萌叔的服务部署在2个机房,机房名称是由k8s的维护定义好的,形如

  • hd001
  • hd002

在dashboard上看的时候非常不直观,这里用custom variable的方式
重新配置一下

实际配置:

山东青岛 : hd001, 上海松江 : hd002

注意: 冒号的左右两侧必须有空格

最终效果

参考资料

  1. Filter variables with regex
  2. variables/variable-examples

微信公众号

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注