首页 > 知识百科 > 正文

Kubernetes Prometheus 系列|Prometheus 介绍和使用|Prometheus+Grafana 集成原创

目录

第1章Prometheus入门1.1 Prometheus的特点1.1.1 易于管理1.1.2 监控服务的内部运行状态1.1.3 基础的数据模型1.1.4 基础的查询语言 PromQL1.1.5 1.1.6 可高效扩展1.1.7 易于集成1.1.8 可视化1.1.9 开放性 1.2 Prometheus 的架构1.2.1 Prometheus 生态圈组件1.2.2 架构理解第2章Prometheus 的安装2.1 安装Prometheus Server2.1.1 上传安装包2.1.2 解压安装包2.1.3 修改配置文件 prometheus.yml 2.2 安装 Pushgateway2.2.1 上传安装包2.2.2 解压安装包 2.3 安装 Alertmanager(简单安装)2.3.1 上传安装包2.3 .2 解压安装包 2.4 安装 Node Exporter(左右安装)2.4.1 上传安装包2.4.2 解压安装包2.4.3 节点分发2.4.4 设置为启动自启动 2.5 启动 Prometheus Server 、 Pushgateway 和Alertmanager2.5.1 Prometheus Server 目录下执行启动命令2.5.2 Pushgateway 目录下执行启动命令2.5.3 在Alertmanager 目录下执行启动命令2.5.4 打开web页面查看第3章 PromQL的介绍使用

第1章Prometheus入门

Prometheus受Google的Brogmon监控系统启发(类似的Kubernetes是从Google的Brog系统演变过来的),从2012年开始由前Google工程师在Soundcloud以开源软件的形式进行研发,并于2015年早期对外发布早期版本。
2016年5月继Kubernetes之后成为第二个正式加入CNCF基金会的项目,同年6月正式发布1.0版本。2017月底发布了基于全新存储层的2.0版本,能够更好地与容器平台、云平台配合。
Prometheus作为新一代的云原生监控系统,目前已经有超过650+位贡献者参与到Prometheus的研发工作上,并且超过120+项的第三方集成。

1.1 Prometheus的特点

Prometheus是一个开源的完整监控解决方案,其对传统监控系统的测试和其他模型进行了彻底的革新,形成了基于中央化的规则计算、统一分析和类似的新模型。相对于传统监控系统,Prometheus具有以下优点:

1.1.1 易于管理

Ø Prometheus核心部分只有一个单独的二进制文件,不存在任何的第三方依赖(数据库,磁盘阵列等)。唯一需要的就是本地磁盘,因此不会有潜在的级联故障的风险
➢ Prometheus 基于 Pull 模型的架构方式,可以在任何地方(本地电脑,开发环境,测试环境)搭建我们的监控系统。
➢ 对于一些复杂的情况,还可以使用 Prometheus 服务发现(服务发现)的能力动态管理监控目标。

1.1.2 监控服务的内部运行状态

Pometheus 鼓励用户监控服务的内部状态,基于 Prometheus 丰富的客户端库,用户可以轻松的在应用程序中添加对 Prometheus 的支持,从而让用户可以获取服务和应用内部真正的运行状态。

1.1.3 强大的数据模型

所有采集的数据监控均以指标(metric)的形式保存在内置的时间序列数据库(TSDB)中。所有样本除了基本的指标名称之外,还包含一组用于描述该样本特征的标签。
如下所示:

http_request_status{code='200',content_path='/api/path',environment='produment'} => [value1@timestamp1,value2@timestamp2...]http_request_status{code='200',content_path='/api/path2',environment=' produment'} => [value1@timestamp1,value2@timestamp2...]

每一条时间序列由指标名称(Metrics Name)以及一组标签(Labels)唯一标识。条时间序列按照时间的顺序存储一系列的样本值。
➢ http_request_status:指标名称(Metrics Name)
➢ {code='200',content_path='/api/path',environment ='produment'}:表示维度的标签,基于这些标签我们可以方便地对监控数据进行聚合,过滤,裁剪。
➢ [value1@timestamp1,value2@timestamp2…]:按照时间的流程图顺序存储

1.1.4 强大的查询语言PromQL

