0x00 介绍
grafana是一款开源的数据可视化产品,支持prometheus等多种数据源,界面效果炫丽,操作方便灵活,支持大屏展示模式。grafana是目前最适合做prometheus数据可视化的产品,虽然prometheus也提供了可视化功能,但功能太弱无法满足大部分生产需求,prometheus的强项在于数据存储和数据查询,grafana的强项在于数据展示,两个系统配合就能打造强大的监控系统。0x01 QuickStart
我们通过一个展示cpu使用率的面板来快速上手grafana
配置数据源
我们首先需要配置一个数据源,在界面点击Configuration-> Data Sources
进入数据源创建界面,选择Prometheus数据源

- URL:prometheus地址,如果是kubernetes环境可以直接用service名称
- Access:有Server和Browser两种模式,选择Server
- Timeout:建议设置该值,建议30s+
点击Save & test
测试并保存
创建面板
点击工具栏+
号,选择dashboard

选择Add an empty panel
创建一个空的面板,面板功能如下

- ① 效果预览
- ② 表达式编辑
- ③ 组件列表
- ④ 属性配置
将我们上一篇讲到的计算cpu使用率表达式输入到②区域
100-irate(node_cpu_seconds_total{cpu="0",instance="10.66.222.11:9100",mode="idle"}[1m])*100

点击右上角Apply
就可以保存,返回到首页就能看到我们创建的面板

点击右上角时间选项可以自定义范围

- ① 选择时间范围
- ② 常用时间范围
- ③ 自定义时间范围
除了在这里选择时间范围,也可以在图上直接框选范围,放开就自动显示框选的范围数据,非常方便

这样我们就完成了一个简单的cpu使用率监控图
功能完善
在上面的例子中,虽然图出来了,但是很多地方还不是很完善

- 指标值没有按照百分比显示
- 标签显示的是原始字符串
- 只能显示一台主机监控指标
我们可以在标题上点击进入编辑界面

我们在Legend输入{{node}}
,可以设置标签显示值

在右边面板选择Overrides->Add field override->Fields with name

选择指标值

点击Add override property
,选择需要覆盖的属性,输入Unit
选择Standard Option -> Unit
,这个是设置指标值的单位,输入Percent选择Misc->Percent(1/100)
即可

这样显示效果就好很多

0x03一个完整的示例
下面我们制作一个完整功能的监控面板,如图

该面板包含以下内容
- 表格组件
- 仪表盘组件
- 文本框组件
- 折线图
- 下拉框选择指定主机,显示指定主机指标信息
表格中的指标是k8s集群主机上应用指标信息,我们不考虑数据来源,只做功能讲解
0x00 表格组件
介绍
表格组件首先需要确定一个连接标签,所有的查询结果都需要包含该标签,grafana会将结果进行平铺,比如统计主机POD数量的PromQL如下
➜ count(kube_pod_info {})by (node) {node="node-sit1"} 21 {node="master-sit1"} 6 {node="node-sit2"} 13 {node="master-sit2"} 3
统计主机CPU核数PromQL如下
➜ kube_node_status_capacity_cpu_cores kube_node_status_capacity_cpu_cores{node="master-sit1"} 4 kube_node_status_capacity_cpu_cores{node="master-sit2"} 4 kube_node_status_capacity_cpu_cores{node="node-sit1"} 8 kube_node_status_capacity_cpu_cores{node="node-sit2"} 8
那么按照node连接的话,显示结果如下
| node | Pod | Cpu |
| ———– | —- | —- |
| master-sit1 | 6 | 4 |
| master-sit2 | 3 | 4 |
| node-sit1 | 21 | 8 |
| node-sit2 | 13 | 8 |
当然列名称可以自定义
使用

如图,我们需要按照节点(node标签)进行连接,我们先查询出第一个指标POD数
1. 修改组件为Table组件

2. 设置查询属性

- ① 查询语句
count(kube_pod_info {})by (node)
- ② 设置格式为Table
- ③ 把Instant选上,Instant表示显示当前值,因为数据是时序数据,会显示时间段内所有数据,表格只需显示当前值即可
接下来我们查询cpu总数,查询语句为kube_node_status_capacity_cpu_cores
,点击+Query
就可以增加查询语句,同样需要设置Format和Instant属性

但结果并没有如我们预期

两个查询结果并没有在同一个表格中,需要从选择框中手动选择,这是因为我们没有定义分组字段,下面我们定义连接字段,选择Transform->Outer join

从下拉框中选择node
作为连接标签

如图,结果现在显示在同一个表格中,但是字段过于混乱,这是因为grafana将所有标签和指标值都展示在表格中,在Transform
点击Add transformation
选择Organize fIelds,点击标签前面的眼睛图标可以设置字段的显示和隐藏

最终效果

