简单定义几条数据,并将其推送至pushgateway,方便我们验证自定义模板功能。
数据推送默认格式
们要 Push 数据到 PushGateway 中,可以通过其提供的 API 标准接口来添加,
默认 URL 地址为:http://<ip>:9091/metrics/job/<JOBNAME>{/<LABEL_NAME>/<LABEL_VALUE>}
,
- 是必填项,为 job 标签值,后边可以跟任意数量的标签对,
- 一般我们会添加一个
instance/<INSTANCE_NAME>
实例名称标签,来方便区分各个指标。
一:简单数据的推送(命令行数据)
1.1 测试
测试:
[root@localhost ~]# echo "test_metric 123456" | curl --data-binary @- http://192.168.156.134:9091/metrics/job/test_job
[root@localhost ~]#
1.2 查看测试结果
刷新Pushgateway界面,查看界面
上图中,除了 test_metric 外,同时还新增了 push_time_seconds 和 push_failure_time_seconds 两个指标,这两个是 PushGateway 系统自动生成的相关指标。
同时,在 Prometheus UI 页面上 Graph 页面可以查询的到该指标了。
test_metric 我们查询出来的结果为
test_metric{exported_job="test_job",instance="pushgateway",job="pushgateway"}
可以发现,交的指标所属 job 名称为 test_job ,显示的为 exported_job=“test_job” ,而 job 显示为 job=“pushgateway”为了避免这种情况的发送,需要在Prometheus的配置文件中增加增加 honor_labels: true 参数配置
1.3 修改配置使我们得到想要的显示(honor_labels )
进入Prometheus的安装目录,修改其配置文件如下
其实就是增加一段KV就可以了
- job_name: pushgateway
honor_labels: true
static_configs:
- targets: ['192.168.156.134:9091']
labels:
instance: pushgateway
honor_labels 的作用:
- 因为 Prometheus 配置 PushGateway 的时候,也会指定 job 和 instance,但是它只表示 PushGateway 实例本身,不能真正表达收集数据的含义。
- 所以配置 PushGateway 需要添加 honor_labels:true 参数,
避免收集数据本身的 job 和 instance 被覆盖
。
实际操作
[root@localhost prometheus-2.6.1.linux-amd64]# vim prometheus.yml
- 192.168.156.134:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
- "/opt/prometheus/prometheus-2.6.1.linux-amd64/rules/*.rules"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'agent1'
static_configs:
- targets: ['192.168.156.134:9100']
- job_name: pushgateway
honor_labels: true
static_configs:
- targets: ['192.168.156.134:9091']
labels:
instance: pushgateway
[root@localhost prometheus-2.6.1.linux-amd64]#
1.4 重启Prometheus
[root@localhost prometheus-2.6.1.linux-amd64]# pkill prometheus
[root@localhost prometheus-2.6.1.linux-amd64]# lsof -i:9090
[root@localhost prometheus-2.6.1.linux-amd64]# ./prometheus --config.file=prometheus.yml &
[root@localhost prometheus-2.6.1.linux-amd64]#
1.5 查看UI页面
2 较为复杂数据的推送(命令行数据)
2.1 执行命令
Push 一个复杂一些的,一次写入多个指标,而且每个指标添加 TYPE 及 HELP 说明。
推送命令:
cat <<EOF | curl --data-binary @- http://192.168.156.134:9091/metrics/job/test_job/instance/test_instance
# TYPE test_metrics counter
test_metrics{label="app1",name="demo"} 100.00
# TYPE another_test_metrics gauge
# HELP another_test_metrics Just an example.
another_test_metrics 123.45
EOF
指令说明:
/metrics/job/test_job 和 metrics/job/test_job/instance/test_instance ,它们都属于 test_job,但是它们属于两个指标值,因为 instance 对二者做了区分;具体的可查看数据推送的格式(本博客最上方的小节)
实际操作:
[root@localhost ~]# cat <<EOF | curl --data-binary @- http://192.168.156.134:9091/metrics/job/test_job/instance/test_instance
> # TYPE test_metrics counter
> test_metrics{label="app1",name="demo"} 100.00
> # TYPE another_test_metrics gauge
> # HELP another_test_metrics Just an example.
> another_test_metrics 123.45
> EOF
[root@localhost ~]#
2.2 查看Pushgateway界面
2.3 进入Prometheus的界面查看
3 大量数据提交(通过写入文件将文件提交)
之前的两种方法,Push 指标数据是通过命令行追加方式,少量数据还凑合,如果需要 Push 的数据比较大时,就不太方便了,这里我们也可以通过将指标数据写入到文件,然后将文件内容提交
第一步:编写指标数据文件pgdata.txt
pgdata.txt文件内容:
# TYPE http_request_total counter
# HELP http_request_total get interface request count with different code.
http_request_total{code="200",interface="/v1/save"} 276
http_request_total{code="404",interface="/v1/delete"} 0
http_request_total{code="500",interface="/v1/save"} 1
# TYPE http_request_time gauge
# HELP http_request_time get core interface http request time.
http_request_time{code="200",interface="/v1/core"} 0.122
实际操作:
[root@localhost ~]# cd data/
[root@localhost data]# ls
com.txt test.txt
[root@localhost data]# vim pgdata.txt
# TYPE http_request_total counter
# HELP http_request_total get interface request count with different code.
http_request_total{code="200",interface="/v1/save"} 276
http_request_total{code="404",interface="/v1/delete"} 0
http_request_total{code="500",interface="/v1/save"} 1
# TYPE http_request_time gauge
# HELP http_request_time get core interface http request time.
http_request_time{code="200",interface="/v1/core"} 0.122
~
~
"pgdata.txt" [新] 8L, 426C 已写入
[root@localhost data]#
第二步:将文件数据push上去
命令:
curl -XPOST --data-binary @pgdata.txt http://192.168.156.134:9091/metrics/job/app/instance/app-172.30.0.0
实际操作:
[root@localhost data]# curl -XPOST --data-binary @pgdata.txt http://192.168.156.134:9091/metrics/job/app/instance/app-172.30.0.0
[root@localhost data]#
第三步:在PushGateway UI 页面查看
4 删除某一个指标
4.1 ui界面删除
可以通过ui界面进行删除,如下:
删除后的效果:
4.2 通过命令删除
如删除 job=“test_job” 组下的所有指标值,可以执行如下命令:
curl -X DELETE http://192.168.156.134:9091/metrics/job/test_job
实际操作:
[root@localhost data]# curl -X DELETE http://192.168.156.134:9091/metrics/job/test_job
[root@localhost data]#
最后的页面效果:
4.3 删除命令的注意事项
删除 job="test_job" 组下的所有指标值,不包括 {job="test_job", instance="test_instance"} 中的指标值,虽然它们的 job 名称都为 test_job
。
如果想删除该指标值,那么需要执行如下命令:
curl -X DELETE http://192.168.156.134:9091/metrics/job/test_job/instance/test_instance
实际操作:
[root@localhost data]# curl -X DELETE http://192.168.156.134:9091/metrics/job/test_job/instance/test_instance
[root@localhost data]#
页面效果:
5 PushGateway使用的注意事项
1:指标值只能是数字类型,非数字类型报错
。
测试:
[root@localhost data]# echo "test_metric 12.34.56ff" | curl --data-binary @- http://192.168.156.134:9091/metrics/job/test_job_1
text format parsing error in line 1: expected float as value, got "12.34.56ff"
[root@localhost data]#
2:指标值支持最大长度为 16 位,超过16 位后默认置为 0
[root@localhost data]# echo "test_metric 1234567898765432123456789" | curl --data-binary @- http://192.168.156.134:9091/metrics/job/test_job_2
[root@localhost data]#
实际上:实际获取值 test_metric{job=“test_job_2”} 1234567898765432200000000
3:PushGateway 数据持久化操作: 默认 PushGateway 不做数据持久化操作,当 PushGateway 重启或者异常挂掉,导致数据的丢失
,可以通过启动时添加 -persistence.file 和 -persistence.interval 参数来持久化数据
。
-
-persistence.file
表示本地持久化的文件,将 Push 的指标数据持久化保存到指定文件
, -
-persistence.interval
表示本地持久化的指标数据保留时间,若设置为 5m,则表示 5 分钟后将删除存储的指标数据
。
docker run -d -p 9091:9091 prom/pushgateway "-persistence.file=pg_file –persistence.interval=5m"
4:PushGateway 推送及 Prometheus 拉取时间:设置 Prometheus 每次从 PushGateway 拉取的数据,并不是拉取周期内用户推送上来的所有数据,而是最后一次 Push 到 PushGateway 上的数据
,所以推荐设置推送时间小于或等于 Prometheus 拉取的时间,这样保证每次拉取的数据是最新 Push 上来的。