Prometheus内置了一个强大的数据查询语言PromQL。通过PromQL可以实现对监控数据的查询、聚合。同时PromQL 也被评估数据可视化(如 Grafana) 以及还原。
通过 PromQL 可以轻松回答以下过去的问题:
➢ 在一段时间中 95% 应用延迟时间的分布范围?
/> ➢ 预测在 4 小时后,磁盘空间占用大致会是什么情况?
➢ CPU 占用率前 5 位的服务有哪些?(过滤)

1.1.5高效

对于监控系统而言,大量的监控任务必然导致大量的数据产生。而 Prometheus 可以高效地处理这些数据,单对于 Prometheus Server 实例而言就可以处理:
➢ 数以百万计的监控指标
➢ 每秒处理存储万个数据点

1.1.6 可扩展

可以在每个数据中心、每个数据中心Prometheus对于联邦集群的支持,可以让多个Prometheus实例产生一个逻辑集群,当单实例Prometheus Server处理的任务量过大时,通过使用功能分区(sharding)+联邦集群(federation) ) 可以对其进行扩展。

1.1.7 易于集成

使用 Prometheus 可以快速的搭建监控服务,并且可以非常方便地在应用程序中进行集成。 目前支持:Java ,JMX,Python,Go,Ruby,.Net,Node.js等等语言的客户端SDK,基于这些SDK可以快速让应用程序纳入程序到Prometheus的监控接口,或者开发自己的监控数据收集程序。
同时这些客户端收集的监控数据,扩展支持 Prometheus,还支持 Graphite 这些其他的监控工具。
同时 Prometheus 还支持与其他的监控系统进行集成:Graphite,Statsd,Collected,Scollector, muini Prometheus 社区还提供大量第三方实现的监控数据采集支持:JMX,CloudWatch,EC2,MySQL,PostgresSQL,Haskell,Bash,SNMP,Consul,Haproxy,Mesos,Bind,CouchDB,Django,Memcached,RabbitMQ,Redis,RethinkDB,Rsyslog 等等。

1.1.8 可视化

Ø Prometheus Server 中自带的 Prometheus UI,可以方便地直接对数据进行查询,并且支持直接以图形化的形式展示数据。同时 Prometheus 还提供了一个独立的基于 Ruby On Rails 的 Dashboard 解决方案 Promdash。
➢ 最新的 Grafana 可视化工具也已经提供了完整的 Prometheus 支持,基于 Grafana 可以创建更加精美的监控图标。
➢ 基于 Prometheus 提供的 API 还可以实现自己的监控可视化 UI。

1.1.9 开放性

通常来说,当我们需要监控一个应用程序时,一般需要该应用程序提供对相应监控系统协议的支持,因此应用程序会与所选择的监控系统进行绑定。为了减少这种情况种绑定所带来的限制,
对于决策者来说或者你就直接在应用中集成该监控系统的支持,或者就在外部创建单独的服
业务来架构不同的
而对于 Prometheus 来说,使用 Prometheus 的客户端库的输出格式不仅支持 Prometheus 的格式化数据,也可以输出支持其他监控系统的格式化数据,比如 Graphite。
因此你甚至可以在不使用 Prometheus 的情况下,采用 Prometheus 的客户端库来让
你的应用程序支持监控数据采集。

1.2 Prometheus 的架构

1.2.1 Prometheus生态圈组件

Ø Prometheus Server:主服务器,负责收集和存储时间序列数据
➢ 客户端库:应用程序代码插桩,将监控指标嵌入到被监控应用程序中
➢ Pushgateway:自主网关,用于支持短期作业提供一个主动网关
➢ exporter:专门为一些应用开发的数据组件—exporter,例如:HAProxy、StatsD、
Graphite 等等。
➢ Alertmanager:专门用于处理警报的组件

1.2.2 架构理解

