Prometheus教程(1)Prometheus工作原理与安装部署

Prometheus教程(1)Prometheus工作原理与安装部署

一、监控系统介绍

监控的作用是持续不间断对系统或服务进行监视,确保被监控的对象处于一个正常稳定的运行状态。监控系统是确保系统稳定、高效运行的关键手段,能帮助运维人员提前发现问题、快速定位问题以及解决问题。一个合格的监控系统要包含事前预警、事后追溯、趋势分析、对比分析、数据可视化等核心特性。

在复杂的IT环境中,需要监控的指标非常多,可以分为硬件监控、系统监控、中间件监控、应用监控、业务监控。在云原生时代,监控系统从可观测性来说分为了指标监控(Metrics)、日志监控(Logging)、链路跟踪(Tracing)。指标监控记录的是一些随时间推移产生的可聚合数据,代表产品有老牌Zabbix和当下最火的Prometheus;日志监控记录了离散式的日志或事件,代表产品为ELK;链路跟踪则是对分布式应用调用链跟踪,代表产品有Zipkin、Jaeger、Pinpoint等。

监控系统可以分为白盒监控和黑盒监控,白盒监控是通过被监控对象的内部指标来分析问题的根本原因,通常能一眼快速定位到问题,而黑盒监控关注的是问题的表面现象,更多是站在用户的角度,关注他们在实际应用中可能发生的问题。

在监控过程中需要明确哪些指标是核心指标,需要重点关注。目前业界广泛采用了由谷歌提出的监控黄金指标,它们分别是延迟、流量、错误、饱和度。延迟是指服务请求成功的所需时长;流量是衡量服务的容量需求,如每秒处理的HTTP请求数或者数据库QPS;错误则是请求失败的情况;饱和度通常用来衡量资源的使用情况,如CPU、内存、磁盘资源情况。

二、Prometheus主要特性

Prometheus作为一款时序数据库(所谓时序数据是指按照固定时间周期对某些指标反复测量,最终得到一个数据集合,这些数据随着时间推移形成一个连续的序列,因此叫做时序数据),结合Alertmanager和Grafana构造出了目前最火的监控系统体系,其主要优势包含以下几点:

· 监控指标按照时间顺序排列存储,每个数据点都有一个时间戳,当要查询特点时间点的数据时可以非常快速找到,而不用遍历整个数据库

· 多种服务发现方式,对于动态资源的监控非常方便,并且原生支持K8S

· 可以结合Grafana绘出漂亮图形大盘,通过AlertManager或Grafana实现报警

· 不依赖分布式存储和额外的数据库,数据直接保存在本地。存储的数据格式是Key/Value形式,对存储消耗低,根据官方数据,每30秒记录百万条时间序列,并且保留60天,仅需要200G左右的磁盘空间(如果对历史数据有较高要求,可以结合Open TSDB)

· 周边插件丰富,如果对监控要求不是特别严格的话,默认的几个成品插件已经足够使用

· 本身基于数学计算模型,有大量的函数可用,可以实现很复杂的监控(需要有一定数学思维,独有的数学命令行导致上手难度较高)

· 可以嵌入很多开源工具的内部去进行监控,数据更可信

三、Prometheus数据采集方式

在Prometheus中,被监控端无需安装专门的agent,它只需要通过HTTP协议开放符合Prometheus规范的指标数据就可以让Prometheus顺利完成数据抓取。由于不是所有服务都能通过HTTP协议提供符合Prometheus规范的指标数据,Prometheus设计了3种数据采集方式:

· Instrumentation:应用程序原生支持通过HTTP协议开放符合Prometheus规范的指标数据

· Exporer(导出器):使用exporter从应用中抓取到数据,然后完成数据转换,最后提供给Prometheus

· PushGateway:一些因为生命周期较短不方便被Prometheus抓取数据的应用,可以通过PushGateway主动将数据推送给Prometheus

四、Prometheus作业与实例

在Prometheus中被监控的对象被称为实例(Instance)、目标(Target)或者端点(Endpoint)。每个实例代表着一个独立的监控目标,通常由IP地址加端口号组合而成,如 localhost:9090。为了便于管理这些被监控对象,通常会将功能相似或者类型相同的对象放到同样一个组中,这个组被称为Job。比如可以将多个分布在不同服务器上的MySQL归类为同一个 mysql 的Job中,而后按照Job分组后的维度进行分析。

五、Prometheus的安装部署

1、下载Prometheus二进制包

