快捷菜单
常用功能一站直达
更多功能请点顶栏「快捷菜单」

前面我们使用 Prometheus 采集了 Kubernetes 集群中的一些监控数据指标,我们也尝试使用 promQL 语句查询出了一些数据,并且在 Prometheus 的 Dashboard 中进行了展示,但是明显可以感觉到 Prometheus 的图表功能相对较弱。所以一般情况下我们会用一个第三方的工具来展示这些数据,今天我们要和大家使用到的就是 Grafana。
Grafana 是一个可视化面板,有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持 Graphite、zabbix、InfluxDB、Prometheus、OpenTSDB、Elasticsearch 等作为数据源,比 Prometheus 自带的图表展示功能强大太多,更加灵活,有丰富的插件,功能更加强大。
导入现成的第三方 Dashboard 或许能解决我们大部分问题,但是毕竟还会有需要定制图表的时候,这个时候就需要了解如何去自定义图表了。
同样在侧边栏点击 “+",选择 Dashboard,然后选择 Add new panel 创建一个图表:

然后在下方 Query 栏中选择 Prometheus 这个数据源:

然后在 Metrics 区域输入我们要查询的监控 PromQL 语句,比如我们这里想要查询集群节点 CPU 的使用率:
1(1 - sum(increase(node_cpu_seconds_total{mode="idle", instance=~"$node"}[1m])) by (instance) / sum(increase(node_cpu_seconds_total{instance=~"$node"}[1m])) by (instance)) * 100虽然我们现在还没有具体的学习过 PromQL 语句,但其实我们仔细分析上面的语句也不是很困难,集群节点的 CPU 使用率实际上就相当于排除空闲 CPU 的使用率,所以我们可以优先计算空闲 CPU 的使用时长,除以总的 CPU 时长就是使用率了,用 1 减掉过后就是 CPU 的使用率了,如果想用百分比来表示的话则乘以 100 即可。
这里有一个需要注意的地方是在 PromQL 语句中有一个 instance=~"$node" 的标签,其实意思就是根据 $node 这个参数来进行过滤,也就是我们希望在 Grafana 里面通过参数化来控制每一次计算哪一个节点的 CPU 使用率。
所以这里就涉及到 Grafana 里面的参数使用。点击页面顶部的 Dashboard Settings 按钮进入配置页面:

在左侧 tab 栏点击 Variables 进入参数配置页面,如果还没有任何参数,可以通过点击 Add Variable 添加一个新的变量:

这里需要注意的是变量的名称 node 就是上面我们在 PromQL 语句里面使用的 $node 这个参数,这两个地方必须保持一致,然后最重要的就是参数的获取方式了,比如我们可以通过 Prometheus 这个数据源,通过 kubelet_node_name 这个指标来获取,在 Prometheus 里面我们可以查询该指标获取到的值为:

我们其实只是想要获取节点的名称,所以我们可以用正则表达式去匹配 node=xxx 这个标签,将匹配的值作为参数的值即可:

在最下面的 Preview of values 里面会有获取的参数值的预览结果。除此之外,我们还可以使用一个更方便的 label_values 函数来获取,该函数可以用来直接获取某个指标的 label 值:

另外由于我们希望能够让用户自由选择一次性可以查询多少个节点的数据,所以我们将 Multi-value 以及 Include All option 都勾选上了,最后记得保存,保存后跳转到 Dashboard 页面就可以看到我们自定义的图表信息:

而且还可以根据参数选择一个或者多个节点,当然图表的标题和大小都可以自由去更改:

🍀 自己实际测试过程
创建pannel和row:
一般,同一类监控放在一个row中;



🍀 query

🍀 只显示instance

🍀 pannel标题及描述

🍀 点击Time series:(重点来看这个就好)

🍀 测试:查询CPU使用率
1(1-sum(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) / sum(rate(node_cpu_seconds_total[5m])) by (instance) ) * 100


🍀 测试:创建节点内存使用率面板
1(1-(node_memory_Buffers_bytes + node_memory_Cached_bytes + node_memory_MemFree_bytes) / node_memory_MemTotal_bytes) * 100


🍀 进一步定制
点击Dashboard settings:

填写Dashboard Name:

注意:这里的变量也是很重要的,我们来添加一个变量!


up{job="nodes",instance=~".*?"}




或者使用label函数:


以上配置后,还需要在pannel里进行配置才行:
1(1-sum(rate(node_cpu_seconds_total{mode="idle",instance=~"$instance"}[5m])) by (instance) / sum(rate(node_cpu_seconds_total{instance=~"$instance"}[5m])) by (instance) ) * 100
2
3(1-(node_memory_Buffers_bytes{instance=~"$instance"} + node_memory_Cached_bytes{instance=~"$instance"} + node_memory_MemFree_bytes{instance=~"$instance"}) / node_memory_MemTotal_bytes{instance=~"$instance"}) * 100


最终效果:😘



🍀 这边再加一个效果:


🍀 如何想在一个pannel里显示多个数据该怎么办呢?
1sum(rate(node_cpu_seconds_total{mode="system",instance=~"$instance"}[5m])) by (instance) / sum(rate(node_cpu_seconds_total{instance=~"$instance"}[5m])) by (instance) * 100
2
3sum(rate(node_cpu_seconds_total{mode="user",instance=~"$instance"}[5m])) by (instance) / sum(rate(node_cpu_seconds_total{instance=~"$instance"}[5m])) by (instance) * 100
但是,所有节点都展示出来的话,看起来就不友好了:

更新:


🍀 增加百分比:

https://grafana.com/grafana/dashboards/

然后导入 16098 这个 Dashboard,导入后效果如下图所示。


1-node-exporter-for-prometheus-dashboard-cn-0417-job_rev2.json

🍀 案例:导入16098


效果:


存在问题:
擦,这个我找不到地方了哈哈哈哈。。。。🤣🤣🤣
但是,这里的ip不对,我们来修正下:


可以看到node_uname_info没有输出ip的,这里隐藏起来就好:



2024年11月13日 收藏



🍀 注意:我这里为什么Testing错误了呢?

🍀 奇怪:这里换成Browser就可以了:……😥;



🍀 或者这里使用prometheus pod ip也是可以的哈!



🍀 但是自己使用prometheus的svcName:9090端口就不行了,,😥
Error reading Prometheus: Post “http://prometheus:9090/api/v1/query”: dial tcp 10.101.131.61:9090: i/o timeout



自己再次测试:
在grafana里不都是可以访问prometheus域名的吗,,,,,:

自己使用svc cluster ip也是有问题的:


ep信息:

github链接:
貌似找到了相同的issue,但是没发现有用的信息!!!😥 2022年5月4日20:57:44
https://github.com/prometheus-operator/kube-prometheus/issues/1648



结束。
日历 · 精选 · 友链 · 更多
如果内容对你有帮助,欢迎请我喝杯咖啡 ☕



One的公众号
爱折腾博客的小白