Prometheus: 通过ConfigMap来添加Grafana仪表盘

如果你通过kube-prometheus-stack部署了Prometheus/Grafana,那么Grafana中的仪表盘就是通过边车(sidecar)来动态获取的。Sidecar的观察对象是ConfigMap,当ConfigMap中配置的仪表盘发生变更时,可以动态更新Grafana的仪表盘,而无需重启pod。

在本文中,我将向你展示如何在Prometheus中识别要衡量的指标,在Granfa中创建一个仪表盘来显示该指标,并将仪表盘导出为json文件。然后通过使用json数据和适当的标签填充ConfigMap,并使用导出的仪表盘文件跨其他Grafana实例重新创建仪表盘。

识别指标

作为一个基本示例,让我们考虑集群中的总pod 数。使用kubectl命令获取所有命名空间中非零计数的pod:

kubectl get pods -A --no-headers | awk {'print $3'} | grep -v ^0 | wc -l

从Prometheus主页面验证指标值是否匹配,使用如下查询

kubectl_running_pods{job='apiserver'}

结果如下所示:

在这里插入图片描述

创建和导出

现在我们在Grafana Web UI中手动构建一次仪表盘,然后将其导出为json,然后可以将其放入ConfigMap中以供将来自动化和持久化。

登录 Grafana,单击仪表盘 -> 新仪表盘
[!pic]
在这里插入图片描述

使用Pod Count作为标题,选择 Prometheus作为数据源并输入之前测试过的 Prometheus指标,然后点击"Run queries"按钮来获取指标数据。
在这里插入图片描述
保存仪表盘:
在这里插入图片描述
结果如下:
在这里插入图片描述

导出仪表盘

按如下所示的“共享”图标将此仪表板保存为 json 文件:
在这里插入图片描述
在这里插入图片描述

删除手动创建的仪表盘

为了证明我们刚刚导出的json文件可以重新创建这个dashboard,我们需要先删除仪表盘,Dashboard settings->Delete Dashboard:
在这里插入图片描述
在这里插入图片描述

使用ConfigMap重新生成Grafana仪表盘

上面导出了仪表盘的json文件,接下来创建一个特殊标记的ConfigMap,Grafana kiwigrid sidecar 就会自动拉取它并重新创建仪表盘。

ConfigMap

在本文中,我们有一个命名空间prom,Grafana pod就在这个命名空间中。然后我们创建一个ConfigMap,其中grafana_dashboard需要设置为1,如下所示(完整实例):

# pod-count-dashboard.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    grafana_dashboard: "1"
  name: grafana-k8s-pod-count
  namespace: prom
data:
  k8s-pod-count.json: |-
    {
      ...
      ...
      ...
    }

这里将导出的仪表盘文件内容复制到ConfigMap中然后直接创建ConfigMap。

除此之外,还可以通过以下命令来创建ConfigMap:

# create cofigmap from exported json
kubectl create configmap grafana-k8s-pod-count -n prom --from-file=k8s-pod-count.json

# apply label that makes it Grafana target
kubectl label configmap grafana-k8s-pod-count -n prom grafana_dashboard=1

验证结果

等待30s后再Grafana中查看结果:

在这里插入图片描述

通过kustomize创建ConfigMap

上节介绍的是手动创建ConfigMap的方式,还可以通过kustomize来创建ConfigMap。kustomization.yaml文件内容如下:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

commonLabels:
 grafana_dashboard: "1"

configMapGenerator:
- name: grafana-k8s-pod-count
  namespace: prom
  # specify name of locally downloaded json
  files:
  - k8s-pod-count.json

generatorOptions:
  disableNameSuffixHash: true

使用kustomize命令或"-k"标志应用kustomization.yaml中的设置,如下所示:

# generate configmap then apply
$ kubectl kustomize | kubectl apply -f -
configmap/grafana-k8s-pod-count created

# generate configmap and apply
# kubectl apply -k .
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值