通过Prometheus官网(https://prometheus.io/download/)可以下载prometheus二进制包,使用二进制包最大的好处就是解压后就可与直接使用。

wget https://github.com/prometheus/prometheus/releases/download/v2.53.3/prometheus-2.53.3.linux-amd64.tar.gz

解压安装包后获取到主程序和配置文件,目录结构如下

prometheus1.png

2、Prometheus的配置文件

prometheus.yml为主配置文件,该文件分为global全局配置、alerting告警配置、rules_file、scrape_configs被监控端配置。下面是一个最基础的配置文件,表示每15秒采集一次http://192.168.159.101:9090/metrics的监控指标数据

#全局配置
global:
  scrape_interval: 15s         
#下面的配置用于定义监控目标
scrape_configs:
  - job_name: "prometheus" 
    metrics_path: "/metrics"  
    static_configs:
    - targets: ["192.168.159.101:9090"]

scrape_interval:定义监控间隔,这里代表 Prometheus 每 15 秒采集一次监控指标数据

scrape_configs:用于配置具体的监控任务

job_name:定义监控任务的名称,通常监控的是什么对象就配置为对应的名字,见名知意

metrics_path:指定了从哪个 HTTP 路径获取监控指标,默认为/metrics,所以这里其实可以省略不写

static_configs:声明使用静态配置 

targets:指定了具体要监控的目标地址和端口号,可以一次指定多个目标,目标之间使用逗号分隔或者多行表示

3、启动Prometheus

指定配置文件并启动服务,Prometheus默认监听9090端口。Prometheus服务端所采集到的数据(metrics)会先存放在内存中,再定期写入硬盘,监控数据库默认只会保留15天。如果服务重新启动的话会将硬盘数据写回到内存中,所以对内存有一定消耗。

/usr/local/prometheus-2.53.3/prometheus --config.file=/usr/local/prometheus-2.53.3/prometheus.yml --web.enable-lifecycle

4、热加载Prometheus

当修改了配置文件后可以通过热加载的方式让配置生效,实现热加载的前提是启动Prometheus时加上了--web.enable-lifecycle选项,否则会提示Lifecycle API is not enabled

curl -X POST http://192.168.159.101:9090/-/reload

5、Prometheus注册系统服务

创建文件 /etc/systemd/system/prometheus.service

cat /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/prometheus/prometheus --config.file=/data/prometheus/conf/prometheus.yml --storage.tsdb.path=/data/prometheus/data --web.enable-lifecycle
ExecStop=/bin/kill -SIGTERM $MAINPID
Restart=on-failure
TimeoutStopSec=30
[Install]
WantedBy=multi-user.target

6、后台启动

systemctl daemon-reload
systemctl enable prometheus
systemctl start prometheus

7、访问Prometheus

通过浏览器访问服务端9090端口可以进入到Prometheus WEB管理界面,通过管理界面可以查询已监控的节点信息并且获取监控指标

prometheus2.png

文章评论

猜你喜欢

Prometheus教程(7)使用PushGateway自定义监控

运维技术 Prometheus教程(7)使用PushGateway自定义监控

一、PushGateway 介绍在 Prometheus 的体系结构中,需要依赖 PushGateway 来对一些生命周期较短的任务或者无法被 Prometheus 直接拉取到指标的对象进行...

运维技术 Prometheus教程(6)AlertManager告警部署与配置

Prometheus教程(6)AlertManager告警部署与配置
Prometheus教程(6)AlertManager告警部署与配置
Prometheus教程(6)AlertManager告警部署与配置
Prometheus教程(6)AlertManager告警部署与配置

一、 Alertmanager 介绍AlertManager 是 Prometheus 生态中实现告警管理的关键组件。Prometheus会定期检查指标数据是否与设定好的告警规则匹...

Prometheus教程(5)常用exporter的安装与使用配置

运维技术 Prometheus教程(5)常用exporter的安装与使用配置

一、exporter介绍Prometheus exporter的作用是通过HTTP协议开放符合规范的指标数据给Prometheus抓取。在Prometheus官网提供了大量现成的exporter,基本...

Prometheus教程(4)指标类型与常用函数

运维技术 Prometheus教程(4)指标类型与常用函数

一、Prometheus 指标类型介绍Prometheus 提供了四种指标类型,这些类型定义了指标值的语义和处理方式,不同的指标类型也有不同的聚合函数搭配使用1、Gauges仪表盘型,该指标类型的值会...

Prometheus教程(3)PromQL用法详解

运维技术 Prometheus教程(3)PromQL用法详解

一、PromQL 基本介绍PromQL 全称 Prometheus Query Language,它是 Prometheus 专用查询语言。通过PromQL可以灵活的对每个指标实现条件查询、...