1 什么是 Kubernetes?

Kubernetes 是 Google 开源的容器集群管理系统,其管理操作包括部署,调度和节点集群间扩展等。
 
如下图所示为目前 Kubernetes 的架构图,由 master 和 node 端构成,调度部署和扩展由 master 发起,node 协助 master 实现这些功能。
 

 
使用 Kubernetes 可以做到:
 
自动化容器的部署和复制;
随时扩展或收缩容器规模;
将容器组织成组,并且提供容器间的负载均衡;
提供容器弹性,如果容器失效就替换它等等。

2 Prometheus + Grafana

针对 Kubernetes master 端,如何评估各个组件的性能呢?目前社区提供一种搭建便捷、实用性强的监控方案:Prometheus + Grafana。
 
Prometheus 是使用 Golang 开发的开源监控系统,被人称为下一代监控系统,是为数不多的适合 Docker、Mesos 、Kubernetes 环境的监控系统之一 。
 
Grafana 是一个开源的图表可视化系统,简言之,其特点在于图表配置比较方便、生成的图表漂亮。
 
Prometheus + Grafana 监控系统的组合中,前者负责采样数据并存储这些数据;后者则侧重于形象生动的展示数据。
 
搭建好的这两个长(下面)这个样子,是不是感觉 grafana 的图形化展示能力很强大呢?
 

 
prometheus 截图
 

 
grafana 截图
 
那么它们要如何安装和配置?下面就分别对这两者进行个详细的介绍。

3 Prometheus

概念
 
Prometheus 是源于 Google Borgmon 的一个系统监控和报警工具,用 Golang 语言开发。基本原理是通过 HTTP 协议周期性地抓取被监控组件的状态(pull 方式),这样做的好处是任意组件只要提供 HTTP 接口就可以接入监控系统,不需要任何 SDK 或者其他的集成过程。
 
这样做非常适合虚拟化环境比如 VM 或者 Docker ,故其为为数不多的适合 Docker、Mesos 、Kubernetes 环境的监控系统之一,被很多人称为下一代监控系统。
 
pull 方式
 
Prometheus 采集数据用的是 pull 也就是拉模型,通过 HTTP 协议去采集指标,只要应用系统能够提供 HTTP 接口就可以接入监控系统,相比于私有协议或二进制协议来说开发简单。
 
push 方式
 
对于定时任务这种短周期的指标采集,如果采用 pull 模式,可能造成任务结束了 Prometheus 还没有来得及采集的情况,这个时候可以使用加一个中转层,客户端推数据到 Push Gateway 缓存一下,由 Prometheus 从 push gateway pull 指标过来。
 
组成及架构
 
○ Prometheus server:主要负责数据采集和存储,提供 PromQL 查询语言的支持;
○ Push Gateway:支持临时性 Job 主动推送指标的中间网关;
○ exporters:提供被监控组件信息的 HTTP 接口被叫做 exporter ,目前互联网公司常用的组件大部分都有 exporter 可以直接使用,比如 Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等);
○ PromDash:使用 rails 开发的 dashboard,用于可视化指标数据;
○ WebUI:9090 端口提供的图形化功能;
○ alertmanager:实验性组件、用来进行报警;
○ APIclients:提供 HTTPAPI 接口
 

 
安装与配置
 
下载 Prometheus
 
在官网 https://prometheus.io/download/ 中选择合适的版本下载,解压。
 
配置文件
 
配置 job 和每个 job 要收集的目标 metric 数据源即可。配置文件分为 job、targets 两级,Kubernetes 的监控中主要配置 api-server 和 etcd 的 metrics 地址。
 
其中,api-server 和 etcd 的 metrics 地址为: {apiserver_ip}:{apiserver_port}/metrics、{etcd_ip1}:{etcd_port1}/metrics,… ,{etcd_ipX}:{etcd_portX}/metrics
 
#my global config
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.pull数据的间隔时间——默认 evaluation_interval: 15s # By default, scrape targets every 15 seconds.# scrape_timeout is set to the global default (10s).# Attach these labels to any time series or alerts when communicating with# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: ‘codelab-monitor’# Load and evaluate rules in this file every ‘evaluation_interval’ seconds.
rule_files:
#- “first.rules”# – “second.rules”
 
