Prometheus监控系统

简介:

Prometheus是由前 Google 工程师从 2012 年开始在 Soundcloud以开源软件的形式进行研发的系统监控和告警工具包,自此以后,许多公司和组织都采用了 Prometheus 作为监控告警工具。

Prometheus的优势

Prometheus 的主要优势有:

  • 由指标名称和和键/值对标签标识的时间序列数据组成的多维数据模型
  • 强大的查询语言 PromQL
  • 不依赖分布式存储;单个服务节点具有自治能力。
  • 时间序列数据是服务端通过 HTTP 协议主动拉取获得的。
  • 也可以通过中间网关来推送时间序列数据。
  • 可以通过静态配置文件或服务发现来获取监控目标。
  • 支持多种类型的图表和仪表盘。
  • 时序数据和时序数据库

和zabbix的区别:

  • zabbix每个结点都安排一个agent,通过agent上报,上报有主动/被动模式。zabbix server很简单 就server端和agent端,zabbix所有的功能都展示在server端
  • Prometheus将报警分配给Alertmanager组件,去接触servers-discover展示服务发现功能,将功能打散,每个模块都有功能。

Prometheus的组件、架构

Prometheus 的整体架构以及生态系统组件如下图所示:
在这里插入图片描述Prometheus Server 直接从监控目标中或者间接通过推送网关来拉取监控指标,它在本地存储所有抓取到的样本数据,并对此数据执行一系列规则,以汇总和记录现有数据的新时间序列或生成告警。可以通过 Grafana或者其他工具来实现监控数据的可视化。

  • Prometheus server是Prometheus架构中的核心组件,基于go语言编写而成,无第三方依赖关系,可以独立部署在物理服务器上、云主机、Docker容器内。主要用于收集每个目标数据,并存储为时间序列数据,对外可提供数据查询支持和告警规则配置管理
    • Prometheus服务器可以对监控目标进行静态配置管理或者动态配置管理,它将监控采集到的数据按照时间序列存储在本地磁盘的时序数据库中(当然也支持远程存储),自身对外提供了自定义的PromQL语言,可以对数据进行查询和分析。
  • Client Library是用于检测应用程序代码的客户端库。在监控服务之前,需要向客户端库代码添加检测实现Prometheus中metric的类型。
  • **Exporter(数据采集)**用于输出被监控组件信息的HTTP接口统称为Exporter(导出器)。目前互联网公司常用的组件大部分都有Expoter供直接使用,比如Nginx、MySQL、linux系统信息等。
  • Pushgateway是指用于支持短期临时或批量计划任务工作的汇聚节点。主要用于短期的job,此类存在的job时间较短,可能在Prometheus来pull之前就自动消失了。所以针对这类job,设计成可以直接向Pushgateway推送metric,这样Prometheus服务器端便可以定时去Pushgateway拉去metric。
    • Pushgateway是prometheus的一个组件,prometheus server默认是通过exporter主动获取数据(默认采取pull拉取数据),pushgateway则是通过被动方式推送数据到prometheus server,用户可以写一些自定义的监控脚本把需要监控的数据发送给pushgateway, 然后pushgateway再把数据发送给Prometheus server
    • 总结就是pushgateway是普罗米修斯的一个组件,是通过被动的方式将数据上传至普罗米修斯。这个可以解决不在一个网段的问题。
  • Alertmanager主要用于处理Prometheus服务器端发送的alerts信息,对其去除重数据、分组并路由到正确的接收方式,发出告警,支持丰富的告警方式。
  • Service Discovery:动态发现待监控的target,从而完成监控配置的重要组件,在容器环境中尤为重要,该组件目前由Prometheus Server内建支持。

Prometheus适用于什么场景

Prometheus适用于记录文本格式的时间序列,它既适用于以机器为中心的监控,也适用于高度动态的面向服务的监控,在微服务的世界中,它对多维数据收集和查询的支持有特殊优势。Prometheus是专为提高系统可靠性而设计的,它可以在断电期间快速诊断问题,每个Prometheus Server都是相互独立
的,不依赖于网络存储或者其他远程服务。当基础架构出现问题时,你可以通过Prometheus快速定位故障点,而且不会消耗大量的基础架构资源。

Prometheus不适合什么场景

Prometheus非常重视可靠性,即使在出现故障的情况下,你也可以随时统计有关系统的可用系统信息。如果你需要百分之百的准确度,例如按请求数量计费,那么Prometheus可能不太适合你,因为它收集的数据可能不够详细完整精确。

