Pushgateway是prometheus的一个组件,prometheus server默认是通过exporter主动获取数据(默认采取pull拉取数据),pushgateway则是通过被动方式推送数据到prometheus server,用户可以写一些自定义的监控脚本把需要监控的数据发送给pushgateway, 然后pushgateway再把数据发送给Prometheus server。
IP |
主机名 |
192.168.2.139 |
master1 |
192.168.40.140 |
node1 |
在node1节点操作
1 2 |
docker pull prom/pushgateway docker run -d --name pushgateway -p 9091:9091 prom/pushgateway |
在浏览器访问192.168.2.140:9091出现如下ui界面
修改prometheus-cfg.yaml文件
1 2 3 4 5 |
- job_name: 'pushgateway' scrape_interval: 5s static_configs: - targets: ['192.168.2.140:9091'] honor_labels: true |
更新
1 2 3 |
kubectl apply -f prometheus-alertmanager-cfg.yaml kubectl delete -f prometheus-alertmanager-deploy.yaml kubectl apply -f prometheus-alertmanager-deploy.yaml |
登录prometheus http://192.168.2.139:30242/targets
1 2 |
# 向 {job="test_job"} 添加单条数据: echo " metric 3.6" | curl --data-binary @- http://192.168.2.140:9091/metrics/job/test_job |
这里需要注意的是将<key & value>推送给pushgateway,curl --data-binary是将HTTP POST请求中的数据发送给HTTP服务器(pushgateway),和用户提交THML表单时浏览器的行为是一样的,HTTP POST请求中的数据为纯二进制数据。
prometheus web中查询
1 2 3 4 5 6 7 |
# 添加复杂数据 cat <<EOF | curl --data-binary @- http://192.168.2.140:9091/metrics/job/test_job/instance/test_instance # TYPE node_memory_usage gauge node_memory_usage 26 # TYPE memory_total gauge node_memory_total 26000 EOF |
这条连接主要分为三个部分:
如下是删除某个实例
1 2 3 4 |
# 删除某个组下某个实例的所有数据 curl -X DELETE http://192.168.2.140:9091/metrics/job/test_job/instance/test_instance # 删除某个组下的所有数据: curl -X DELETE http://192.168.2.140:9091/metrics/job/test_job |
python安装 prometheus_client
使用 pip 工具可以非常方便地安装 prometheus_client:
测试脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# -*- coding: utf-8 -*- # 导入所需的库 from prometheus_client import CollectorRegistry, Gauge, push_to_gateway if __name__ == '__main__': # 定义和注册指标 registry = CollectorRegistry() labels = ['req_status', 'req_method', 'req_url'] g_one = Gauge('requests_total', 'url请求次数', labels, registry=registry) g_two = Gauge('avg_response_time_seconds', '1分钟内的URL平均响应时间', labels, registry=registry) # 收集和记录指标数据 g_one.labels('200','GET', '/test/url').set(1) #set设定值 g_two.labels('200','GET', '/test/api/url/').set(10) #set设定值 # 推送指标数据到Pushgateway push_to_gateway('http://192.168.2.140:9091', job='SampleURLMetrics', registry=registry) |
在这个示例中,我们定义了一个名为requests_total的指标,记录了一个值为1和10的示例数据,并将指标数据推送到了名为example_job的job中。