Day 13:架设 Grafana (1)

那麽今天再回来继续处理我们的 dashboard 吧,上次虽然找到了这个 caddy 的 dashboard,不过却发现它没有办法显示资料。

检查 panel 所使用的查询

通常遇到这种情况,我们可以直接打开 panel(代表 dashboard 里面的一张图),来检查它所下的查询是否与我们预期的一样,左键点选之後按下 Edit 就能打开了。

然後在画面下方就能看到这个 panel 所使用的查询语句是 sum(rate(caddy_http_requests_total{handler="reverse_proxy", service="[[service]]", namespace="[[namespace]]"}[1m])),可以看到里面它透过 servicenamespace 两个 label 来查询指标。然而我在文件里面并没有看到这两个 label,所以我想或许是这是来自於旧版本的 caddy metrics 的 label,但是在现行的版本里面,存在一个 server label 用来区分不同的 block,因此我就尝试把它改成用 server 来查询吧。

修改变数

首先需要修改的是变数,也就是本来左上角的 Service 跟 Namespace。变数可以让我们在设计 dashboard 的时候,不用写死查询的语句,例如说当有多个 data source 的时候,就可以把它设为变数,避免替每个 data source 设一个新的 dashboard。

从右上角的小齿轮,打开 dashboard 的设定,点选左边的 Variables 进入变数的设定页面。

可以看到已经存在两个变数了,我们可以透过右上角的 New 按钮新增一个。首先将它命名为 server,然後在下面的 Query 填入 label_values(caddy_http_requests_total, server),这个 label_values 的意思是说,根据给定的指标跟 label 去取得值,例如说现在填入的表达式代表从 caddy_http_requests_total 这个指标里面,找出所有 server 这个 label 的值。填上去之後,可以检查最底下的 preview 是否有东西出现,像是我这边就会看到 srv0srv1 两个值。接下来把下面的 Multi-value 打开,这个选项代表是否可以同时选取多个变数的值,若是有打开的话,就可以在查询时同时显示多个 server 的指标。

按下 Update,回到 dashboard 的页面,应该就可以看到 Server 这个变数出现在左上角了。

修改 panel

接下来,我们就要修改 panel 让它可以正常查询到结果。一样按 Edit 打开 panel,把原本的查询语句改成 rate(caddy_http_requests_total{handler="reverse_proxy", server=~"$server"}[$__interval]),这句代表的意思是,根据当前设定的变数 server,去过滤 caddy_http_requests_total 这项指标,取它的增长速率,因为对於每个 server 来说,这项指标都是唯一的,所以相较於原本的查询,sum 是可以拿掉的。

然後关於区间的部分,使用了 Grafana 内建变数之一的 $__rate_interval,根据 Prometheus data source 的文件,这通常是比 $__interval 更好的选项。

另外这里还有一点需要注意,当使用 Grafana 的变数时,label 的比较要用 =~,也就是 regex 的匹配,而不是 =,因为当有多个数值的时候,查询的部分会被替换成类似 (first|second) 这样的 regex 的格式。

修改完之後,随便发几个请求给 NOJ,应该就能看到图表显示出来了。

结果

其他的 panel 调整也都是大同小异,基本上依照上面的逻辑去更新就好,最後的结果会如下图所示。

小结

话说在处理这个的时候我也尝试了一下其他的 dashboard,结果发现 Caddy exporter 这个 dashboard 看起来是可以正常使用的。不过两个 dashboard 似乎都跟我想要的情形稍微有点不同,接下来就试着把它调整成喜欢的形状吧。话说关於原本的 panel 里面使用了 sum(rate(...)) 而不是 rate(sum(...)),虽然两者看起来应该是等价的,然而 SRE book 里面建议应要使用前面的形式,当初其实我看不懂原因,今天找到这篇文章我觉得讲得挺清楚,给各位参考。


<<:  [Day 12] Create新增资料

>>:  Day12:终於要进去新手村了-Javascript-资料型态转换-将字串变成数字

CSS微动画 - 不使用图片制作「加到最爱」开关按钮

Q: 请问icon要怎麽出图好呢? A: 一定要用图片吗? 本篇要实作的是「加到最爱」的按钮,结合...

Day9 Let's ODOO: View(2) Structure

我们今天来介绍一份View的基本结构 以昨日的Form作为例子: <odoo> <...

34.Form Handling

在strict mode使用 Vuex 时,在属于 Vuex 的 state 上使用 v-model...

[Day 30] 会员登入及登出(二)

今天继续使用者登入的部分. 登入资料验证 当接收到表单送来的资讯之後, 首先我们要针对资料作验证. ...

从设计 docker-compose 开始

现今因为容器的盛行,许多的企业都导入了容器解决方案,使得布署与开发都能加快速度。今天的内容是描述怎麽...