相关概念

数据模型

Prometheus所有采集的监控数据均以指标的形式保存在内置的时间序列数据库当中(TSDB):属于同一指标名称、同一标签集合的、有时间戳标记的数据流。除了存储的时间序列,Prometheus还可以根据查询请求产生临时的、衍生的时间序列作为返回结果。

指标名称和标签

每一条时间序列由指标名称(Metric Name)以及一组标签(键值对)唯一标识。其中指标的名称(Metric Name)可以反映被监控样本的含义(例如,http_request_total可以看出来表示当前系统接收到的http请求总量),指标名称只能由ASCII字符、数字、下划线以及冒号组成,同时必须匹配正则表达
式 [a-zA-Z_:][a-zA-Z0-9_:]* 。

注意
冒号用来表示用户自定义的记录规则,不能在 exporter 中或监控对象直接暴露的指标中使用冒号来定义指标名称。
通过使用标签,Prometheus开启了强大的多维数据模型:对于相同的指标名称,通过不同标签列表的集合,会形成特定的度量维度实例(例如,所有包含度量名称为 /api/tracks 的 http 请求,打上method=POST 的标签,就会形成具体的 http 请求)。查询语言在这些指标和标签列表的基础上进行过滤和聚合,改变任何度量指标上的任何标签值(包括添加或删除指标),都会创建新的时间序列。
标签的名称只能由ASCII字符、数字、以及下划线组成并满足正则表达式 [a-zA-Z_][a-zA-Z0-9_]* 。其中以 __ 作为前缀的标签,是系统保留的关键字,只能在系统内部使用。标签的值则可以包含任何Unicode 编码的字符。

样本

在时间序列中的每一个点称为样本,样本由以下三部分组成:

  • 指标(metric):指标名称和描述当前样本特征的labelset;
  • 时间戳:一个精确到时间毫秒的时间戳
  • 样本值:一个浮点型数据表示当前样本的值

指标类型

Prometheus的客户端库中提供了四种核心的指标类型。但这些类型只是在客户端库(客户端可以根据不同的数据类型调用不同的api接口)和在线协议中,实际在Prometheus Server中并不对指标类型进行区分,而是简单地把这些指标统一视为无类型的时间序列。

Counter计数器

Counter类型代表一种样本数据单调递增的指标,即只增不减,除非监控系统发生了重置。例如,你可以使用counter类型的指标表示服务请求总数、已经完成的任务数、错误发生的次数等。
counter类型数据可以让用户方便的了解事件发生的速率的变化,在PromQL内置的相关操作函数可以提供相应的分析,比如HTTP应用请求量来进行说明:

//通过rate()函数获取HTTP请求量的增长率
rate(http_requests_total[5m])
//查询当前系统中,访问量前10的HTTP地址
topk(10, http_requests_total)

Gauge仪表盘

Gauge类型代表一种样本数据可以任意变化的指标,即可增可减。Gauge通常用于像温度或者内存使用率这种指标数据,也可以表示能随时请求增加会减少的总数,例如当前并发请求的数量。
对于Gauge类型的监控指标,通过PromQL内置的函数delta()可以获取样本在一段时间内的变化情况,例如,计算cpu温度在两小时内的差异:

delta(cpu_temp_celsius{host="zeus"}[2h])

Histogram直方图

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

为了区分是平均的慢还是长尾的慢,最简单的方式就是按照请求延迟的范围进行分组。例如,统计延迟在0-10ms之间的请求数有多少而10-20ms之间的请求数又有多少。通过这种方式可以快速分析系统慢的原因。Histogram和Summary都是为了能够解决这样问题的存在,通过Histogram和Summary类型的监控指标我们可以快速了解监控样本的分布情况。
在这里插入图片描述Histogram在一段时间范围内对数据进行采样(通常是请求持续时间或响应大小等),并将其计入可配置的存储桶(bucket)中,后续可通过指定区间筛选样本,也可以统计样本总数,最后一般将数据展示为直方图。
Histogram类型的样本会提供三种指标(假设指标名称为):

  • 样本的值分布在 bucket 中的数量,命名为 _bucket{le=“<上边界>”} 。解释的更通俗易懂一点,这个值表示指标值小于等于上边界的所有样本数量。
  • 所有样本值的大小总和,命名为 _sum 。
  • 样本总数,命名为 _count 。值和 _bucket{le=“+Inf”} 相同。