Prometheus 框架设计为一个维度存储模型,可以把它理解为一个 OLAP 系统。
1、存储计算层< /strong>
➢ Prometheus Server,里面包含了存储引擎和计算引擎。
➢ Retrieval 组件为取数据组件,它会主动从 Pushgateway 或者 Exporter 拉取指标数据。
➢ Service
➢ TSDB,数据核心与查询。
➢ HTTP 服务器,对外提供 HTTP 服务。
2、采集层
采集层分为两类,一类是生命周期应激的作业,还有一类是生命周期应激的作业。
➢ 短作业:直接通过 API,在退出时间指标中给Pushgateway。
➢ 长作业:Retrieval 组件直接从Job 或Exporter 拉取数据。
3、应用层
应用层主要分成两组,一一种是AlertManager,另一种是数据可视化。
➢ AlertManager
监听Pagerduty,是一套付费的监控报警系统。可实现短信报警、5分钟无人应答
电话通知、仍然无人应答,通知值班人员经理...
Emial,发送邮件
... ...
➢ 数据可视化
Prometheus build-在WebUI
Grafana
其他基于API开发的客户端

第2章Prometheus的安装

官网:https://prometheus.io/
下载地址:https://prometheus.io/download/
部署资源包链接

2.1 安装Prometheus Server

Prometheus基于Golang编写、编译后的软件包,不依赖于任何的第三方依赖。只需要下载对应平台的二进制包,解压并添加基本的配置即可正常启动Prometheus Server。

2.1.1 上传安装包
mkdir /opt/software

上传 prometheus-2.29.1.linux-amd64.tar.gz 到虚拟机的/opt/software目录

< h5>2.1.2 解压安装包

Ø 解压到/opt/module目录下

cd /opt/software mkdir /opt/moduletar -zxvf prometheus-2.29.1.linux-amd64.tar.gz -C /opt/module

Ø 修改目录名

cd /opt/modulemv prometheus-2.29.1.linux-amd64 prometheus-2.29.1
2.1.3 修改配置文件prometheus.yml
cd prometheus-2.29.1vim prometheus.yml

在 scrape_configs 配置项下添加配置:

scrape_configs: # 作业名称将作为标签 `job=` 添加到从此配置中抓取的任何时间序列中。 - job_name: "prometheus" #metrics_path 默认为 '/metrics' # schema 默认为 'http'。 static_configs: - 目标:["10.10.101.114:9090"]#添加 PushGateway 监控配置 - job_name: 'pushgateway' static_configs: - 目标:['10.10.101.114:9091'] labels: instance: Pushgateway# 添加节点导出器监控配置 - job_name: '节点导出器' static_configs: - 目标:['10.10.101.114:9100', '10.10.101.115:9100','10.10.101.116:9100' ]

配置说明:
1、全局配置块:控制Prometheus服务器的全局配置
➢ scrape_interval:配置拉取数据的时间间隔,默认为1分钟。
➢ evaluation_interval:规则验证(生成警报)的时间间隔,默认为1分钟。
2、rule_files配置块:规则配置文件
3、scrape_configs配置块:配置采集目标相关,prometheus监视的目标。 Prometheus
自身的运行信息可以通过 HTTP 访问,所以 Prometheus 可以监控自己的运行数据。
➢ job_name:监控作业的名称
➢ static_configs:表示静态目标配置,就是固定从某处个目标拉取数据
➢ 目标:指定监控的目标,其实际就是从哪儿拉取数据据。 Prometheus 会来自
http://10.10.101.114:9090/metrics
Prometheus 是可以在运行时自动加载配置的。启动时需要添加:–web.enable-lifecycle

2.2 安装 Pushgateway

Prometheus 在正常情况下是采用拉模式从产生metric的作业或者exporter(比如专门的监控主机的NodeExporter)拉取监控数据。但是我们要监控的是Flink on YARN作业,想让Prometheus自动发现作业的作业、结束以及结束自动拉取数据显然是比较困难的。
PushGateway 就是一个中转组件,通过配置 Flink on YARN 作业将 metric 推到
PushGateway,Prometheus 再从 PushGateway 拉取就可以了。

2.2.1 上传安装包

上传pushgateway-1.4.1.linux-amd64.tar.gz 到虚拟机的/opt/software目录

2.2.2 解压安装包

➢ 解压到/opt/module 目录下
tar -zxvf Pushgateway-1.4.1.linux-amd64.tar.gz -C
/opt/module
➢ 修改目录名
mv Pushgateway-1.4.1.linux-amd64 Pushgateway-1.4.1

2.3 安装Alertmanager(选择性安装)

2.3.1 上传安装包

上传alertmanager-0.23.0.linux-amd64.tar.gz 到虚拟机的/opt/software目录

