prometheus理论+实践(1)

目录

prometheus数据模型

样本

prometheus数据类型

prometheus的job和实例

prometheus的配置文件  

默认配置文件参数:

global片段主要参数

scrape_config片段主要参数

static_configs的样例

 file_sd_configs的样例

consul的样例

Prometheus relabel配置

什么是relabel_config

relabel的action类型

action测试

replace实例1

replace实例2

keep实例

​编辑 drop实例

labelkeep实例

 labeldrop实例

给target添加标签


prometheus数据模型

Prometheus 是将所有数据存为时序数据。

Prometheus 采集的监控数据都是以指标(metric)的形式存储在内置的 TSDB 数据库中,这些数据都是时间序列:一个带时间戳的数据,这些数据具有一个标识符和一组样本值。除了存储的时间序列,Prometheus 还可以根据查询请求产生临时的、衍生的时间序列作为返回结果。

Prometheus 会将所有采集到的样本数据以时间序列的形式保存在内存数据库中,并定时刷新到硬盘上,时间序列是按照时间戳和值的序列方式存放的,我们可以称之为向量(vector),每一条时间序列都由一个指标名称和一组标签(键值对)来唯一标识。

样本

时间序列中的每一个点就称为一个样本(sample),样本由以下 3 个部分组成:

  • 指标:指标名称和描述当前样本特征的标签集
  • 时间戳:精确到毫秒的时间戳数
  • 样本值:一个 64 位浮点数

prometheus数据类型

Counter(计数器类型)

Counter类型的指标的工作方式和计数器一样,只增不减(除非系统发生了重置)。Counter一般用于累计值,例如记录请求次数、任务完成数、错误发生次数。

Gauge(仪表盘类型)

Gauge是可增可减的指标类,可以用于反应当前应用的状态。比如在监控主机时,主机当前的内容大小(node_memory_MemFree),可用内存大小(node_memory_MemAvailable)。或者时容器当前的cpu使用率,内存使用率。

Gauge指标对象主要包含两个方法inc()以及dec(),用户添加或者减少计数。

Histogram(直方图类型)
Histogram 由 < basename>_bucket{le="< upper inclusive bound>"},< basename>_bucket{le="+Inf"}, < basename>_sum,_count 组成,主要用于表示一段时间范围内对数据进行采样(通常是请求持续时间或响应大小),并能够对其指定区间以及总数进行统计,通常它采集的数据展示为直方图。

Summary(摘要类型)

Summary类型和Histogram类型相似,由< basename>{quantile="< φ>"},< basename>_sum,< basename>_count组成,主要用于表示一段时间内数据采样结果(通常时请求持续时间或响应大小),它直接存储了quantile数据,而不是根据统计区间计算出来的。

prometheus的job和实例

在prometheus中, 可以抓取的端点成为实例,通常情况下具有相同目的的实例的集合成为job。

例如:

- job_name: "node"
 
    static_configs:
 
    - targets:
 
      - "192.168.100.1:20001"
 
      - "192.168.100.2:20001"
 
      - "192.168.100.3:20001"

上面的实例中,"192.168.100.1:20001"就是一个抓取端点,也就是一个实例, 三个实例在一个job(node)下面。

prometheus的配置文件  

在prometheus监控系统,prometheus的职责是采集,查询和存储和推送报警到alertmanager。

# 此片段指定的是prometheus的全局配置, 比如采集间隔,抓取超时时间等.
global:
  # 抓取间隔
  [ scrape_interval: <duration> | default = 1m ]

  # 抓取超时时间
  [ scrape_timeout: <duration> | default = 10s ]

  # 评估规则间隔
  [ evaluation_interval: <duration> | default = 1m ]

  # 外部一些标签设置
  external_labels:
    [ <labelname>: <labelvalue> ... ]

  # File to which PromQL queries are logged.
  # Reloading the configuration will reopen the file.
  [ query_log_file: <string> ]

# 此片段指定报警规则文件, prometheus根据这些规则信息,会推送报警信息到alertmanager中。
rule_files:
  [ - <filepath_glob> ... ]

# 此片段指定抓取配置,prometheus的数据采集通过此片段配置。
scrape_configs:
  [ - <scrape_config> ... ]

# 此片段指定报警配置, 这里主要是指定prometheus将报警规则推送到指定的alertmanager实例地址。
alerting:
  alert_relabel_configs:
    [ - <relabel_config> ... ]
  alertmanagers:
    [ - <alertmanager_config> ... ]

# 指定后端的存储的写入api地址。
remote_write:
  [ - <remote_write> ... ]

# 指定后端的存储的读取api地址。
remote_read:
  [ - <remote_read> ... ]