bucket 可以理解为是对数据指标值域的一个划分,划分的依据应该基于数据值的分布。注意后面的采样点是包含前面的采样点的,假设 xxx_bucket{…,le=“0.01”} 的值为 10,而xxx_bucket{…,le=“0.05”} 的值为 30,那么意味着这 30 个采样点中,有 10 个是小于 10 ms 的,其余 20 个采样点的响应时间是介于 10 ms 和 50 ms 之间的。

Summary摘要

Summary即概率图,类似于Histogram,常用于跟踪与时间相关的数据。典型的应用包括请求持续时间、响应大小等。Summary同样提供样本的count和sum功能;还提供quantiles功能,可以按百分比划分跟踪结果,例如,quantile取值0.95,表示取样本里的95%数据。Histogram需要通过bucket计算quantile,而Summary直接存储了quantile的值。

Jobs和Instances

在Prometheus中,任何被采集的目标,即每一个暴露监控样本数据的HTTP服务都称为一个实例instance,通常对应于单个进程。而具有相同采集目的实例集合称为作业job。

Prometheus快速开始

使用二进制文件部署

  • 打开下载网址https://prometheus.io/download/,下载自己想要的版本
需要翻墙,也可以下载安装包上传到xshell中
[root@server1 ~]# wget
https://github.com/prometheus/prometheus/releases/download/v2.25.0/prometheus
-2.25.0.linux-amd64.tar.gz
  • 获取软件包的哈希值,与官网提供的软件包的哈希值进行对比,保证下载的Prometheus软件包的完整性
[root@server1 ~]# sha256sum prometheus-2.25.0.linux-amd64.tar.gz
d163e41c56197425405e836222721ace8def3f120689fe352725fe5e3ba1a69d prometheus-
2.25.0.linux-amd64.tar.gz
  • 解压缩二进制软件包到指定的安装目录,运行Prometheus
[root@server1 ~]# mkdir /data
[root@server1 ~]# tar -zxvf prometheus-2.25.0.linux-amd64.tar.gz -C /data/
[root@server1 ~]# cd /data/
[root@server1 data]# chown -R root:root prometheus-2.25.0.linux-amd64
[root@server1 data]# ln -sv prometheus-2.25.0.linux-amd64 prometheus
"prometheus" -> "prometheus-2.25.0.linux-amd64"
  • 启动Prometheus,会输出如下信息,此时当终端关闭或者按下ctrl + c服务会自动关闭
[root@server1 data]# cd /data/prometheus
[root@server1 prometheus]# ./prometheus
level=info ts=2021-02-28T06:03:36.885Z caller=main.go:366 msg="No time or
size retention was set so using the default time retention" duration=15d
level=info ts=2021-02-28T06:03:36.885Z caller=main.go:404 msg="Starting
Prometheus" version="(version=2.25.0, branch=HEAD,
revision=a6be548dbc17780d562a39c0e4bd0bd4c00ad6e2)"
level=info ts=2021-02-28T06:03:36.885Z caller=main.go:409 build_context="
(go=go1.15.8, user=root@615f028225c9, date=20210217-14:17:24)"
level=info ts=2021-02-28T06:03:36.885Z caller=main.go:410 host_details="
(Linux 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64
server1 (none))"
level=info ts=2021-02-28T06:03:36.885Z caller=main.go:411 fd_limits="
(soft=1024, hard=4096)"
level=info ts=2021-02-28T06:03:36.885Z caller=main.go:412 vm_limits="
(soft=unlimited, hard=unlimited)"
level=info ts=2021-02-28T06:03:36.891Z caller=web.go:532 component=web
msg="Start listening for connections" address=0.0.0.0:9090
level=info ts=2021-02-28T06:03:36.895Z caller=main.go:779 msg="Starting TSDB
..."
level=info ts=2021-02-28T06:03:36.897Z caller=tls_config.go:191
component=web msg="TLS is disabled." http2=false
level=info ts=2021-02-28T06:03:36.930Z caller=head.go:668 component=tsdb
msg="Replaying on-disk memory mappable chunks if any"
level=info ts=2021-02-28T06:03:36.930Z caller=head.go:682 component=tsdb
msg="On-disk memory mappable chunks replay completed" duration=5.69µs
level=info ts=2021-02-28T06:03:36.930Z caller=head.go:688 component=tsdb
msg="Replaying WAL, this may take a while"
level=info ts=2021-02-28T06:03:36.933Z caller=head.go:740 component=tsdb
msg="WAL segment loaded" segment=0 maxSegment=0
level=info ts=2021-02-28T06:03:36.933Z caller=head.go:745 component=tsdb
msg="WAL replay completed" checkpoint_replay_duration=38.416µs
wal_replay_duration=2.357106ms total_replay_duration=2.638813ms
level=info ts=2021-02-28T06:03:36.934Z caller=main.go:799
fs_type=XFS_SUPER_MAGIC
level=info ts=2021-02-28T06:03:36.934Z caller=main.go:802 msg="TSDB started"
level=info ts=2021-02-28T06:03:36.934Z caller=main.go:928 msg="Loading
configuration file" filename=prometheus.yml