字段标题,也可以在Organize fields进行设置

按照同样的方式加上CPU使用率字段,查询语句如下
100-avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by (node) *100

我们可以对CPU使用率进行属性覆盖,设置单位为百分比

我们可以对CPU使用率设置背景色,比如80%以下显示绿色,80%-90%显示黄色,90%以上显示红色,我们需要设置两个属性
- Thrsholds
- Cell Display mode

Thrsholds选择Percentage,并设置红色90,黄色80,cell display mode有多种颜色方案可以选择,大家根据自己的需要自行选择颜色方案,为了演示效果,我们设置了较小的值,效果如下

根据前面介绍的方案将剩余的列配置上,查询语句如下
#内存总数-设置单位为byte(IEC) kube_node_status_capacity_memory_bytes-0 #内存使用率 ((node_memory_MemTotal_bytes{} - node_memory_MemFree_bytes{} - node_memory_Buffers_bytes{} - node_memory_Cached_bytes{}) / (node_memory_MemTotal_bytes{} )) * 100 #打开连接数 node_netstat_Tcp_CurrEstab+node_sockstat_TCP_tw #负载(1m) node_load1 #负载(5m) node_load5 #负载(15m) node_load15
0x01 文本框组件
介绍
文本框组件可以显示一些核心指标,比如系统负载,运行时间,内存数等,如图

使用
上图显示的是指定主机运行时间,cpu数,内存总理和1m内的负载情况,会根据用户选择的主机进行变化,所以第一步我们需要配置用户选择框,也就是下面这个

点击右上角配置图标

在Variable
页面添加变量,过滤条件在grafana中称之为变量(Variable),变量信息如下

- ① 变量名称,该名称可以在面板查询语句中使用进行数据过滤,最好用英文名
- ② 标签名称,显示在界面上,建议用中文
- ③ 数据查询语句,这里需要使用label_values这个函数用于提取标签值
- ④ 设置排序,建议设置,这样数据看起来会更整齐
- ⑤ 可以设置是否允许选择多值
- ⑥ 设置是否可以全选,会在下拉框出现
All
的选项 - ⑦ 数据预览,可以检查数据是否正确
我们新加一块面板显示系统运行时间,如果要添加新的面板,点击右上角Add panel
图标

选择组件Stat
,输入以下表达式,并勾选Instant属性
time() - node_boot_time_seconds{node=~"$node"}
$node
指之前配置的变量

这里显示的秒数,我们需要将之转换为可阅读,并且这里显示的是红色字体,这是因为stat默认颜色方案是超过80显示红色,在右边的All面板中设置Standard options->Unit
为second(s),删除Thresholds

选择不同主机可以数据动态更新,现在颜色是绿色,如果不需要颜色,可以将All->Stat Style->Color mode
设置为None。这里Stat仅仅显示的是当前指标值,因为我们上面把instant属性勾选上了,如果不勾选instant,stat会在底部绘制一个简单的折线图,效果如图

0x02 仪表盘
介绍
仪表盘可以更直观展示指标,因为仪表盘可以设置阀值和颜色方案,如图

使用
我们以CPU使用率为例,选择组件Gauge
,查询语句如下
100 - (avg(irate(node_cpu_seconds_total{node=~"$node",mode="idle"}[1m])) * 100)
- 设置Unit为Percent(1/100)
- 设置Thresholds,设置三个阀值,80,90
- 设置属性
Gauge->Show threshold markers
为True
效果如下

0x03 折线图
介绍
折线图前面介绍过,可以展示数据的连续变化,如图

使用
我们就以系统平均负载的面板为例,该面板显示主机三个指标变化情况,分别是1m内负载,5m内负载,15分钟内负载,首先选择组件Graph
,添加三个查询面板,查询语句分别为
node_load1{node=~"$node"} node_load5{node=~"$node"} node_load15{node=~"$node"}

0x04 其他功能
面板导入
grafana之间面板是可以导入导出的,我们可以将测试环境的面板直接导入生产,也可以从网上下载别人做好的面板直接导入,点击右上角看板配置,在JSON Model页面可以导出看板配置,其实就是一个json字符串

如果需要导入,到首页点击Dashboard
的图标进入看板管理界面,点击Import

grafana支持两种导入模式,本地导入和远程导入

- 本地导入就是上传本地的json文件
- 远程导入可以直接输入grafana官网上的看板id就可以导入,grafana官网有很多第三方制作好的看板,每个看到都有一个id,输入id即可导入,地址为https://grafana.com/grafana/dashboards

点击看板进入详情,在右边会显示该看板的id,并且也支持下载

主题配置
grafana默认是暗色主题,说实话,虽然看起来较为炫酷,但显示效果并不是很好,grafana支持light主题,在系统配置中可以配置主题

no comment untill now