默认配置文件参数:

  • global: 此片段指定的是prometheus的全局配置, 比如采集间隔,抓取超时时间等。
  • rule_files: 此片段指定报警规则文件, prometheus根据这些规则信息,会推送报警信息到alertmanager中。
  • scrape_configs: 此片段指定抓取配置,prometheus的数据采集通过此片段配置。
  • alerting: 此片段指定报警配置, 这里主要是指定prometheus将报警规则推送到指定的alertmanager实例地址。
  • remote_write: 指定后端的存储的写入api地址。
  • remote_read: 指定后端的存储的读取api地址。

global片段主要参数

scrape_interval----------配置抓取间隔

scrape_timeout----------抓取超时时间

evaluation_interval-----评估隔离间隔

external_labels----------外部一些标签设置

scrape_config片段主要参数

一个scrape_config 片段指定一组目标和参数, 目标就是实例,指定采集的端点, 参数描述如何采集这些实例。

  • scrape_interval: 抓取间隔,默认继承global值。
  • scrape_timeout: 抓取超时时间,默认继承global值。
  • metric_path: 抓取路径, 默认是/metrics
  • scheme: 指定采集使用的协议,http或者https。
  • params: 指定url参数。
  • basic_auth: 指定认证信息。
  • file_sd_configs: 指定服务发现配置
  • static_configs: 静态指定服务job。
  • relabel_config: relabel设置。

static_configs的样例

#编写配置文件
vim /usr/local/prometheus/prometheus.yml

#末尾添加,job_name名称随便起
  - job_name: "node"
    static_configs:
    - targets:
      - "192.168.100.5:20001"
      - "192.168.100.6:20001"

#重启prometheus
systemctl restart prometheus

 file_sd_configs的样例

#编写配置文件
vim /usr/local/prometheus/prometheus.yml

#把static_configs的样例部分改成

  - job_name: "lyh"
    file_sd_configs:
    - refresh_interval: 1m
      files:
      - "/usr/local/prometheus/node-dis.yml"



#编写目标文件
vim /usr/local/prometheus/node-dis.yml

#添加
- targets:
  - "192.168.100.5:20001"
  labels:
    hostname: node01

- targets:
  - "192.168.100.6:20001"
  labels:
    hostname: node02

#更改属主和属组
chown -R prometheus:prometheus /usr/local/prometheus/

#重启prometheus
systemctl restart prometheus

通过file_fd_files 配置后我们可以在不重启prometheus的前提下, 修改对应的采集文件(node_dis.yml), 在特定的时间内(refresh_interval),prometheus会完成配置信息的载入工作。

consul的样例

由于consul的配置需要有consul的服务提供,需要下载consul包下载地址

将下载的.zip结尾的包上传到服务器解压

unzip consul_1.15.1_linux_amd64.zip

将consul 复制到系统bin目录

cp consul /usr/local/bin/

测试

consul agent -dev

启动后复制一个窗口

consul members

#创建目录
mkdir /etc/consul.d

#编写配置文件
vim /etc/consul.d/prometheus-node.json 

#添加
{
   "addresses": {
                  "http": "0.0.0.0",
                  "https": "0.0.0.0"
 },
   "services": [{
                  "name": "prometheus-node",
                  "tags": ["prometheus","node"],
                  "port": 20001
                }]
}

#结束consul agent -dev进程,输入以下指定配置文件运行
consul  agent -dev -config-dir=/etc/consul.d

浏览器访问  IP:8500

上面我们可以看到有2个service , 其中prometheus-node是我们定义的service。 

和prometheus集成样例:

#结合需要在prometheus-server安装node_exporter,如已安装忽律此步骤
#安装node_exporter-1.5.0.linux-amd64.tar.gz
tar zxvf node_exporter-1.5.0.linux-amd64.tar.gz 

#移动
mv node_exporter-1.5.0.linux-amd64/ /usr/local/exporter/

#创建软连接
ln -sv /usr/local/exporter/node_exporter /usr/local/sbin/

#编写启动脚本
vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target

[Service]
User=prometheus
Group=prometheus
ExecStart=/usr/local/exporter/node_exporter --web.listen-address=:20001 --collector.systemd --collector.systemd.unit-whitelist=(sshd|nginx).service --collector.processes --collector.tcpstat
[Install]
WantedBy=multi-user.target

#更改属主属组
chown -R prometheus:prometheus /usr/local/exporter/

#启动
systemctl start node_exporter.service
#编写配置文件
vim /usr/local/prometheus/prometheus.yml

#修改lyh

  - job_name: "node"
    consul_sd_configs:
    - server: localhost:8500
      services:
      - prometheus-node

#重启prometheus
systemctl restart prometheus

 我们通过api接口给该service添加一个节点, 看看是否可以同步过来。

#编写文件
vim /usr/local/prometheus/node01.json 

#写入
{
        "id":"C8754D56-6374-ECF7-190E-B9626574C865",
        "Node": "node01",
        "Address": "192.168.100.5",
        "Service":
                {
                        "Port": 20001,
                        "ID": "prometheus-node",
                        "Service": "prometheus-node"
                }
}

