Prometheus+Grafan监控k8s集群详解

一,Prometheus概述

1,什么是Prometheus?
Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包,自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。现在,它是一个独立的开源项目,并且独立与任何公司维护。为了强调这一点并阐明项目的治理结构,Prometheus在2016年加入了 Cloud Native Computing Foundation(云原生计算基金会(CNCF)),这是继kubernetes之后的第二个托官项目。

2,Prometheus的优势
Prometheus 的主要优势有:

  • 由指标名称和键/值识别时间序列数据组成的多维数据模型。
  • 强大的查询语言 (PromQL)
  • 不依赖分布式存储;单个服务节点具有自治能力。
  • 通过基于HTTP的拉取方式采集时间序列数据。
  • 可以通过中间网关来推送时间序列数据。
  • 可以通过静态配置文件或服务发现来获取监控目标。
  • 支持多种类型的图标和仪表盘,比如Grafana等。

3,Prometheus的核心组件
Prometheus生态系统有多个组件组成,其中有许多组件是可选的:

  • Prometheus Server:用于收集指标和存储时间序列数据,并提供查询接口。
  • client Library:客户端库(例如Go,python,java等),为需要监控的服务产生相应的/metrics(服务指标度量)并暴露给Prometheus server。
  • push gateway:推送网关,主要用于临时性的jobs。由于这类jobs存在时间较短,可能在Prometheus来pull之前就消失了,对此jobs定时将指标push到pushgateway,再由Prometheus server从pushgateway上pull。
  • Exporter:用于暴露已有的第三方服务的 metrics 给Prometheus。
  • alertmanager:用来处理告警,从Prometheus server端接收警告后,会进行去除重复数据,分组,并路由到对收的接收方式,发出报警。最常见的接收方式:电子邮件。

4,Prometheus的架构
Prometheus 的整体架构以及生态系统组件如下图所示:
Prometheus+Grafan监控k8s集群详解

Prometheus server直接从监控目标中或者间接通过推送网关来拉取监控指标,它在本地存储所有抓取到的样本数据,并对此数据执行一系列规则,以汇总和记录现有数据的新时间序列和生成告警。可以通过Grafana或者其他工具来实现监控数据的可视化。

5,Prometheus的优缺点
Prometheus对于采集纯数字值的时间序列非常在行,所以它适合以物理机为中心的监控,也适合监控高度动态的面向服务的架构体。在微服务领域,它的多维数据采集以及查询非常独到且很有竞争力。
Prometheus最大的价值在于可靠性,用户可以再任何时候看到整个被监控系统的统计信息,即使在系统有问题的是时候。但它不能做到100%的精确,比如如果你要按请求数据计费,那么Prometheus不太适合你,因为它收集的数据可能不够详细完整。这种情况下你最好使用其他系统来收集和分析数据以进行计费,并使用Prometheus来监控系统的其余部分。

二,Prometheus部署

部署环境:

节点名 主机ip 操作系统
master 172.16.1.30 Centos7
node01 172.16.1.31 Centos7
node02 172.16.1.32 Centos7

1,获得Prometheus的git项目:

1)安装git工具包:
[root@master ~]# yum install git -y
2)获取Prometheus的git项目:
[root@master prometheus]#  git clone https://github.com/coreos/kube-prometheus.git

Prometheus+Grafan监控k8s集群详解
Prometheus+Grafan监控k8s集群详解

#执行git pull命令进行更新,确保克隆到本地的是最新的:
[root@master kube-prometheus]# git pull
Already up-to-date.

2,导入部署Prometheus所需组件镜像:
1)在集群中的所有node上进行上传镜像包(包括master)
Prometheus+Grafan监控k8s集群详解
2)分别在集群中的node上进行load操作:

#注意:确定在当前路径下执行
[root@master images]# for i in `ls`; do docker load < $i; done
[root@node01 images]# for i in `ls`; do docker load < $i; done
[root@node02 images]#  for i in `ls`; do docker load < $i; done

以上镜像都是我通过国内阿里云镜像站下载好的(已修改tag),我已上传至网盘,大家可以去进行下载:链接:https://pan.baidu.com/s/1c8pP3vAS9qHCQqc-XaYRXQ
提取码:8zk2

注意:
考虑到以上组件的镜像版本在git项目上会经常的更新,所以大家就得根据最新版本去下载相对应的镜像;yaml文件中默认是从quay.io和gcr.io进行镜像拉取(其他的国内可直接拉取),我们知道,国内访问外网是被屏蔽的,我们无法直接将镜像下载下来,所以可以分别通过 quay-mirror.qiniu.com 和 registry.aliyuncs.com镜像站去拉取。
###例如:
拉取镜像:quay.io/coreos/prometheus-operator:v0.36.0
可以改为:quay-mirror.qiniu.com/coreos/prometheus-operator:v0.36.0

