一、概述
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 不要的数据。
-
官方文档:prometheus.io/docs/promet…
-
Prometheus GitHub地址:github.com/prometheus/…
-
Pushgetway GitHub地址:github.com/prometheus/…
关于Prometheus整体介绍,能够参阅我这篇文章:Prometheus原理详解
二、Pushgateway 架构
- Pushgateway就是个数据中转站。供给API,支持数据生产者随时将数据推送过来。
-
Pushgateway
供给exporter功用,在promethus server
拉取数据时,将自己保存的数据反馈给promethus server
端。
三、Prometheus server 安装
Prometheus根据Golang编写,编译后的软件包,不依赖于任何的第三方依赖。用户只需求下载对应渠道的二进制包,解压而且添加根本的装备即可正常启Prometheus Server。
1)下载
下载地址:prometheus.io/download/
wget https://github.com/prometheus/prometheus/releases/download/v2.40.6/prometheus-2.40.6.linux-amd64.tar.gz
tar -xf prometheus-2.40.6.linux-amd64.tar.gz
2)装备
解压后当前目录会包括默许的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']
3)发动服务
# 检查协助
./prometheus -h
# 直接发动服务,可是不发起这种,由于退出控制台服务也就退出了,尽管能够加nohup发动,可是也不是特别友好,下面将装备prometheus.server发动
# 默许端口是:9090,如需求修改默许端口,能够运用--web.listen-address=:9099,还能够指定装备文件--config.file=prometheus.yml
./prometheus
装备prometheus.service
发动脚本
cat >/usr/lib/systemd/system/prometheus.service<<EOF
[Unit]
Description=Prometheus
After=network.target
[Service]
Type=simple
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
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
发动服务
# 履行 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
四、Pushgateway 安装
1)下载
下载地址:prometheus.io/download/#p…
wget https://github.com/prometheus/pushgateway/releases/download/v1.5.1/pushgateway-1.5.1.linux-amd64.tar.gz
2)发动服务
# 检查协助
./pushgateway -h
# 发动服务,这儿也不运用直接发动的方法,装备pushgateway.service发动
./pushgateway
默许监听的是9091
端口。能够经过以下装备进行更改:
usage: pushgateway [<flags>]
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<<EOF
[Unit]
Description=Pushgetway
After=network.target
[Service]
Type=simple
ExecStart=/opt/prometheus/pushgateway/pushgateway-1.5.1.linux-amd64/pushgateway
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
发动服务
# 履行 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
3)接入Prometheus
更改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)推送数据界说
1、推送途径的URL部分界说为
/metrics/job/<JOB_NAME>{/<LABEL_NAME>/<LABEL_VALUE>}
其间job是有必要参数,label_name部分是可选的,URL中的job和label组合唯一标识pushgateway中的Group。
2、在推送的数据部分,格局界说如下:
## TYPE metric_name type
metric_name{lable_name="label_value",...} value
1)推送数据
推送一个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 <<EOF | curl --data-binary @- http://192.168.182.110:9091/metrics/job/some_job/instance/some_instance
# TYPE some_metric counter
some_metric2{label="val1"} 42
# TYPE another_metric gauge
# HELP another_metric Just an example.
another_metric 2398.283
EOF
2)删去数据
删去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
说明:
- 删去数据是以Group为单位的,Group由job name和URL中的label唯一标识。
- 举例中删去{job=“some_job”}数据的语句并不会删去{job=“some_job”,instance=“some_instance”}的数据。由于属于不同的Group。如需求删去{job=“some_job”,instance=“some_instance”}下的数据,需求运用。
- 这儿删去数据是指删去pushgateway中的数据,跟promethues没有关系。
上面的演示示例是官方供给:github.com/prometheus/…
3)⾃界说编写脚本的⽅法 发送pushgateway 收集
模板
cat <<EOF | curl --data-binary @- http://192.168.182.110:9091/metrics/job/some_job/instance/some_instance
# A histogram, which has a pretty complex representation in the text format:
# HELP http_request_duration_seconds A histogram of the request duration.
# TYPE http_request_duration_seconds histogram
disk_usage{instance="local-168-182-110",job="disk",disk_name="/run/user/0"} 11
disk_usage{instance="local-168-182-110",job="disk",disk_name="/run/user/1"} 22
disk_usage{instance="local-168-182-110",job="disk",disk_name="/run/user/2"} 33
disk_usage{instance="local-168-182-110",job="disk",disk_name="/run/user/3"} 44
disk_usage{instance="local-168-182-110",job="disk",disk_name="/run/user/4"} 55
EOF
编写收集脚本推送数据到Pushgateway
cat >disk_usage_metris.sh<<EOF
#!/bin/bash
hostname=`hostname -f | cut -d '.' -f1`
metrics=""
for line in `df |awk 'NR>1{print $NF "=" int($(NF-1))}'`
do
disk_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"
done
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
EOF
检查Pushgetway web 检查Prometheus web Prometheus Pushgetway解说与实战操作就先到这儿了,有疑问的小伙伴欢迎给我留言,后续会继续更新【云原生+大数据】相关的文章,请耐心等待~