#A scrape configuration containing exactly one endpoint to scrape:# Here it’s Prometheus itself.
scrape_configs:
#The job name is added as a label `job=` to any timeseries scraped from this config.
– job_name: ‘etcd-server-v2’# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 10s #给每个job设置pull数据的间隔时间
# metrics_path defaults to ‘/metrics’# scheme defaults to ‘http’.
static_configs:
– targets: [‘{etcd_ip1}:{etcd_port1}’,'{etcd_ip2}:{etcd_port2}’, … , ‘{etcd_ipX}:{etcd_portX}’]

– job_name: ‘apiserver’# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 10s
#metrics_path defaults to ‘/metrics’# scheme defaults to ‘http’.
static_configs:
– targets: [‘{apiserver_ip}:{apiserver_port}’]
 
启动方式
 
源码启动——当前采用这个方式:直接启动。 参数里面指定配置文件路径、监听端口号。
nohup ./prometheus -config.file=prometheus.yml -web.listen-address “:9090” -log.level=debug 2>&1 >> run.log &
 
启动成功后的效果
 
○ 访问监控页面: http://{host_ip}:9090/(WebUI——9090 端口提供图形化功能), status–>targets 可以看到 job 下面各个 metric 的状态信息。
 

 
○ 在页面 http://{host_ip}:9090/graph 中输入针对该 target 的 Prometheus query 语句即可实时绘图,但是趋势图不能保存,使用起来不便。
 
如以下 query 语句,用于计算名为 apiserver、scheduler 和 controller-manager 的 job 在 20s 内平均 cpu 使用率:rate(process_cpu_seconds_total{job=~”apiserver|scheduler|controller-manager”}[20s]),Prometheus query 语法见第 5 节。
 
以上请求得到的图形可以认为是以下两个步骤的组合:
 
○ 根据 http 请求:http://{host_ip}:9090/api/v1/query?query=rate(process_cpu_seconds_total{job=~”apiserver|scheduler|controller-manager”}[20s]) 后得到的 json 数据(包括 job 名称、时间信息和 cpu 使用率信息等)
 
○ 解析 json 内容,然后进行绘图
 

4 Grafana

Grafana 是一个开源的图表可视化系统,与 Kibana 类似,能够对后端的数据进行实时展示,简单地说图表配置比较方便、生成的图表比较漂亮。它一般和一些时间序列数据库进行配合来展示数据,例如:Graphite、OpenTSDB、InfluxDB 和 Elasticsearch 等。
 
安装与配置
 
下载 Grafana:
 
在官网 http://grafana.org/download/ 选择合适版本下载、解压。
 
启动方式:
 
○ 源码启动(当前采用这个方式)
 
配置文件在 ./conf/defaults.ini, 比如默认的监听端口是 3000,data、log 之类的路径等,我们这边均使用默认配置。
nohup ./bin/grafana-server -homepath ./ 2>&1 >> run.log &
 
○ docker 启动
 
docker run –name grafana \ -d \
-p 3000:3000
-v $DATAPATH:/var/lib/grafana
grafana/grafana

启动成功后效果
 
访问页面 http://{host_ip}:3000/ ,默认情况下管理员的账号和密码均为 admin,登录即可。
 
使用指南
 
○ 添加数据源 datasource
 
添加 prometheus 地址,作为一个数据源,数据源类型选择的是 prometheus。当前 prometheus 内包含了3个 job(一个 Kubernetes、一个 etcd、一个 prometheus 自身), 其中 etcd 的 job 里面又有四个 target,在 grafana 中称其为 instance。
 

 
添加 dashboard
 
添加 dashboard,通过名字区分不同的 dashboard 即可。
 

 
○ 为 dashboard 添加监控 panel
 
常见的 panel 是 graph, 其中 metric 配置为核心配置。Query 中使用的是 Prometheus query 语言,一个 panel 中可以添加 n 多的 query,以图形化方式显示。(所以为了视觉美观和直观,建议图中的线条不要太多)
 

5 Prometheus Query 语言

○ prometheus 的查询语法基础:https://prometheus.io/docs/querying/basics/
○ prometheus 查询语法的操作符:https://prometheus.io/docs/querying/operators/
○ prometheus 的函数:https://prometheus.io/docs/querying/functions
○ prometheus 官方最佳实践:https://prometheus.io/docs/practices/histograms/ ,其中有个例子和 Kubernetes 计算平均延迟时间比较类似。

来自: 网易云-共创云上精彩世界

使用 Prometheus + Grafana 对 Kubernetes 进行性能监控的实践的更多相关文章

  1. Kubernetes使用prometheus+grafana做一个简单的监控方案

    前言 本文介绍在k8s集群中使用node-exporter.prometheus.grafana对集群进行监控.其实现原理有点类似ELK.EFK组合.node-exporter组件负责收集节点上的me ...

  2. Prometheus+Grafana+Alertmanager搭建全方位的监控告警系统

    prometheus安装和配置 prometheus组件介绍 1.Prometheus Server: 用于收集和存储时间序列数据. 2.Client Library: 客户端库,检测应用程序代码,当 ...

  3. .Net Core 2.*+ InfluxDB+Grafana+App Metrics实时性能监控

    前言 .net core 2.* 实施性能监控 这个工具其实给运维 大大们用起来是更爽的.但是Grafana现在还没有找到中文版. 本文需要了解的相关技术与内容: InfluxDb(分布式时序数据库, ...

  4. [置顶] cAdvisor、InfluxDB、Grafana搭建Docker1.12性能监控平台

    通过cadvisor+influxdb+grafana三者有机结合,打造跨主机容器监控. 优点 1.跨主机监控,可扩展 2.容器自发现 3.历史数据长期保存 4.自定义配置程度高 缺点 1.不能自动隐 ...

  5. prometheus operator(Kubernetes 集群监控)

    一.Prometheus Operator 介绍 Prometheus Operator 是 CoreOS 开发的基于 Prometheus 的 Kubernetes 监控方案,也可能是目前功能最全面 ...

  6. 微服务监控之三:Prometheus + Grafana Spring Boot 应用可视化监控

    一.Springboot增加Prometheus 1.Spring Boot 应用暴露监控指标,添加如下依赖 <dependency> <groupId>org.springf ...

  7. 搭建grafana+telegraf+influxdb服务器性能监控平台

    最近在学习性能测试,了解到一套系统资源使用率低的监控环境,也就是grafana+telegraf+influxdb. InfluxDB是一款优秀的时间序列数据库,适合存储设备性能.日志.物联网传感器等 ...

  8. grafana + influxdb + telegraf , 构建性能监控平台

    1.安装平台 1).grafana , 访问各类数据源 , 自定义报表.显示图表等等 , 用于提供界面监控 , 默认端口为3000 , 默认登陆信息admin wget https://grafana ...

  9. prometheus+grafana监控mysql最佳实践

    导航 前言 环境准备 安装Docker 安装prometheus 安装mysqld_exporter prometheus采集数据 安装grafana grafana配置数据源 感谢您的阅读,预计阅读 ...

随机推荐

  1. 201521123111《Java程序设计》第5周学习总结

    1. 本章学习总结 你对于本章知识的学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 2. 书面作业 1.代码阅读:Child压缩包内源代码 ...

  2. Java+大数据开发——HDFS详解

    1. HDFS 介绍  • 什么是HDFS 首先,它是一个文件系统,用于存储文件,通过统一的命名空间--目录树来定位文件. 其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角 ...

  3. python 浅析模块

    今天买了一本关于模块的书,说实话,模块真的太多了,小编许多也不知道,要是把模块全讲完,可能得出本书了,所以小编在自己有限的能力范围内在这里浅析一下自己的见解,同时讲讲几个常用的模块. 首先说一下对模块 ...

  4. 纯css隐藏移动端滚动条解决方案(ios上流畅滑动)

    纯css隐藏移动端滚动条解决方案(ios上流畅滑动) html代码展示(直接复制代码保存至本地文件运行即可): <!DOCTYPE html> <html lang="en ...

  5. vue webuploader 组件开发

    最近项目中需要用到百度的webuploader大文件的分片上传,对接后端的fastdfs,于是着手写了这个文件上传的小插件,步骤很简单,但是其中猜到的坑也不少,详细如下: 一.封装组件 引入百度提供的 ...

  6. oracle数据库知识点

    1.oracle启动后的服务 1. Oracle ORCL VSS Writer Service:Oracle卷映射拷贝写入服务,VSS(Volume Shadow Copy Service)能够让存 ...

  7. 关于select的一个错误---属性选择器

    错误: jquery 获取下拉框 text='1'的 option 的value 属性值  我写的var t= $("#selectID option[text='1']).val() ; ...

  8. Python协程爬取妹子图(内有福利,你懂得~)

    项目说明: 1.项目介绍   本项目使用Python提供的协程+scrapy中的选择器的使用(相当好用)实现爬取妹子图的(福利图)图片,这个学会了,某榴什么的.pow(2, 10)是吧! 2.用到的知 ...

  9. Linux-jdk1.7-tomcat7 简易安装

    一.jdk 安装 安装包:jdk-7u80-linux-x64.tar.gz 2 解压 [root@localhost package]# tar -zxvf jdk-7u80-linux-x64.t ...

  10. nodejs后台集成富文本编辑器(ueditor)

    1 下载ueditor nodejs版本 2 复制public目录下面的文件 到项目静态资源public文件夹下 3 在项目根目录创建ueditor文件夹 要复制进来的内容为 4 在根目录的 uedi ...