拉取镜像:gcr.io/google_containers/kube-proxy
可以改为:registry.aliyuncs.com/google_containers//kube-proxy

3,修改访问模式为nodeport

1)修改grafana-service文件:
[root@master kube-prometheus]# cd manifests/
[root@master manifests]# vim grafana-service.yaml 

Prometheus+Grafan监控k8s集群详解

2)修改Prometheus-service文件:
[root@master manifests]# vim prometheus-service.yaml 

Prometheus+Grafan监控k8s集群详解
3)修改alertmanager-service文件:
Prometheus+Grafan监控k8s集群详解

4,执行安装操作
1)先安装Prometheus所需要的资源(在manifests/setup目录下的yaml文件):
Prometheus+Grafan监控k8s集群详解

[root@master manifests]# kubectl apply -f  setup/
2)安装Prometheus(在manifests/路径下的yaml文件):
[root@master manifests]# cd ..
[root@master kube-prometheus]# kubectl apply -f manifests/

5,查看Prometheus资源(确保以下pod都达到所期望的状态值)
[root@master kube-prometheus]# kubectl get pod -n monitoring
Prometheus+Grafan监控k8s集群详解
[root@master kube-prometheus]# kubectl get svc -n monitoring
Prometheus+Grafan监控k8s集群详解

以上各组件说明:

  • MerticServer: k8s集群资源使用情况的聚合器,收集数据给k8s集群内使用;如kubectl,hpa,scheduler等。
  • PrometheusOperator:是一个系统监测和警报工具箱,用来存储监控数据。
  • NodeExPorter:用于各个node的关键度量指标状态数据。
  • kubeStateMetrics:收集k8s集群内资源对象数据,指定告警规则。
  • Prometheus:采用pull方式收集apiserver,scheduler,control-manager,kubelet组件数据,通过http协议传输。
  • Grafana:是可视化数据统计和监控平台。

6,Prometheus监控页面展示

1)访问Prometheus web页面:
访问url:http://172.16.1.30:30200/
Prometheus+Grafan监控k8s集群详解

Prometheus+Grafan监控k8s集群详解

Prometheus+Grafan监控k8s集群详解

#部署成功后,会显示集群节点各个组件的详细信息,并且状态为up。

2)访问alertmanager web页面:
访问url: http://172.16.1.30:30300
Prometheus+Grafan监控k8s集群详解

Prometheus+Grafan监控k8s集群详解

3)访问Grafana 图形化界面:
访问url: http://172.16.1.30:30100 , 初始用户名和密码都为:admin
Prometheus+Grafan监控k8s集群详解

#修改用户名和密码后点击登录:
Prometheus+Grafan监控k8s集群详解

Prometheus+Grafan监控k8s集群详解

三,使用Prometheus监控平台

1,为grafana添加Prometheus数据源
Prometheus+Grafan监控k8s集群详解

上图所示,可以看到当部署完Prometheus后默认已经为我们添加了一个Prometheus数据源,大家也可以点击右上角的"Add data source"选项自定义添加所需要的数据源。如下图所示:
Prometheus+Grafan监控k8s集群详解

Prometheus+Grafan监控k8s集群详解

Prometheus+Grafan监控k8s集群详解

2,为grafana添加dashboard
Prometheus+Grafan监控k8s集群详解

3,监控集群资源
Prometheus+Grafan监控k8s集群详解

Prometheus+Grafan监控k8s集群详解

如上图所示,已为我们提供了一些内置资源监控模板,大家可以选择查看需要监控的资源。下面将展示几个重要监控的资源对象信息:

1)查看集群资源信息:
Prometheus+Grafan监控k8s集群详解

Prometheus+Grafan监控k8s集群详解

#可以看到集群中cpu,memory,network以及磁盘IO等使用信息的展示。

2)查看各个节点资源的使用情况:
Prometheus+Grafan监控k8s集群详解
Prometheus+Grafan监控k8s集群详解

3)Pod资源查看:
Prometheus+Grafan监控k8s集群详解

#如上所示,可以看到Prometheus为我们提供的资源监控项还是非常全面的。其他资源监控项大家可以自行查看。

4,其他监控模板
grafana提供自带的监控模板是非常丰富的,不过我们也可以进入Grafana官网下载其他监控模板。

1)下载监控模板,如下图所示:
Prometheus+Grafan监控k8s集群详解

比如,我们选择Node Exporter for Prometheus 模板:
Prometheus+Grafan监控k8s集群详解

2)在Grafana web界面上导入模板:
Prometheus+Grafan监控k8s集群详解
Prometheus+Grafan监控k8s集群详解

Prometheus+Grafan监控k8s集群详解

Prometheus+Grafan监控k8s集群详解

模板导入成功,其他类型的监控模板大家可以自己在Grafana官网上去下载。

Alertmanager实现邮箱告警可参考博文:监控利器-Prometheus安装与部署+实现邮箱报警