运维监控系列(2)-Prometheus简介及多种方式安装

Prometheus

Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包 。自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。现在,它是一个独立的开源项目,并且独立于任何公司进行维护。为了强调这一点并阐明项目的治理结构,Prometheus在2016年加入了 Cloud Native Computing Foundation,这是继Kubernetes之后的第二个托管项目。

首先,Prometheus是一款时序(time series)数据库,但它的功能却并非止步于TSDB,而是一款设计用于进行目标(Target)监控的关键组件。

结合生态系统内的其它组件,例如Pushgateway、Altermanager和Grafana等,可构成一个完整的IT监控系统。

时序数据库

时序数据是基于时间的一系列的数据。在有时间的坐标中将这些数据点连成线,往过去看可以做成多纬度报表,揭示其趋势性、规律性、异常性,往未来看可以做大数据分析,机器学习,实现预测和预警。

时序数据库就是存放时序数据的数据库,并且需要支持时序数据的快速写入、持久化、多纬度的聚合查询等基本功能。

对比传统数据库仅仅记录了数据的当前值,时序数据库则记录了所有的历史数据。同时时序数据的查询也总是会带上时间作为过滤条件。

监控分类

我们有很多方法可以进行监视,但主要分为两大类,即黑盒监视和白盒监视。有很多人也叫做是探针(黑盒监控)和内省(白盒监控) 。

黑盒监控

应用程序或主机是从外部观察的,因此,这种方法可能相当有限。

检查是为了评估被观察的系统是否以已知的方式响应探测:

  • 主机是否响应PING的请求
  • 特定的TCP端口是否打开
  • 应用程序在接收到特定的HTTP请求时,是否使用正确的数据和状态代码进行响应?
  • 特定应用程序的进程是否在其主机中运行?

白盒监控

系统在被测对象表面显示其内部状态和临界段的性能数据。这种类型的自省可能非常强大,因为它暴露了内部操作,因此不同内部组件的健康状况,否则很难甚至不可能确定。

这种数据处理通常以以下方式处理:

  • 通过日志导出:到目前为止,这是也是在广泛引入库之前,应用程序是如何暴露其内部工作的最常见的情况。例如,可以处理HTTP服务器的访问日志来监视请求率、延迟和错误百分比。
  • 以结构化的事件输出:这种方法类似于日志记录,但不是将数据写入磁盘,而是直接将数据发送到处理系统进行分析和聚合。
  • 以聚合的方式保存在内存中:这种格式的数据可以驻留在端点中,也可以直接从命令行工具中读取。这种方法的例子有/metrics with Prometheus metrics、 HAProxy的stats页面或varnishstats命今行。

特征

普罗米修斯的主要特点是:

  • 一个多维数据模型,其中包含通过度量标准名称和键/值对标识的时间序列数据
  • PromQL,一种灵活的查询语言 ,可利用此维度
  • 不依赖分布式存储;单服务器节点是自治的
  • 时间序列收集通过HTTP上的拉模型进行
  • 通过中间网关支持推送时间序列
  • 通过服务发现或静态配置发现目标
  • 多种图形和仪表板支持模式

组件

Promcthcus负责时序型指标数据的采集及存储,但数据的分析、聚合及直观展示以及告警等功能并非由Prometheus Server所负责。
 
Prometheus生态系统包含多个组件,其中许多是可选的:

  • Prometheus server - 收集和存储时间序列数据
  • Client Library: 客户端库,为需要监控的服务生成相应的
  • metrics 并暴露给 - Prometheus server。当 Prometheus server 来 pull 时,直接返回实时状态的 metrics。
  • pushgateway - 对于短暂运行的任务,负责接收和缓存时间序列数据,同时也是一个数据源
  • exporter - 各种专用exporter,面向硬件、存储、数据库、HTTP服务等
  • alertmanager - 处理报警
  • webUI等,其他各种支持的工具,本身的界面值适合用来语句查询,数据可视化,需要第三方组件,比如Grafana。

架构

下图说明了Prometheus的体系结构及其某些生态系统组件:
 
Prometheus直接或通过中间推送网关从已检测的作业中删除指标,以处理短暂的作业。它在本地存储所有报废的样本,并对这些数据运行规则,以汇总和记录现有数据中的新时间序列,或生成警报。Grafana或其他API使用者可以用来可视化收集的数据。

如何收集度量值

度量指标由监控系统执行的过程通常可以分为两种方法:推和拉。
 
Prometheus基于HTTP call,从配置文件中指定的网络端点(endpoint)上周期性获取指标数据。
 
Prometheus支持通过三种类型的途径从目标上“抓取(Serape)”指标数据:

  • Exporters:被监控的目标不支持pro的数据格式,通过exporters抽取指标数据,进行格式化处理成pro兼容的数据格式,再响应给pro server。
  • Instrumentation:应用系统内建了pro兼容的指标数据格式,pro server可以直接采集。
  • Push gateway:pro采用 pull 模式,可能由于不在一个子网或者防火墙原因,导致 Prometheus 无法直接拉取各个 target 数据。在监控业务数据的时候,需要将不同数据汇总, 由 Prometheus 统一收集。暂存在pushgateway,等待Prometheus server拉取。

 

