今天看啥  ›  专栏  ›  绝师

基于Prometheus+Grafana的kubernetes多租户监控实践

绝师  · 掘金  ·  · 2018-11-12 03:20

李颖

李颖,来自北京邮电大学网络技术研究院,目前在民生银行信息科技部系统管理中心实习,实习期间专注于基于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框架包含了许多组件,主要包括:

01

Prometheus Server

Prometheus的核心组件,用于收集和存储时间序列数据,并提供数据查询接口PromQL API。

02

Jobs/Exporters

客户端组件,监控并采集指标,对外暴露HTTP服务(/metrics)。

03

PushGateway

主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了,因此Short-lived jobs需要定时将指标push到Pushgateway,再由Prometheus Server从Pushgateway上拉取。

04

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用户认证与管理机制、监控指标的全面性等等。总之,这只是我们前期的初步探索,未来会根据进展情况再与大家分享。

编辑:民生运维文化建设团队

作者:李颖




原文地址:访问原文地址
快照地址: 访问文章快照