Pushgateway是Prometheus的一个组件,prometheus server默认是通过Exporter主动获取数据(默认采取pull拉取数据),Pushgateway则是通过exporter主动方式推送数据到Pushgateway,再由Prometheus主动去拉取 Pushgateway数据,用户可以写一些自定义的监控脚本把需要监控的数据发送给Pushgateway。从prometheus server角度看,都是由prometheus server主动去拉取各个数据源(例:Exporter和Pushgateway)的数据。
1、Pushgateway优点:
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整体介绍,可以参考我这篇文章:Prometheus原理详解
Pushgateway提供exporter功能,在promethus server拉取数据时,将自己保存的数据反馈给promethus server端。Prometheus基于Golang编写,编译后的软件包,不依赖于任何的第三方依赖。用户只需要下载对应平台的二进制包,解压并且添加基本的配置即可正常启Prometheus Server。
下载地址:https://prometheus.io/download/
wget https://github.com/prometheus/prometheus/releases/download/v2.40.6/prometheus-2.40.6.linux-amd64.tar.gztar -xf prometheus-2.40.6.linux-amd64.tar.gz
解压后当前目录会包含默认的Prometheus配置文件promethes.yml,下面配置文件做下简略的解析:
# 全局配置
global:scrape_interval: 15s # 设置抓取间隔,默认为1分钟evaluation_interval: 15s #估算规则的默认周期,每15秒计算一次规则。默认1分钟# scrape_timeout #默认抓取超时,默认为10s# Alertmanager相关配置
alerting:alertmanagers:- static_configs:- targets:# - alertmanager:9093# 规则文件列表,使用'evaluation_interval' 参数去抓取
rule_files:# - "first_rules.yml"# - "second_rules.yml"# 抓取配置列表
scrape_configs:- job_name: 'prometheus'static_configs:- targets: ['localhost:9090']
# 查看帮助
./prometheus -h# 直接启动服务,但是不提倡这种,因为退出控制台服务也就退出了,虽然可以加nohup启动,但是也不是特别友好,下面将配置prometheus.server启动
# 默认端口是:9090,如需要修改默认端口,可以使用--web.listen-address=:9099,还可以指定配置文件--config.file=prometheus.yml
./prometheus
配置prometheus.service 启动脚本
cat >/usr/lib/systemd/system/prometheus.service<
启动服务
# 执行 systemctl daemon-reload 命令重新加载systemd
systemctl daemon-reload
# 启动
systemctl start prometheus
# 检查
systemctl status prometheus
netstat -tnlp|grep :9090
ps -ef|grep prometheus

web访问:http://ip:9090

下载地址:https://prometheus.io/download/#pushgateway
wget https://github.com/prometheus/pushgateway/releases/download/v1.5.1/pushgateway-1.5.1.linux-amd64.tar.gz
# 查看帮助
./pushgateway -h# 启动服务,这里也不使用直接启动的方式,配置pushgateway.service启动
./pushgateway
默认监听的是9091端口。可以通过以下配置进行更改:
usage: pushgateway []
Flags:--web.listen-address=":9091" 监听Web界面,API和遥测的地址。--web.telemetry-path="/metrics" 公开metrics的路径。--web.external-url= 可从外部访问Pushgateway的URL.--web.route-prefix="" Web端点内部路由的前缀。 默认为--web.external-url的路径.--persistence.file="" 归档以保留metrics。 如果为空,则metrics仅保留在内存中.--persistence.interval=5m 写入持久性文件的最小间隔。--log.level="info" 仅记录具有给定严重性或更高严重性的消息。 有效级别:[debug, info, warn, error, fatal]--log.format="logger:stderr" 设置日志目标和格式。 示例:“ logger:syslog?appname = bob&local = 7”或“ logger:stdout?json = true”--version 显示应用程序版本。
配置pushgateway.service 启动脚本
cat >/usr/lib/systemd/system/pushgateway.service<
启动服务
# 执行 systemctl daemon-reload 命令重新加载systemd
systemctl daemon-reload
# 启动
systemctl start pushgateway
# 检查
systemctl status pushgateway
netstat -tnlp|grep :9091
ps -ef|grep pushgateway

web访问:ip:9091/metrics

更改prometheus配置文件,增加如下内容:
- job_name: 'pushgateway_name' scrape_interval: 30s honor_labels: true #加上此配置,exporter节点上传数据中的一些标签将不会被pushgateway节点的相同标签覆盖 static_configs: - targets: ["192.168.182.110:9091"] labels: instance: pushgateway_instance
# pushgateway 中的数据我们通常按照 job 和 instance 分组分类,所以这两个参数不可缺少。
重启Prometheus服务,或进行热加载
# curl -X POST http://192.168.182.110:9090/-/reload
systemctl restatus prometheus
再查看prometheus web界面:http://ip:9090/targets

1、推送路径的URL部分定义为
/metrics/job/{//}
其中job是必须参数,label_name部分是可选的,URL中的job和label组合唯一标识pushgateway中的Group。
2、在推送的数据部分,格式定义如下:
## TYPE metric_name type
metric_name{lable_name="label_value",...} value
推送一个group定义为{job=“some_job”}的数据
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”}的数据
# --data-binary 表示发送二进制数据,注意:它是使用POST方式发送的!
cat <
删除group定义为{job=“some_job”}下的所有数据
curl -X DELETE http://192.168.182.110:9091/metrics/job/some_job/instance/some_instance
删除所有group下的所有metrics(启动pushgateway时需加上命令行参数--web.enable-admin-api)
curl -X PUT http://192.168.182.110:9091/api/v1/admin/wipe
说明:
上面的演示示例是官方提供:https://github.com/prometheus/pushgateway/
模板
cat <
编写采集脚本推送数据到Pushgateway
cat >disk_usage_metris.sh<1{print $NF "=" int($(NF-1))}'`
dodisk_name=`echo $line|awk -F'=' '{print $1}'`disk_usage=`echo $line|awk -F'=' '{print $2}'`metrics="$metrics\ndisk_usage{instance=\"$hostname\",job=\"disk\",disk_name=\"$disk_name\"} $disk_usage"
doneecho -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
EOF
查看Pushgetway web

查看Prometheus web

Prometheus Pushgetway讲解与实战操作就先到这里了,有疑问的小伙伴欢迎给我留言,后续会持续更新【云原生+大数据】相关的文章,请耐心等待~