指标类型

Promcthcus使用4种方法来描述监视的指标。

计数器

Counter:计数器,用于保存单调递增型的数据,例如站点访问次数等;不能为负值,也不支持减少,但可以重置回0;

比如网络总访问数。

仪表盘

Gauge:仪表盘,用于存储有着起伏特征的指标数据,例如内存空闲大小等。

Gauge是Counter的超集;但存在指标数据丢失的叮能性时,Counter能让用户确切了解指标随时间的变化状态,而Gauge则可能随时问流逝而精准度越来越低。

比如CPU的使用率:
 

直方图

在大多数情况下人们都倾向于使用某些量化指标的平均值,例如 CPU的平均使用率、页面的平均响应时间。这种方式的问题很明显,以系统API调用的平均响应时间为例:如果大多数API请求都维持在100ms的响应时间范围内,而个别请求的响应时间需要5s,那么就会导致某些WEB页面的响应时间落到中位数的情况,而这种现象被称为长尾问题。

Histogram常常用于观察,一个Histrogram包含下列值的合并:

  • Buckets:桶是观察的计数器。它应该有个最大值的边界和最小值的边界。它的格式为basename> _bucket
  • 观察结果的和,这是所有观案的和。针对它的格式是《basename>_sum
  • 观察结果统计,这是在本次观察的和。它的格式为《basename>_count

Summary

Summary与Histogram类型类似,用于表示段时间内的数据采集结果(通常是请求持或时间或响应大小),但它直接存储了分位数通过客户端计算,然后展示出来,而不是通过区间来计算。

指标摘要及聚合

指标摘要

通常米说,单个指标对我们价值很小,往往需要联合并可视化多个指标,这其中需要一些数学变换,例如,我们可能会统计函数应用于指标或指标组,一些可能应用常见函数包括:

  • 计数:计算特定时间间降内的观索点数,
  • 求和:将特定时间间隔内所有观察点的值累计相加。
  • 平均值,提供特定时间间隔内所有伯的平均值,
  • 中间数:数值的几何中点,正好50%的数值位于它前面,而另外50%则位于它后面,
  • 百分位数:度量占总数特定百分比的观察点的值。
  • 标准差:显示指标分布中与平均值的标准差,这可以测量出数据集的差异程度。标准差为0表示数据都等于平均值较高的标准兰意味着数据分布的范围很广
  • 变化率:显示时间序列中数据之间的变化程度。

指标聚合

除了上述的指标描要外,你可能经常希望能看到来自当个源的指标的聚合图,例如所有应用程序服务器的磁盘空间使用情况。指标聚合最典型的样式就是在一张图上显示多个指标,这有助于你识别环境的发展趋势。

例如,负载均衡器中的问歇性故障可能导致多个服务器的Web流量下降,这通常比通过查看每个单独的指标更容易发现。
 

Docker 安装Prometheus

docker run --name prometheus -d -p 9500:9090 prom/prometheus

Docker Compose安装Prometheus

在docker-compose.yml文件目录下,创建prometheus/conf/prometheus.yml文件,添加配置,将配置文件映射到主机。

prometheus.yml:

# 全局配置
global:
  # 抓取数据的时间间隔
  scrape_interval:     60s 
  # 监控规则的时间间隔
  evaluation_interval: 15s 
  # 数据抓取的超时时间
  # scrape_timeout 10s

# Alertmanager配置 无需配置 使用Granfana
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# 服务器加载规则的位置
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# 监控资源配置
scrape_configs:
  # prometheus监控
  - job_name: 'prometheus' # 定义采集任务名称
    static_configs:
    - targets: ['localhost:9090'] # 采集节点地址 多个采用数组

version: '3'
services:
  # prometheus
  prometheus:
    image: /prom/prometheus:v2.30.0
    container_name: prometheus
    hostname: prometheus
    restart: always
    user: root
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus/conf/prometheus.yml:/etc/prometheus/prometheus.yml
      - ./prometheus/data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
    networks:
      - ops
networks:
    ops:
        driver: bridge

压缩包安装Prometheus

1、 下载地址(根据操作系统选择):https://prometheus.io/download/;
 
2、 安装;

# 上传压缩包
# 解压
tar -zxvf prometheus-2.21.0.linux-amd64.tar.gz
mv prometheus-2.21.0.linux-amd64/ prometheus-2.21.0
cd prometheus-2.21.0
# 查看帮助
./prometheus -h

 
 

1、 启动;

./prometheus --web.listen-address=:9500 &

1、 访问首页;
 

Prometheus 文件

Prometheus安装包包含了以下图中文件。

主要有:

  • console_libraries:控制台依赖库
  • consoles:控制台前端页面
  • data:数据数据库文件
  • prometheus:prometheus本身启动文件
  • promtool:prometheus工具启动文件

 

资料地址

官网:https://prometheus.io/
Github: https://github.com/prometheus/prometheus

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: