李颖
李颖,来自北京邮电大学网络技术研究院,目前在民生银行信息科技部系统管理中心实习,实习期间专注于基于kubernetes和docker的容器平台的建设和运维工作。
一
背景
近年来,随着容器技术的迅速发展,Kubernetes 已然成为主流的容器集群管理系统。Prometheus是一个开源的系统监视和警报框架,2016年Prometheus加入生态圈 Cloud Native Computing Foundation(简称:CNCF),并成为其中重要一员,现已广泛用于 Kubernetes 集群的监控系统中。
民生银行在Kubernetes多租户环境中进行了Prometheus+Grafana监控实践的探索,并初具成效。本文将简要介绍 Prometheus 的组成和相关概念,并实例演示 Prometheus+Grafana监控方案的部署,配置与使用,供开发人员和云平台运维人员参考借鉴。
二
相关名词
Prometheus简介
Prometheus是新一代的监控框架,基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程,此特性使得Prometheus非常适合虚拟化环境比如VM或者Docker。
与其他监控系统相比,Prometheus的主要特点如下:
01
强大的多维数据模型
由度量名(metric)和键值对标识的基于时间序列的多维数据模型。
02
高效的存储
平均每个采样点仅占 3.5 bytes,且一个 Prometheus server 可以处理数百万的 metrics。
03
灵活而强大的查询语言
Prometheus专用数据查询语言PromQL,语言表现力丰富,支持条件查询、操作符和内建函数等。
04
不依赖分布式存储
可直接在本地工作,易于管理。
05
时间序列数据采集
支持通过HTTP上的pull模式拉取和通过中间网关PushGateway推送。
06
监控目标发现
通过服务发现或静态配置发现目标。
07
图形化友好
支持多种统计数据模型,如Grafana。
图 Prometheus官方架构图
Prometheus架构图如上所示,可以看到Prometheus框架包含了许多组件,主要包括:
Prometheus Server
Prometheus的核心组件,用于收集和存储时间序列数据,并提供数据查询接口PromQL API。
Jobs/Exporters
客户端组件,监控并采集指标,对外暴露HTTP服务(/metrics)。
PushGateway
主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了,因此Short-lived jobs需要定时将指标push到Pushgateway,再由Prometheus Server从Pushgateway上拉取。
Alertmanager
根据配置文件,对接收到的警报进行处理,发出告警。
Grafana简介
Grafana是一款可视化工具,大多使用在时序数据的监控方面。Grafana对每种数据源提供不同的查询方法,而且能很好的支持每种数据源的特性,UI灵活,插件丰富,功能强大。Grafana官方支持以下几种数据源:Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB。
Grafana可以设置不同的组织,将用户分配到不同组织,一个用户可以属于一个或多个组织,通过角色来分配不同的权限,从而实现多租户。此外,Grafana还支持多种用户认证的方式。
三
设计方案
基于Prometheus+Grafana的多租户监控方案采用Prometheus提供时序数据源,Grafana提供监控面板,Grafana通过Prometheus提供的 PromAPI接口获取时序数据。在Grafana中,通过组织和用户权限划分,实现分租户的监控图像展示以及管理的目的。此外,还通过altermanager实现关键指标异常的报警,整体框架如下图所示。
图 多租户监控方案框架图
四
实现过程
Prometheus和Grafana部署
Prometheus和Grafana均使用helm方式进行部署(注:helm是一种kubernetes包管理工具,可以简化应用的部署和管理)。篇幅有限,部署过程在此不再赘述。
Prometheus部署成果后,点击status->targets可观察到Prometheus监控目标的状况。并且,可以使用PromQL查询你感兴趣的指标。
多租户监控机制实现
首先,通过Grafana管理员用户新建用户组织,Grafana默认是不允许非管理员用户创建新的组织的,若有此需要,可通过修改配置文件以允许非管理员用户创建组织。通过Server Admin->Orgs-> New Org新建组织,通过configuration->users为新建组织添加用户,并为用户授予不同的权限。
添加数据源
点击datasource->new为新建组织添加数据源,输入name,type,http url等基本信息,本文以之前搭建好的prometheus为数据源。
绘制监控像
Grafana提供了丰富的dashboard可供选择。
本文以一个组织(namespace)为例,从应用运行状态和资源使用情况绘制了如下监控图像。
应用运行情况监控角度,选取了3个主要的对象,分别是deployment、pod和replicas首先绘制了三个对象运行正常的个数占期望个数的比例,然后,更详细的给出了每个对象部署的期望个数,正常运行个数和非正常个数。
应用资源占用情况角度,选取的指标是内存使用情况和CPU占用情况。具体监控图像如下。其中,在CPU占用情况监控中,设置了CPU占用阈值,超过此阈值将触发报警,在图中以红色警戒线标识。
内存总使用量
各pod内存使用量详情
CPU总占用量
各pod CPU占用量详情
五
总结
至此,基于Prometheus+Grafana的Kubernetes多租户监控方案的主要原理和流程已经介绍完毕,但还有一些需要完善的地方,例如Grafana用户认证与管理机制、监控指标的全面性等等。总之,这只是我们前期的初步探索,未来会根据进展情况再与大家分享。
编辑:民生运维文化建设团队
作者:李颖