(sum(node_memory_MemTotal) - sum(node_memory_MemFree+node_memory_Buffers+node_memory_Cached) ) / sum(node_memory_MemTotal) * 100
这就是我们之前在 Prometheus 里面查询的promQL
语句,我们可以将上面的查询语句复制到 Prometheus 的 Graph 页面进行查询,其实可以预想到是没有对应的数据的,因为我们用node_exporter
采集到的数据指标不是node_memory_MemTotal
关键字,而是node_memory_MemTotal_bytes
,将上面的promQL
语句做相应的更改:
(sum(node_memory_MemTotal_bytes) - sum(node_memory_MemFree_bytes + node_memory_Buffers_bytes+node_memory_Cached_bytes)) / sum(node_memory_MemTotal_bytes) * 100
这个语句的意思就是(整个集群的内存-(整个集群剩余的内存以及Buffer和Cached))/整个集群的内存
,简单来说就是总的集群内存使用百分比。将上面 grafana 的promQL
语句替换掉,就可以看到图表正常了:
同样的,我们可以更改后面的 CPU 和 FileSystem 的使用率:
同样下面的Pod CPU Usage
用来展示 Pod CPU 的使用情况,对应的promQL
语句如下,根据 pod_name 来进行统计:
sum by (pod_name)(rate(container_cpu_usage_seconds_total{image!="", pod_name!=""}[1m]))
按照上面的方法替换 grafana 中的 dashboard 图表中的查询语句:
其他的也按照我们的实际需求重新编辑下就可以,下图是最终整个 dashboard 的效果图:
最后要记得保存这个 dashboard,下面的链接是我修改后的 dashboard json 文件地址,你可以直接下载下来导入到 grafana 当中,当然你也可以根据实际情况进行相应的更改:k8s-cluster-grafana-dashboard.json。
除此之外,我们也可以前往 grafana dashboard 的页面去搜索其他的关于 Kubernetes 的监控页面,地址:https://grafana.com/dashboards,比如id 为747和741的这两个 dashboard。
上面是我们最常用的 grafana 当中的 dashboard 的功能的使用,然后我们也可以来进行一些其他的系统管理,比如添加用户,为用户添加权限等等,我们也可以安装一些其他插件,比如 grafana 就有一个专门针对 Kubernetes 集群监控的插件:grafana-kubernetes-app
要安装这个插件,需要到 grafana 的 Pod 里面去执行安装命令:
$ kubectl get pods -n kube-ops
NAME READY STATUS RESTARTS AGE
grafana-79477fbb7c-v4prs 1/1 Running 0 23m
$ kubectl exec -it grafana-79477fbb7c-v4prs /bin/bash -n kube-ops
grafana@grafana-79477fbb7c-v4prs:/usr/share/grafana$ grafana-cli plugins install grafana-kubernetes-app
installing grafana-kubernetes-app @ 1.0.1
from url: https://grafana.com/api/plugins/grafana-kubernetes-app/versions/1.0.1/download
into: /var/lib/grafana/plugins
✔ Installed grafana-kubernetes-app successfully
Restart grafana after installing plugins . <service grafana-server restart>
grafana@grafana-79477fbb7c-v4prs:/usr/share/grafana$
安装完成后需要重启 grafana 才会生效,我们这里直接删除 Pod,重建即可,然后回到 grafana 页面中,切换到 plugins 页面可以发现下面多了一个 Kubernetes 的插件,点击进来启用即可,然后点击Next up
旁边的链接配置集群
这里我们可以添加一个新的 Kubernetes 集群,这里需要填写集群的访问地址:https://kubernetes.default
,然后比较重要的是集群访问的证书,勾选上TLS Client Auth
和With CA Cert
这两项。
集群访问的证书文件,用我们访问集群的 kubectl 的配置文件中的证书信息(~/.kube/config)即可,其中属性certificate-authority-data
、client-certificate-data
、client-key-data
就对应这 CA 证书、Client 证书、Client 私钥,不过 config 文件里面的内容是base64
编码过后的,所以我们这里填写的时候要做base64
解码。
另外需要将解码过后的\n
换成换行符,不然认证会失败。
配置完成后,可以直接点击Deploy
(实际上前面的课程中我们都已经部署过相关的资源了),然后点击Save
,就可以获取到集群的监控资源信息了。
可以看到上面展示了整个集群的状态,可以查看上面的一些 Dashboard:
grafana 4 版本以上就支持了报警功能,这使得我们利用 grafana 作为监控面板更为完整,因为报警是监控系统中必不可少的环节,grafana 支持很多种形式的报警功能,比如 email、钉钉、slack、webhook 等等,我们这里来测试下 email 和 钉钉。
email 报警
要启用 email 报警需要在启动配置文件中/etc/grafana/grafan.ini
开启 SMTP 服务,我们这里同样利用一个 ConfigMap 资源对象挂载到 grafana Pod 中:(grafana-cm.yaml)
apiVersion: v1
kind: ConfigMap
metadata:
name: grafana-config
namespace: kube-ops
data:
grafana.ini: |
[server]
root_url = http://<你grafana的url地址>
[smtp]
enabled = true
host = smtp.163.com:25
user = [email protected]
password = <邮箱密码>
skip_verify = true
from_address = [email protected]
[alerting]
enabled = true
execute_alerts = true
上面配置了我的 163 邮箱,开启报警功能,当然我们还得将这个 ConfigMap 文件挂载到 Pod 中去:
volumeMounts:
- mountPath: "/etc/grafana"
name: config
volumes:
- name: config
configMap:
name: grafana-config
创建 ConfigMap 对象,更新 Deployment:
$ kubectl create -f grafana-cm.yaml
$ kubectl apply -f grafana-deploy.yaml
更新完成后,在 grafana 的 webui 中Alert
页面测试邮件报警:
发送测试后,正常情况下就可以收到测试报警邮件:
上面我们也说了 grafana 也是支持钉钉报警的,在钉钉群里面添加群机器人,选择最后的自定义机器人:
添加完成后可以得到一个 webhook 的地址,然后将这个 webhook 地址添加到上面 grafana webui 的报警测试页面进行测试,就可以在钉钉群里面收到报警测试信息了:
目前只有 Graph 支持报警功能,所以我们选择 Graph 相关图表,点击编辑,进入 Graph 编辑页面可以看到有一个 Alert 模块,切换过来创建报警:
然后配置相关参数:
1、Alert 名称,可以自定义。
2、执行的频率,这里我选择每60s检测一次。
3、判断标准,默认是 avg,这里是下拉框,自己按需求选择。
4、query(A,5m,now),字母A代表选择的metrics 中设置的 sql,也可以选择其它在 metrics中设置的,但这里是单选。5m
代表从现在起往之前的五分钟,即5m
之前的那个点为时间的起始点,now
为时间的结束点,此外这里可以自己手动输入时间。
5、设置的预警临界点,这里手动输入,和6是同样功能,6可以手动移动,两种操作是等同的。
然后需要设置报警发送信息,点击侧边的Notifications
:
其中Send to
就是前面我们配置过的发送邮件和钉钉的报警频道的名称。
配置完成后需要保存下这个 graph,否则发送报警可能会失败,然后点击 Alert 区域的Test Rule
可以来测试报警规则,然后邮件和钉钉正常来说就可以收到报警信息了。
邮件报警信息:
钉钉报警信息:
到这里就完成了使用 grafana 来展示 Kubernetes 集群的监控图表信息以及报警配置,但是我们明显可以感觉到 grafana 的优势在于图表的展示,报警功能有点弱,所以一般来说,在生产环境我们不会直接使用 grafana 的报警功能,更多的是使用功能更加强大的 AlertManager
,下节课我们再来和大家介绍了。
本文节选自从Docker到Kubernetes进阶
微信公众号
扫描下面的二维码关注我们的微信公众帐号,在微信公众帐号中回复◉加群◉即可加入到我们的
kubernetes 讨论群里面共同学习。
「真诚赞赏,手留余香」