您现在的位置是:首页 > 文章详情

浅谈多环境中的Kubernetes集群Prometheus+InfluxDB+Grafana监控方案

日期:2020-05-31点击:787

Kubernetes监控方案

目前Kubernetes的常用监控方案是Prometheus+Grafana的方式。Prometheus的部署一般是用operator的方式,随着helm的chart包管理日益普及,Prometheus operator也就可以直接通过helm命令直接部署了。
一般开发模式都是在多环境中进行的,这里的环境是指开发(dev),集成(int),预演(preview/cert),产品(prod),不同公司有不同的定义。为了提供监控接口给相关人员,可以是每个环境有自己的grafana,也可以是集中在一个grafana中进行各个环境的指标展示和监控。比如我们单独有一个ops环境来做一些运维相关的工作,这就包括对其它环境的监控。

Prometheus及远端存储

Prometheus的高可用不是太好,Prometheus operator只提供了Prometheus的单实例部署,它的存储空间和性能有限,一般不适宜做长期数据的保存。因此它提供了一系列接口来支持对不同后端的远端存储,这样在设计监控方案的时候可以自由选择好的数据存储方案,避免在Prometheus重复实现高可靠的存储。InfluxDB是业界时序数据库比较好的产品,因此我们采用InfluxDB来做远端存储。这时的架构大概如下图:
monitor

多环境监控

如果要对多个环境的Kubernetes集群进行集中监控,我们就可以用一个ops环境中的InfluxDB作为其它环境Prometheus的共同远端存储,这里要对其它环境的Prometheus做remote write的配置,即将所有的指标数据写道InfluxDB中。同时在ops环境中还要搭建一个Prometheus和Grafana,Prometheus用InfluxDB作为remote read,然后通过Grafana连接ops的Prometheus进行多个环境的展示。
具体架构见下图,这里vpc peering对应阿里云指的高速通道,即在多个环境中的vpc和ops中vpc建立快速通道,这样可以通过阿里云内网进行通信。
multi_environment_monitoring

Prometheus operator部署

用helm进行Prometheus的部署已经非常方便了,大家下载最新的helm,同时最好更新Kubernetes到最新版本。这个operator包含Prometheus,Exporters,Grafana,一切都是开箱即得,自动配置好所有相关参数,简单调整就可以使用。
这里的部署步骤为:

ops中部署InfluxDB

在ops环境中先部署好InfluxDB,步骤略。得到InfluxDB的访问ip和端口(一般为8086)。登陆InfluxDB并建立一个数据库如test。

其它环境部署Prometheus

在其它环境中部署Prometheus,这里可以跳过Grafana,因为Grafana是部署在ops中的。

# helm install dev stable/prometheus-operator --set prometheus.prometheusSpec.remoteWrite[0].url="http://influxdb-ip:8086/api/v1/prom/write?db=test&u=testuser&p=testpwd",prometheus.prometheusSpec.externalLabels.environment="dev",prometheus.prometheusSpec.externalLabels.prometheus="",prometheus.prometheusSpec.externalLabels.prometheus_replica="",grafana.enabled=false,alertmanager.enabled=false

这里helm用的是3.2.1版本,Kubernetes版本为v1.16.6-aliyun.1。这里有几个关键参数,一个是设置了Prometheus的externalLabels,environment=dev,其它环境就等于其它相应的值,比如environment=prod。设置其它2个Prometheus的label prometheus和prometheus_replica为空,也可以设置为其它有意义的值,但不设置的话它们的默认值就是依赖于这里的release名字,所以建议所有的Prometheus的这2个external label都设为一样的值,这是给remote read/write用的,这几个external label会把写入到外部存储如InfluxDB都加上这几个fields,而ops的Prometheus会根据它设的external label来进行匹配,包含这设置的label的数据才会filter出来。

ops环境中部署Prometheus和Grafana。

# helm install ops stable/prometheus-operator --set prometheus.prometheusSpec.remoteWrite[0].url="http://influxdb-ip:8086/api/v1/prom/write?db=test&u=testuser&p=testpwd",prometheus.prometheusSpec.externalLabels.prometheus="",prometheus.prometheusSpec.externalLabels.prometheus_replica="",coreDns.enabled=false,kube-state-metrics.podSecurityPolicy.enabled=false,kubeApiServer.enabled=false,kubeControllerManager.enabled=false,kubeDns.enabled=false,kubeEtcd.enabled=false,kubeProxy.enabled=false,kubeScheduler.enabled=false,kubeStateMetrics.enabled=false,kubelet.enabled=false,nodeExporter.enabled=false

因为ops环境中的Prometheus直接将InfluxDB作为数据来进行查询展示,所以把其它所有exporter模块都disable了。只需要和Grafana结合起来使用就可以了。

修改Grafana的查询

当前配置下grafana查询的数据是所有环境的数据总和,所以需要增加变量environment和filter来对环境数据进行过滤。方法是在查询的时候加上{environment=$environment}。这样就可以选择不同的环境值来显示相应环境的指标。下图是未作修改的Grafana图。
grafana

参考资料

  1. https://github.com/helm/charts/tree/master/stable/prometheus-operator
  2. https://prometheus.io/docs/operating/integrations/#remote-endpoints-and-storage
  3. https://docs.influxdata.com/influxdb/v1.8/supported_protocols/prometheus
原文链接:https://yq.aliyun.com/articles/763271
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章