启动prometheus时,如果觉得麻烦可以下载screen
screen -ls可以检查socket文件
screen -r pro-server可以在子系统进入prometheus(按Ctrl+A+D退出)
screen -ls可以查看当前运行的子系统

  • 热加载更新配置
    在Prometheus日常维护中,一定会对配置文件prometheus.yml进行再编辑操作,通常对Prometheus服务进行重新启动操作即可完成对配置文件的加载。当然也可以通过动态的热加载来更新prometheus.yml中的配置信息
    查看进程id,向进程发送SIHHUP信号
    nginx的reload也是依赖kill的HUP信号
# kill -HUP pid

通过HTTP API发送post请求到/-/reload

# curl -X POST http://localhost:9090/-/reload
  • 检查配置文件的语法正确性
[root@server1 ~]# cd /data/prometheus
[root@server1 prometheus]# ls
console_libraries consoles data LICENSE NOTICE prometheus
prometheus.yml promtool
[root@server1 prometheus]# ./promtool check config prometheus.yml
Checking prometheus.yml
SUCCESS: 0 rule files found
  • 关闭防火墙和selinux
[root@server1 prometheus]# systemctl stop firewalld
[root@server1 prometheus]# setenforce 0
  • 浏览器可以正常访问则说明部署Prometheus server成功(端口号默认是9090)
    在这里插入图片描述

Exporter

简介
在Prometheus的核心组件中,Exporter是重要的组成部分,在实际中监控样本数据的收集都是由Exporter完成的,Prometheus服务器只需要定时从这些Exporter提供的HTTP服务获取数据即可。官方提供了多种常用的Exporter,比如用于对数据库监控的mysqld_exporter和redis_exporter等。
Exporter本质上是将收集的数据转化为对应的文本格式,并提供HTTP接口,供Prometheus定期采集数据。

Exporter类型

  • 直接采集型
    • 这类Exporter直接内置了响应的应用程序,用于向Prometheus直接提供target数据支持。这样设计的好处是,可以更好地监控各自系统内部的运行状态,同时也适合更多自定义监控指标的项目实施。
  • 间接采集型
    • 原始监控目标并不直接支持Prometheus,需要我们使用Prometheus提供的客户端库编写该监控目标的监控采集数据,用户可以将该程序独立运行,取获取指定的各类监控数据值。例如,由于Linux操作系统自身并不能直接支持Prometheus,用户无法从操作系统层面上直接提供对Prometheus的支持,因此单独提供Node Exporter,还有数据库或网站HTTP应用类等Exporter。

文本数据格式
在Prometheus的监控环境中,所有返回监控样本数据的Exporter程序,均需要遵守Prometheus规范,即基于文本的数据格式,其特点是具有更好的跨平台和可读性.

  • 可以使用浏览器,或者通过curl工具来获得采集数据.
    在这里插入图片描述

Linux主机监控

Prometheus社区很活跃,提供了非常多类型的Exporter。可以在官网中找到自己想要的Exporter并进行下载https://prometheus.io/download/

由于Linux操作系统自身并不支持Prometheus,所以Prometheus官方提供了go语言编写的Node Exporter来实现对Linux操作系统主机的监控数据采集。它提供了系统内部几乎所有的标准指标,如cpu、内存、磁盘空间、磁盘I/O、系统负载和网络带宽。另外它还提供了由内核公开的大量额外监控指标,从负载平均到主板温度等。

  • 下载二进制包,解压缩