#编写第二个
vim /usr/local/prometheus/node02.json 

#写入
{
        "id":"DFA44D56-C074-BE01-6160-E05D5A5F1A1B",
        "Node": "node02",
        "Address": "192.168.100.6",
        "Service":
                {
                        "Port": 20001,
                        "ID": "prometheus-node",
                        "Service": "prometheus-node"
                }
}

cat /sys/class/dmi/id/product_uuid

#全都配置好以后输入
 curl -XPUT -d@node01.json  127.0.0.1:8500/v1/catalog/register
 curl -XPUT -d@node02.json  127.0.0.1:8500/v1/catalog/register

 浏览器访问 IP:9200

 可以发现通过向consul中特定服务加入节点, 就可以在prometheus动态变动采集的实例地址。

Prometheus relabel配置

什么是relabel_config

Relabel可以在Prometheus采集数据之前,通过Target实例的Metadata信息,动态重新写入Label的值。除此之外,我们还能根据Target实例的Metadata信息选择是否采集或者忽略该Target实例。

重新标记是一个功能强大的工具,可以在目标的标签集被抓取之前重写它,每个采集配置可以配置多个重写标签设置,并按照配置的顺序来应用于每个目标的标签集。目标重新标签之后,以__开头的标签将从标签集中删除的。如果使用只需要临时的存储临时标签值的,可以使用_tmp作为前缀标识。

relabel的action类型

  • replace: 对标签和标签值进行替换。
  • keep: 采集满足条件的实例
  • drop: 采集不满足条件的实例
  • labeldrop: 采集没有此标签的实例
  • labelkeep:  不采集没有此标签的实例 。

action测试

在配置前同步以下信息

#编写配置文件
vim /usr/local/prometheus/conf/node-dis.yml 

#添加
- targets:
  - "192.168.100.5:20001"
  labels: 
    __hostname__: node01
    __businees_line__: "line_a"
    __region_id__: "cn-beijing"
    __availability_zone__: "a"

- targets: 
  - "192.168.100.6:20001"
  labels: 
    __hostname__: node02
    __businees_line__: "line_a"
    __region_id__: "cn-beijing"
    __availability_zone__: "a"



#更改属主属组
chown -R prometheus:prometheus /usr/local/prometheus/conf/

#重启
systemctl restart prometheus

因为我们的label都是以__开头的,目标relabel之后,以__开头的标签将从标签集中删除的。

replace实例1

#将labels中的__hostname__替换为node_name。
#修改配置文件

    relabel_configs:
    - source_labels:
      - "__hostname__"             #匹配原标签
      regex: "(.*)"                #匹配源标签里的值
      target_label: "nodename"     #替换内容
      action: replace              #类型
      replacement: "$1"            #此处的$1是引用小括号中的内容,也就是标签值

#重启prometheus
systemctl restart prometheus

说下上面的配置: source_labels指定我们我们需要处理的源标签, target_labels指定了我们要replace后的标签名字, action指定relabel动作,这里使用replace替换动作。 regex去匹配源标签(__hostname__)的值,"(.*)"代表__hostname__这个标签是什么值都匹配的,然后replacement指定的替换后的标签(target_label)对应的数值。采用正则引用方式获取的。

replace实例2

我们的基础信息里面有__region_id__和__availability_zone__,但是我想融合2个字段在一起,可以通过replace来实现。

#修改配置文件
vim /usr/local/prometheus/prometheus.yml

#把实例1的部分删除,添加
    relabel_configs:
    - source_labels:
      - "__region_id__"                #源标签
      - "__availability_zone__"        #源标签
      separator: "-"                   #多个标签的连接符
      regex: "(.*)"                    #匹配源文件里的值
      target_label: "region_zone"      #整合后的标签名
      action: replace                  #类型
      replacement: "$1"                #引用小括号中的内容


#重启prometheus
systemctl restart prometheus

keep实例

#先把replace的配置删除

修改完后重启,查看浏览器
systemctl restart prometheus

#修改配置文件
vim /usr/local/prometheus/prometheus.yml

#在file路径下面添加
    relabel_configs:
    - source_labels:
      - "__hostname__"            #原标签
      regex: "node01"             #匹配原标签的值
      action: keep                #类型

#重启prometheus
systemctl restart prometheus

 drop实例

 配置文件和keep一样,只需要把类型改为drop,然后重启服务,在浏览器查看

keep: 采集满足条件的实例

drop: 采集不满足条件的实例

labelkeep实例

#修改配置文件
vim /usr/local/prometheus/prometheus.yml 

#修改
relabel_configs:
    - regex: name
      action: labelkeep

#重启prometheus
systemctl restart prometheus

 labeldrop实例

把labelkeep的类型改为labeldrop后,重启服务即可

labeldrop: 采集没有此标签的实例

labelkeep:  不采集没有此标签的实例 。

给target添加标签

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值