下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

「云原生」Prometheus Pushgetway讲解与实战操作

作者:匿名     来源: 云计算点击数:553发布时间: 2022-12-13 10:48:40

标签: 云原生组件数据

  Pushgateway是Prometheus的一个组件,prometheus server默认是通过Exporter主动获取数据(默认采取pull拉取数据),Pushgateway则是通过exporter主动方式推送数据到Pushgateway,再由Prometheus主动去拉取 Pushgateway数据,用户可以写一些自定义的监控脚本把需要监控的数据发送给Pushgateway。

  一、概述

  Pushgateway是Prometheus的一个组件,prometheus server默认是通过Exporter主动获取数据(默认采取pull拉取数据),Pushgateway则是通过exporter主动方式推送数据到Pushgateway,再由Prometheus主动去拉取 Pushgateway数据,用户可以写一些自定义的监控脚本把需要监控的数据发送给Pushgateway。从prometheus server角度看,都是由prometheus server主动去拉取各个数据源(例:Exporter和Pushgateway)的数据。

  1、Pushgateway优点:

  Prometheus 默认采用定时pull 模式拉取targets数据,但是如果不在一个子网或者防火墙,prometheus就拉取不到targets数据,所以可以采用各个target往pushgateway上push数据,然后prometheus去pushgateway上定时pull数据。

  在监控业务数据的时候,需要将不同数据汇总, 汇总之后的数据可以由pushgateway统一收集,然后由 Prometheus 统一拉取,起到给Prometheus 减压的作用。

  自定义采集指标简单。

  2、Pushgateway缺点:

  Prometheus拉取状态只针对 pushgateway, 不能对每个节点都有效。

  Pushgateway出现问题,整个采集到的数据都会出现问题。

  Pushgateway 可以持久化推送给它的所有监控数据。因此,即使你的监控已经下线,prometheus 还会拉取到旧的监控数据,需要手动清理 pushgateway 不要的数据。

  官方文档:https://prometheus.io/docs/prometheus/

  Prometheus GitHub地址:https://github.com/prometheus/prometheus/

  Pushgetway GitHub地址:https://github.com/prometheus/pushgateway/

  关于Prometheus整体介绍

  二、Pushgateway 架构

  Pushgateway就是个数据中转站。提供API,支持数据生产者随时将数据推送过来。

  Pushgateway提供exporter功能,在promethus server拉取数据时,将自己保存的数据反馈给promethus server端。

  三、Prometheus server 安装

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

  1)下载

  下载地址:https://prometheus.io/download/

  复制

  1. wget https://github.com/prometheus/prometheus/releases/download/v2.40.6/prometheus-2.40.6.linux-amd64.tar.gz

      2.

  3.  tar -xf prometheus-2.40.6.linux-amd64.tar.gz1.2.3.

  2)配置

  解压后当前目录会包含默认的Prometheus配置文件promethes.yml,下面配置文件做下简略的解析:

  复制

  1.  # 全局配置

  2.  global:

  3.  scrape_interval: 15s # 设置抓取间隔,默认为1分钟

  4.  evaluation_interval: 15s #估算规则的默认周期,每15秒计算一次规则。默认1分钟

  5.  # scrape_timeout #默认抓取超时,默认为10s

      6.

  7.  # Alertmanager相关配置

  8.  alerting:

  9.  alertmanagers:

  10.  - static_configs:

  11.  - targets:

  12.  # - alertmanager:9093

      13.

  14.  # 规则文件列表,使用'evaluation_interval' 参数去抓取

  15.  rule_files:

  16.  # - "first_rules.yml"

  17.  # - "second_rules.yml"

      18.

  19.  # 抓取配置列表

  20.  scrape_configs:

  21.  - job_name: 'prometheus'

  22.  static_configs:

  23.  - targets: ['localhost:9090']

  3)启动服务

  复制

  1.  # 查看帮助

  2.  ./prometheus -h

      3.

  4.  # 直接启动服务,但是不提倡这种,因为退出控制台服务也就退出了,虽然可以加nohup启动,但是也不是特别友好,下面将配置prometheus.server启动

  5.  # 默认端口是:9090,如需要修改默认端口,可以使用--web.listen-address=:9099,还可以指定配置文件--config.file=prometheus.yml

  6.  ./prometheus

  配置prometheus.service 启动脚本

  复制

  1.  cat >/usr/lib/systemd/system/prometheus.service<<eof< p="">

  2.  [Unit]

  3.  Descriptinotallow=Prometheus

  4.  After=network.target

  5.  [Service]

  6.  Type=simple

  7.  ExecStart=/opt/prometheus/prometheus_server/prometheus-2.40.6.linux-amd64/prometheus --config.file=/opt/prometheus/prometheus_server/prometheus-2.40.6.linux-amd64/prometheus.yml

  8.  Restart=on-failure

  9.  [Install]

  10.  WantedBy=multi-user.target

  11.  EOF

  启动服务

  复制

  1.  # 执行 systemctl daemon-reload 命令重新加载systemd

  2.  systemctl daemon-reload

  3.  # 启动

  4.  systemctl start prometheus

  5.  # 检查

  6.  systemctl status prometheus

  7.  netstat -tnlp|grep :9090

  8.  ps -ef|grep prometheus

  web访问:http://ip:9090

  四、Pushgateway 安装

  1)下载

  下载地址:https://prometheus.io/download/#pushgateway

  复制

  wget https://github.com/prometheus/pushgateway/releases/download/v1.5.1/pushgateway-1.5.1.linux-amd64.tar.gz1.

  2)启动服务

  复制

  1.  # 查看帮助

  2.  ./pushgateway -h

      3.

  4.  # 启动服务,这里也不使用直接启动的方式,配置pushgateway.service启动

  5.  ./pushgateway

  默认监听的是9091端口。可以通过以下配置进行更改:

  复制

  1.  usage: pushgateway []

  2.  Flags:

  3.  --web.listen-address=":9091" 监听Web界面,API和遥测的地址。

  4.  --web.telemetry-path="/metrics" 公开metrics的路径。

  5.  --web.external-url= 可从外部访问Pushgateway的URL.

  6.  --web.route-prefix="" Web端点内部路由的前缀。 默认为--web.external-url的路径.

  7.  --persistence.file="" 归档以保留metrics。 如果为空,则metrics仅保留在内存中.

  8.  --persistence.interval=5m 写入持久性文件的最小间隔。

  9.  --log.level="info" 仅记录具有给定严重性或更高严重性的消息。 有效级别:[debug, info, warn, error, fatal]

  10.  --log.format="logger:stderr" 设置日志目标和格式。 示例:“ logger:syslog?appname = bob&local = 7”或“ logger:stdout?json = true”

  11.  --version 显示应用程序版本。

  配置pushgateway.service 启动脚本

  复制

  1.  cat >/usr/lib/systemd/system/pushgateway.service<<eof< p="">

  2.  [Unit]

  3.  Descriptinotallow=Pushgetway

  4.  After=network.target

  5.  [Service]

  6.  Type=simple

  7.  ExecStart=/opt/prometheus/pushgateway/pushgateway-1.5.1.linux-amd64/pushgateway

  8.  Restart=on-failure

  9.  [Install]

  10.  WantedBy=multi-user.target

  11.  EOF

  启动服务

  复制

  1.  # 执行 systemctl daemon-reload 命令重新加载systemd

  2.  systemctl daemon-reload

  3.  # 启动

  4.  systemctl start pushgateway

  5.  # 检查

  6.  systemctl status pushgateway

  7.  netstat -tnlp|grep :9091

  8.  ps -ef|grep pushgateway

  web访问:ip:9091/metrics

  3)接入Prometheus

  更改prometheus配置文件,增加如下内容:

  复制

  1.  - job_name: 'pushgateway_name'

  2.  scrape_interval: 30s

  3.  honor_labels: true #加上此配置,exporter节点上传数据中的一些标签将不会被pushgateway节点的相同标签覆盖

  4.  static_configs:

  5.  - targets: ["192.168.182.110:9091"]

  6.  labels:

  7.  instance: pushgateway_instance

  8.  # pushgateway 中的数据我们通常按照 job 和 instance 分组分类,所以这两个参数不可缺少。

  重启Prometheus服务,或进行热加载

  复制

  1.  # curl -X POST http://192.168.182.110:9090/-/reload

  2.  systemctl restatus prometheus

  再查看prometheus web界面:http://ip:9090/targets

  五、实战操作演示

  1)推送数据定义

  推送路径的URL部分定义为

  复制

  1.  /metrics/job/<job_name>{/<label_name>/<label_value>}

  其中job是必须参数,label_name部分是可选的,URL中的job和label组合唯一标识pushgateway中的Group。

  在推送的数据部分,格式定义如下:

  复制

  1.  ## TYPE metric_name type

  2.  metric_name{lable_name="label_value",...} value

  1)推送数据

  推送一个group定义为{job=“some_job”}的数据

  复制

  1.  echo "some_metric 3.14" | curl --data-binary @- http://192.168.182.110:9091/metrics/job/some_job

  推送一个group定义为{job=“some_job”,instance=“some_instance”}的数据

  复制

  1.  # --data-binary 表示发送二进制数据,注意:它是使用POST方式发送的!

  2.  cat <

  3.  # TYPE some_metric counter

  4.  some_metric2{label="val1"} 42

  5.  # TYPE another_metric gauge

  6.  # HELP another_metric Just an example.

  7.  another_metric 2398.283

  8.  EOF

  2)删除数据

  删除group定义为{job=“some_job”}下的所有数据

  复制

  1.  curl -X DELETE http://192.168.182.110:9091/metrics/job/some_job/instance/some_instance

  删除所有group下的所有metrics(启动pushgateway时需加上命令行参数--web.enable-admin-api)

  复制

  1.  curl -X PUT http://192.168.182.110:9091/api/v1/admin/wipe

  说明:

  1.删除数据是以Group为单位的,Group由job name和URL中的label唯一标识。

  2.举例中删除{job=“some_job”}数据的语句并不会删除{job=“some_job”,instance=“some_instance”}的数据。因为属于不同的Group。如需要删除{job=“some_job”,instance=“some_instance”}下的数据,需要使用。

  3.这里删除数据是指删除pushgateway中的数据,跟promethues没有关系。

  上面的演示示例是官方提供:https://github.com/prometheus/pushgateway/

  3)⾃定义编写脚本的⽅法 发送pushgateway 采集

  模板

  复制

  1.  cat <

  2.  # A histogram, which has a pretty complex representation in the text format:

  3.  # HELP http_request_duration_seconds A histogram of the request duration.

  4.  # TYPE http_request_duration_seconds histogram

  5.  disk_usage{instance="local-168-182-110",job="disk",disk_name="/run/user/0"} 11

  6.  disk_usage{instance="local-168-182-110",job="disk",disk_name="/run/user/1"} 22

  7.  disk_usage{instance="local-168-182-110",job="disk",disk_name="/run/user/2"} 33

  8.  disk_usage{instance="local-168-182-110",job="disk",disk_name="/run/user/3"} 44

  9.  disk_usage{instance="local-168-182-110",job="disk",disk_name="/run/user/4"} 55

  10.  EOF

  编写采集脚本推送数据到Pushgateway

  复制

  1.  cat >disk_usage_metris.sh<<eof< p="">

  2.  #!/bin/bash

      3.

  4.  hostname=`hostname -f | cut -d '.' -f1`

      5.

  6.  metrics=""

  7.  for line in `df |awk 'NR>1{print $NF "=" int($(NF-1))}'`

  8.  do

  9.  disk_name=`echo $line|awk -F'=' '{print $1}'`

  10.  disk_usage=`echo $line|awk -F'=' '{print $2}'`

  11.  metrics="$metrics\\ndisk_usage{instance=\\"$hostname\\",job=\\"disk\\",disk_name=\\"$disk_name\\"} $disk_usage"

  12.  done

      13. 

  14.  echo -e "# A histogram, which has a pretty complex representation in the text format:\\n# HELP http_request_duration_seconds A histogram of the request duration.\\n# TYPE http_request_duration_seconds histogram\\n$metrics" | curl --data-binary @- http://192.168.182.110:9091/metrics/job/pushgateway/instance/disk_usage

  15.  EOF

  查看Pushgetway web


  查看Prometheus web

  来源: 今日头条

    >>>>>>点击进入计算专题

赞(9)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程