[root@server2 ~]# wget
https://github.com/prometheus/node_exporter/releases/download/v1.1.1/node_ex
porter-1.1.1.linux-amd64.tar.gz
[root@server2 ~]# mkdir /data
[root@server2 ~]# tar -zxvf node_exporter-1.1.1.linux-amd64.tar.gz -C /data/
node_exporter-1.1.1.linux-amd64/
node_exporter-1.1.1.linux-amd64/LICENSE
node_exporter-1.1.1.linux-amd64/NOTICE
node_exporter-1.1.1.linux-amd64/node_exporter
[root@server2 ~]# cd /data/
[root@server2 data]# chown -R root:root node_exporter-1.1.1.linux-amd64
[root@server2 data]# ln -sv node_exporter-1.1.1.linux-amd64 node_exporter
"node_exporter" -> "node_exporter-1.1.1.linux-amd64"
  • 启动node_exporter
[root@server2 ~]# cd /data/node_exporter
[root@server2 node_exporter]# ls
LICENSE node_exporter NOTICE
[root@server2 node_exporter]# ./node_exporter
  • 与Prometheus server集成
    当启动node_exporter开始工作时,node_exporter和Prometheus server还没有进行关联,二者各自独立没有关联。

可以在Prometheus server中,找到主机目录,找到主配置文件,使用其中的静态配置功能static_configs来采集node_exporter提供的数据

  • 主配置文件介绍
# 配置文件解释
global:
scrape_interval:每次数据采集的时间间隔,默认为1分钟
scrape_timeout:采集请求超时时间,默认为10秒
evaluation_interval:执行rules的频率,默认为1分钟
scrape_configs:主要用于配置被采集数据节点操作,每一个采集配置主要由以下几个参数
job_name:全局唯一名称
scrape_interval:默认等于global内设置的参数,设置后可以覆盖global中的值
scrape_timeout:默认等于global内设置的参数
metrics_path:从targets获取meitric的HTTP资源路径,默认是/metrics
honor_labels:Prometheus如何处理标签之间的冲突。若设置为True,则通过保留变迁来解
决冲突;若设置为false,则通过重命名;
scheme:用于请求的协议方式,默认是http
params:数据采集访问时HTTP URL设定的参数
relabel_configs:采集数据重置标签配置
metric_relabel_configs:重置标签配置
sample_limit:对每个被已知样本数量的每次采集进行限制,如果超过限制,该数据将被视为失
败。默认值为0,表示无限制
----------------------------------------------------------------------------
--------------------------------
[root@server1 prometheus]# cat prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds.
Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is
every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global
'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# 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=<job_name>` to any timeseries
scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']

当你写文件不确定是否正确时,可以检查一些
./prometheus check config prometheus.yml
yum全程yaml

  • 在默认配置文件的基础上,重新编辑配置文件,添加job与node_exporter进行关联
[root@server1 prometheus]# vim prometheus.yml
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries
scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: [192.168.175.20:9100]

重启服务即可成功关联

在这里插入图片描述

metricts数据采集

  • cpu数据采集
    对于cpu数据采集的主要监控指标是node_cp
    可以通过PromQL(后面会介绍这种查询语言)表达式进行查询,计算每核cpu每秒的空闲时间,然后对主机上的所有cpu求平均值
  • 内存信息采集
  • 磁盘信息采集
  • 文件系统采集
  • 网络采集
    任意一个Exporter都会提供足够多的metric,我们在学习的时候也不需要关心具体有多少metric,每个metric具体意思(其实见名知义大概也可以猜到)

MySQL监控

  • 官网下载mysqld_exporter二进制包解压缩
[root@server2 ~]# wget
https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysq【下载】
ld_exporter-0.12.1.linux-amd64.tar.gz
[root@server2 ~]# tar -xzvf mysqld_exporter-0.12.1.linux-amd64.tar.gz -C【解压】
/data/
mysqld_exporter-0.12.1.linux-amd64/
mysqld_exporter-0.12.1.linux-amd64/NOTICE
mysqld_exporter-0.12.1.linux-amd64/mysqld_exporter
mysqld_exporter-0.12.1.linux-amd64/LICENSE
[root@server2 ~]# cd /data/
[root@server2 data]# chown root:root mysqld_exporter-0.12.1.linux-amd64 -R【授权】
[root@server2 data]# ln -sv mysqld_exporter-0.12.1.linux-amd64
mysqld_exporter【软链接】
"mysqld_exporter" -> "mysqld_exporter-0.12.1.linux-amd64"
[root@server2 ~]# sha256sum mysqld_exporter-0.12.1.linux-amd64.tar.gz
133b0c281e5c6f8a34076b69ade64ab6cac7298507d35b96808234c4aa26b351
mysqld_exporter-0.12.1.linux-amd64.tar.gz
  • 创建MySQL授权用户
