一、概述Pushgateway是Prometheus的一个组件,prometheusserver默认是通过Exporter主动获取数据(默认采取pull拉取数据),Pushgateway则是通过exporter主动方式推送数据到Pushgateway,再由Prometheus主动去拉取Pushgat
一、概述 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/
复制 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: 15 s # 设置抓取间隔,默认为1分钟
evaluation_interval: 15 s #估算规则的默认周期,每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' ]
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
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]
Descriptinotallow= 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)下载 下载地址:https://prometheus.io/download/#pushgateway
复制 wget https: // github.com / prometheus/ pushgateway/ releases/ download/ v1.5 .1 / pushgateway- 1.5 .1 .linux - amd64.tar .gz
2)启动服务 QQZ3Dbd">
复制 # 查看帮助
./ 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]
Descriptinotallow= 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: 30 s
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)推送数据定义
复制 / metrics/ job/< JOB_NAME> { /< LABEL_NAME>/< LABEL_VALUE> }
其中job是必须参数,label_name部分是可选的,URL中的job和label组合唯一标识pushgateway中的Group。
复制 ## 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没有关系。 上面的演示示例是官方提供:https://github.com/prometheus/pushgateway/
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
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
查看Pushgetway web
查看Prometheus web