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

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 本文介绍了对多环境中Kubernetes集群进行集中监控的Prometheus+InfluxDB+Grafana解决方案。

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
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
8天前
|
运维 Kubernetes 监控
Kubernetes 集群的持续性能优化实践
【4月更文挑战第26天】 在动态且不断增长的云计算环境中,维护高性能的 Kubernetes 集群是一个挑战。本文将探讨一系列实用的策略和工具,旨在帮助运维专家监控、分析和优化 Kubernetes 集群的性能。我们将讨论资源分配的最佳实践,包括 CPU 和内存管理,以及集群规模调整的策略。此外,文中还将介绍延迟和吞吐量的重要性,并提供日志和监控工具的使用技巧,以实现持续改进的目标。
|
23小时前
|
运维 监控 Kubernetes
Kubernetes 集群的监控与维护策略
【5月更文挑战第4天】 在当今微服务架构盛行的时代,容器化技术已成为软件开发和部署的标准实践。Kubernetes 作为一个开源的容器编排平台,因其强大的功能和灵活性而广受欢迎。然而,随着 Kubernetes 集群规模的扩大,集群的监控和维护变得日益复杂。本文将探讨 Kubernetes 集群监控的重要性,分析常见的监控工具,并提出一套有效的集群维护策略,以帮助运维人员确保集群的健康运行和高可用性。
16 10
|
2天前
|
存储 运维 监控
Kubernetes 集群的持续监控与优化策略
【5月更文挑战第3天】在微服务架构和容器化部署日益普及的背景下,Kubernetes 已成为众多企业的首选容器编排平台。然而,随着集群规模的增长和业务复杂度的提升,有效的集群监控和性能优化成为确保系统稳定性和提升资源利用率的关键。本文将深入探讨针对 Kubernetes 集群的监控工具选择、监控指标的重要性解读以及基于数据驱动的性能优化实践,为运维人员提供一套系统的持续监控与优化策略。
|
4天前
|
运维 Kubernetes 监控
Kubernetes 集群的监控与维护策略
【4月更文挑战第30天】 在现代云计算环境中,容器化技术已成为应用程序部署和管理的重要手段。其中,Kubernetes 作为一个开源的容器编排平台,以其强大的功能和灵活性受到广泛欢迎。然而,随之而来的是对 Kubernetes 集群监控和维护的复杂性增加。本文将探讨针对 Kubernetes 集群的监控策略和维护技巧,旨在帮助运维人员确保集群的稳定性和高效性。通过分析常见的性能瓶颈、故障诊断方法以及自动化维护工具的应用,我们将提供一套实用的解决方案,以优化 Kubernetes 环境的性能和可靠性。
|
4天前
|
Prometheus 监控 Cloud Native
使用Prometheus配置监控与报警
通过以上步骤,你可以使用Prometheus和Alertmanager实现监控和报警配置,以确保系统在出现性能问题或故障时能够及时通知相关人员。欢迎关注威哥爱编程,一起学习成长。
|
4天前
|
运维 Kubernetes 监控
Kubernetes集群的持续性能优化策略
【4月更文挑战第30天】 在动态且不断扩展的云计算环境中,保持应用性能的稳定性是一个持续的挑战。本文将探讨针对Kubernetes集群的持续性能优化策略,旨在为运维工程师提供一套系统化的性能调优框架。通过分析集群监控数据,我们将讨论如何诊断常见问题、实施有效的资源管理和调度策略,以及采用自动化工具来简化这一过程。
|
4天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理策略
【4月更文挑战第30天】 在微服务架构日益普及的当下,容器化技术与编排工具如Kubernetes成为了运维领域的重要话题。有效的监控和日志管理对于保障系统的高可用性和故障快速定位至关重要。本文将探讨在Kubernetes环境中实施监控和日志管理的最佳实践,包括选用合适的工具、部署策略以及如何整合这些工具来提供端到端的可见性。我们将重点讨论Prometheus监控解决方案和EFK(Elasticsearch, Fluentd, Kibana)日志管理堆栈,分析其在Kubernetes集群中的应用,并给出优化建议。
|
6天前
|
Kubernetes 网络协议 Python
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(二)
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(二)
|
6天前
|
Kubernetes 应用服务中间件 开发工具
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(一)
一文教会你,如何通过kubeadm,在生产环境部署K8S高可用集群(一)
|
8天前
|
Prometheus 监控 Cloud Native
Prometheus+Grafana+NodeExporter 打造一款出色的监控系统,帅呆了!
Prometheus+Grafana+NodeExporter 打造一款出色的监控系统,帅呆了!
31 2