[root@server2 ~]# yum install mariadb-server.x86_64 -y
[root@server2 ~]# systemctl start mariadb
[root@server2 ~]# mysql_secure_installation
[root@server2 ~]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
MariaDB [(none)]> create user 'mysqld_exporter'@'%' identified by '1';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant process,replication client,select on *.* to
'mysqld_exporter'@'%';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> select host,user from mysql.user;
+-----------+-----------------+
| host | user |
+-----------+-----------------+
| % | mysqld_exporter |
| 127.0.0.1 | root |
| ::1 | root |
| localhost | root |
+-----------+-----------------+
4 rows in set (0.00 sec)
  • 配置数据库认证,并启动服务,默认端口号是9104
[root@server2 mysqld_exporter]# pwd
/data/mysqld_exporter
[root@server2 mysqld_exporter]# vim .mysqld_exporter.cnf
[client]
user=mysqld_exporter
password=1
[root@server2 mysqld_exporter]# ./mysqld_exporter --config.mycnf='.mysqld_exporter.cnf'
  • Prometheus集成
# 配置文件
- job_name: 'mysqld_exporter'
scrape_interval: 10s
static_configs:
- targets: [192.168.80.152:9104]
  • 重新启动服务即可

服务发现

Prometheus服务发现能够自动化检测分类,并且能够识别新目标和变更目标。也就是说,可以自动发现并监控目标或变更目标,动态进行数据采集和处理。

基于文件的服务发现

  • 准备JSON格式的文件
[root@server1 ~]# cd /data/prometheus
[root@server1 prometheus]# mkdir targets
[root@server1 prometheus]# vim targets/dev_node.json
[
{
"targets":"192.168.175.20:9100",
"labels":{
"env": "dev_webgame"
}
}
]
-------------------------------------------------------------------
或者这里是准备yaml文件,那么下面相应的配置文件需要与yaml匹配
vim targets/dev_node.yml
- targets:
- "192.168.175.20:9100"
- "192.168.175.20:9104"
  • 修改配置文件