2.3.2解压安装包

Ø 解压到/opt/ module 目录下
tar -zxvf Alertmanager-0.23.0.linux-amd64.tar.gz -C
/opt/module
➢ 修改目录名
mv Alertmanager-0.23. 0.linux-amd64 Alertmanager-0.23.0

2.4 安装 Node Exporter(选择性安装)

在 Prometheus 的架构设计中,Prometheus Server 主要负责数据的收集、存储和外部提供数据查询支持,而实际的监控样本数据的收集由Exporter完成。为了能够监控到某些东西,如主机的CPU使用率,我们因此需要使用到Exporter。Prometheus周期性的从Exporter暴露的HTTP服务地址(通常是/metrics)提取监控样本数据。
Exporter可以是一个相对开放的概念,其可以是一个独立运行的程序独立于监控目标之外,也可以是直接内置于监控目标中。只要能够向 Prometheus 提供标准格式的监控样
本数据即可。
为了能够采集到主机的运行指标如 CPU、内存、磁盘等信息。我们可以使用 Node Exporter。Node Exporter 同样采用 Golang 编写,并且不存在任何的第三方依赖,只需要下载,解压即可运行。可以从 https://prometheus.io/download/ 获取最新的节点
exporter 版本的二进制包

2.4.1 上传安装包

上传node_exporter-1.2.2.linux-amd64.tar.gz到虚拟机的/opt/software目录

2.4.2 解压安装包

Ø 解压到/opt/module目录下
tar -zxvf node_exporter-1.2.2.linux-amd64.tar.gz -C /opt/module< br /> ➢ 修改目录名
mv node_exporter-1.2.2.linux-amd64 node_exporter-1.2.2
➢ 启动成功并通过页面查看是否
执行./node_exporter
浏览器输入:http://hadoop202:9100/metrics,可以看到当前节点导出器获取
到当前主机的所有监控数据。

2.4.3 节点调度

Ø将解压后的目录分发到要监控的节点

xsync node_exporter-1.2.2

xsync同步脚本直通车修改
➢ Prometheus 配置文件 prometheus.yml,在 2.1.3 的时候已经添加过配置

-targets: ['10.10.101.114:9100','10.10.101.115 :9100','10.10.101.116:9100']
2.4.4设置开机自启动

Ø创建服务文件

<代码>sudo vim /usr/lib/systemd/system/node_exporter.service
[Unit]Description=node_exportDocumentation=https://github.com/prometheus/node_exporterAfter=network.target[Service]Type=simpleUser=rootExecStart= /opt /module/node_exporter-1.2.2/node_exporterRestart=on-failure[Install]WantedBy=multi-user.target

Ø 发送文件
sudo xsync /usr/lib/systemd /system/node_exporter.service
➢ 设为开机自启动(所有机器都执行)
sudo systemctl enable node_exporter.service
➢ 启动服务(所有机器都执行)
sudo systemctl start node_exporter.service

2.5 启动 Prometheus Server 、 Pushgateway 和Alertmanager

2.5.1 Prometheus Server 目录下执行启动命令
nohup . /prometheus --config.file=prometheus.yml > ./prometheus.log 2>&1 &ps -ef |grep prometheus
2.5.2 Pushgateway 目录下执行启动命令
nohup ./pushgateway --web.listen-address :9091 > ./pushgateway.log 2>&1 &ps -ef |grep Pushgateway
2.5.3 在Alertmanager目录下启动
nohup ./alertmanager --config.file=alertmanager.yml > ./alertmanager.log 2>&1 &ps -ef |grep Alertmanager 
2.5.4 打开web页面查看

Ø浏览器输入:http://10.10.101.114:9090/
Ø点击Status,选中Targets:
< br /> ➢ prometheus、pushgateway 和 node exporter 均处于 up 状态,表示安装启动成功:

至此 Prometheus 主服务完成部署。

第 3 章 PromQL 的使用介绍< /h3>

PromQL直通车
持续更新中,关注不迷糊

Kubernetes Prometheus 系列|Prometheus 介绍和使用|Prometheus+Grafana 集成原创由知识百科栏目发布,感谢您对的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Kubernetes Prometheus 系列|Prometheus 介绍和使用|Prometheus+Grafana 集成原创