[root@server1 prometheus]# vim /data/prometheus/prometheus.yml
- job_name: 'node_service_discovery'
file_sd_configs:
- files:
- targets/*.yml
refresh_interval: 60m
  • 重新启动服务
    扩展:这是基于文件发现,还有基于consul基于dns的服务发现,这个自行扩展。
    在这里插入图片描述

PromQL(并不是很重要)

Prometheus提供了一种功能强大的表达式语言PromQL(Prometheus Query Language)。

Prometheus允许用户实时选择和汇聚时间序列数据,是Prometheus自己开发的数据查询语言,使用这个查询语言能够进行各种聚合、分析和计算,使管理员能够根据指标更好地了解系统性能。

时序数据库

首先Prometheus是一款时序数据库TSDB,它结合生态系统内的其他组件例如Pushgateway、Alertmanager等可构成一个完整的IT监控系统。

时序数据库的特点如下:

  • 数据写入特点——写入平稳、持续、高并发高吞吐;写多读少,在写操作上数据上能达到95%以上;无更新时写入最近生成的数据。
  • 数据查询特点——按时间范围读取一段时间的数据;对最近生成的数据读取概率高,对历史数据查询概率低;按照数据点的不同密集度实现多精度查询。
  • 数据存储特点——数据存储量比较大;具有时效性,数据通常会有一个保存周期,多精度数据存储

对时序数据库的基本要求如下:

  • 能够支持高并发、高吞吐的写入
  • 交互及的聚合查询,能够达到低查询延迟
  • 依据场景设计可以支持海量数据存储
  • 在线应用服务场景中,需要高可用架构支持
  • 针对写入和存储量的要求,应用环境底层需要分布式架构支持

时序数据

在这里插入图片描述时间序列数据:按照时间顺序记录系统、设备状态变化的数据,每个数据称为一个样本

数据采集以特定的时间周期进行,随着时间的流逝,将这些样本数据记录下来,将生成一个离散的样本数据序列

把该序列称作为向量,而将多个序列放在同一个坐标系内(以时间为横轴,以序列为纵轴,将形成一个有数据点组成的矩阵)

  • 即时向量:特定或全部的时间序列上的集合,具有相同时间戳的一组样本称之为即时向量
  • 范围向量:特定或全部的时间序列上的集合,在指定的同一时间范围内的所有样本值称之为范围向量

时间序列选择器

即时向量选择器
即时向量选择器由两部分组成

  • 指标名称:用于限定特定指标下的时间序列,即负责过滤指标,可选
  • 匹配器:或称为标签选择器,用于过滤时间序列上的标签,定义在{}中
  • 常见使用举例
    • prometheus_http_requests_total,仅给定指标名称
    • {job=“node_exporter”},仅给定匹配器
    • up{job=“node_exporter”},指标名称和匹配器的组合

匹配器用于定义标签过滤的条件,目前支持如下四种

  • =:相等匹配模式,用来指定返回的时间序列与指定的标签完全匹配
  • !=:反向匹配模式,即不等于模式
  • =~:正则表达式匹配模式
  • !~:反向正则表达式

范围向量选择器

同即时向量选择器唯一不同的地方在于,范围向量选择器需要在表达式后紧跟一个方括号[]来表达需要在时序上返回的样本所处的时间范围
时间范围:以当前时间为基准点,指向过去一个特定的时间长度,例如[5m],便是指过去5分钟之内
可用的时间单位有:ms、s、m、h、d、w、y
必须使用整数时间,例如1h30m,但不允许使用1.5h

需要注意的是,范围向量选择器返回的是一定时间范围内的数据样本,虽然不同时间序列的数据抓点时间点相同,但特们的时间戳并不会严格对齐。多个target上的数据抓取需要分散在抓取时间点的周围,他们的时间戳并不会严格对齐,目的是为了均衡Prometheus的负载

因而,Prometheus在趋势上准确,但并非绝对精准

偏移量修改器
默认情况下,即时向量选择器和范围向量选择器都以当前时间为基准,而偏移量修改器能够修改该基准
例如:

up{job=“node_exporter”}[5m]表示的是获取过去5分钟的即时样本
up{job=“node_exporter”}[5m] offset 1d表示的是获取过去1天的即时样本

PromQL聚合操作

Prometheus还提供了下列内置的聚合操作符,这些操作符作用域瞬时向量。可以将瞬时表达式返回的样本数据进行聚合,形成一个新的时间序列。

在这里插入图片描述使用聚合操作的语法如下:

<aggr-op>([parameter,] <vector expression>) [without|by (<label list>)] 1

其中只有 count_values , quantile , topk , bottomk 支持参数(parameter)。
without用于从计算结果中移除列举的标签,而保留其它标签。by则正好相反,结果向量中只保留列出的标签,其余标签则移除。通过without和by可以按照样本的问题对数据进行聚合。
例如:

sum(node_memory_Active_bytes) without (instance)

等价于

sum(http_requests_total) by (code,handler,job,method)

如果只需要计算整个应用的HTTP请求总量,可以直接使用表达式:

sum(http_requests_total)

Grafana使用

grafana是一款图形显示非常优秀的工具,支持图表模板导入,支持出Prometheus之外多种数据源(包括MySQL、zabbix、elasticsearch等等)

  • 下载安装rpm包,下载网址:https://grafana.com/grafana/download
[root@grafana ~]# wget https://dl.grafana.com/oss/release/grafana-7.5.3-
1.x86_64.rpm
[root@grafana ~]# yum install grafana-7.5.3-1.x86_64.rpm -y
  • 启动grafana
[root@grafana ~]# systemctl start grafana-server.service
[root@grafana ~]# systemctl enable grafana-server.service
Created symlink from /etc/systemd/system/multi-user.target.wants/grafanaserver.service to /usr/lib/systemd/system/grafana-server.service.
  • 检查端口号
[root@grafana ~]# ss -tanlp | grep 3000
LISTEN 0 128 :::3000 :::*
users:(("grafana-server",pid=1780,fd=12))
  • 首次登陆用户名密码为admin admin
    在这里插入图片描述修改密码为123456

  • 添加数据源

  • 添加dashboard

  • 添加成功后可以在首页下方看到自己的图

  • 人工创建图表比较繁琐,可以直接导入已经存在的模板

  • 参考网址:https://www.cnblogs.com/xuliuzai/p/11134714.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值