prometheus(5)之consul服务自动发现及pushgetway
pushgetway(push上传metric数据)
Pushgateway简介
Pushgateway是prometheus的一个组件,prometheus server默认是通过exporter主动获取数据(默认采取pull拉取数据),pushgateway则是通过被动方式推送数据到prometheus server,用户可以写一些自定义的监控脚本把需要监控的数据发送给pushgateway, 然后pushgateway再把数据发送给Prometheus server
Pushgateway优点:
Prometheus 默认采用定时pull 模式拉取targets数据,但是如果不在一个子网或者防火墙,prometheus就拉取不到targets数据,所以可以采用各个target往pushgateway上push数据,然后prometheus去pushgateway上定时pull数据
在监控业务数据的时候,需要将不同数据汇总, 汇总之后的数据可以由pushgateway统一收集,然后由 Prometheus 统一拉取。
pushgateway缺点:
Prometheus拉取状态只针对 pushgateway, 不能对每个节点都有效;
Pushgateway出现问题,整个采集到的数据都会出现问题
监控下线,prometheus还会拉取到旧的监控数据,需要手动清理 pushgateway不要的数据。
安装pushgateway
[root@xianchaonode1 ~]# docker load -i pushgateway.tar.gz [root@xianchaonode1 ~]# docker run -d --name pushgateway -p 9091:9091 prom/pushgateway 在浏览器访问192.168.40.181:9091出现如下ui界面 可以使用k8s编排
修改prometheus配置文件
修改prometheus-alertmanager-cfg.yaml文件,在k8s-master节点操作 添加如下job - job_name: 'pushgateway' scrape_interval: 5s static_configs: - targets: ['192.168.40.181:9091'] honor_labels: true kubectl apply -f prometheus-alertmanager-cfg.yaml kubectl delete -f prometheus-alertmanager-deploy.yaml kubectl apply -f prometheus-alertmanager-deploy.yaml
在prometheus的targets列表可以看到pushgateway
推送指定的数据格式到pushgateway
向 {job="test_job"} 添加单条数据: echo " metric 3.6" | curl --data-binary @- http://192.168.40.181:9091/metrics/job/test_job 注:--data-binary 表示发送二进制数据,注意:它是使用POST方式发送的! 添加复杂数据 cat <<EOF | curl --data-binary @- http://192.168.40.181:9091/metrics/job/test_job/instance/test_instance #TYPE node_memory_usage gauge node_memory_usage 36 # TYPE memory_total gauge node_memory_total 36000 EOF 删除某个组下某个实例的所有数据 curl -X DELETE http://192.168.40.181:9091/metrics/job/test_job/instance/test_instance 删除某个组下的所有数据: curl -X DELETE http://192.168.40.181:9091/metrics/job/test_job
使用脚本上传数据
把数据上报到pushgateway 在被监控服务所在的机器配置数据上报,想要把192.168.40.181这个机器的内存数据上报到pushgateway,下面步骤需要在192.168.40.181操作 cat push.sh node_memory_usages=$(free -m | grep Mem | awk '{print $3/$2*100}') job_name="memory" instance_name="192.168.40.181" cat <<EOF | curl --data-binary @- http://192.168.40.181:9091/metrics/job/$job_name/instance/$instance_name #TYPE node_memory_usages gauge node_memory_usages $node_memory_usages EOF sh push.sh
打开pushgateway web ui界面,可看到如下:
打开prometheus ui界面,可看到如下node_memory_usages的metrics指标
###注意:从上面配置可以看到,我们上传到pushgateway中的数据有job也有instance,而prometheus配置pushgateway这个job_name中也有job和instance,这个job和instance是指pushgateway实例本身,添加 honor_labels: true 参数, 可以避免promethues的targets列表中的job_name是pushgateway的 job 、instance 和上报到pushgateway数据的job和instance冲突。
基于consul服务自动发现
简介:
Consul是分布式k/v数据库,是一个服务注册组件,其他服务都可以注册到consul上,prometheus基于consul的服务发现流程如下:
(1)在consul注册服务或注销服务(监控targets)
(2)Prometheus一直监视consul服务,当发现consul中符合要求的服务有新变化就会更新Prometheus监控对象
consul简介
Consul是一个分布式的,高可用的服务注册系统,由server端和client端组成,每个server和client都是consul的一个节点,consul客户端不保存数据,客户端将接收到的请求转发给响应的Server端。Server之间通过局域网或广域网通信实现数据一致性
部署consul集群
在master1、master2、node1三个节点部署consul master1是consul的server,master2是consul的client,node1是consul的client 1.下载consul二进制包,在各个节点操作 mkdir /opt/consul/data -p && cd /opt/consul wget https://releases.hashicorp.com/consul/1.7.1/consul_1.7.1_linux_amd64.zip unzip consul_1.7.1_linux_amd64.zip 注:在https://releases.hashicorp.com/consul处可下载各个版本的consul,1.7.1是最新版本 2.启动consul 在master1上: cd /opt/consul nohup ./consul agent -server -bootstrap -bind=192.168.124.16 -client=192.168.124.16 -data-dir=data -ui -node=192.168.124.16 & 这样就启动了master1上的consul 在master2上: cd /opt/consul nohup ./consul agent -bind=192.168.124.26 -client=192.168.124.26 -data-dir=data -node=192.168124.26 -join=192.168.124.16 & 在node1上: cd /opt/consul nohup ./consul agent -bind=192.168.124.56 -client=192.168.124.56 -data-dir=data -node=192.168.124.56 -join=192.168.124.16 &
各个节点都启动完之后
在浏览器访问http://192.168.124.16:8500/
可看到consul的管理界面
服务注册到consul
使用HTTP API 方式注册node-exporter服务注册到Consul,在master1上执行
curl -X PUT -d '{"id": "node-exporter","name": "node-exporter","address": "192.168.124.16","port":9100,"tags": ["node-exporter"],"checks": [{"http": "http://192.168.124.16:9100/","interval": "5s"}]}' http://192.168.124.16:8500/v1/agent/service/register 看到如下显示health checks都是正常,说明node-exporter已经成功注册到consul中了 http://192.168.124.16:8500/ui/dc1/services
http://192.168.124.16:8500/ui/dc1/services/node-exporter
这个步骤是移除,先不操作,把consul中注册的服务移除:
curl --request PUT http://192.168.124.16:8500/v1/agent/service/deregister/192.168.124.16
修改prometheus配置文件,变成基于consul的服务发现
在master1上操作 cd /data/prometheus cat prometheus.yaml scrape_configs: - job_name: consul honor_labels: true metrics_path: /metrics scheme: http consul_sd_configs: - server: 192.168.124.16:8500 services: [] relabel_configs: - source_labels: ['__meta_consul_tags'] target_label: 'product' - source_labels: ['__meta_consul_dc'] target_label: 'idc' - source_labels: ['__meta_consul_service'] regex: "consul" #匹配为"consul" 的service action: drop # 执行的动作 static_configs: 配置数据源 consul_sd_configs: 基于consul服务发现的配置 rebel_configs:重新标记 services: [] :这个表示匹配consul中所有的service docker restart prometheus
在prometheus web ui界面查看
prometheus配置consul服务发现的标签说明
- source_labels: ['__meta_consul_tags'] target_label: 'product' - source_labels: ['__meta_consul_dc'] target_label: 'idc' - source_labels: ['__meta_consul_service'] regex: "consul" #匹配为"consul" 的service action: drop # 执行的动作 参数解释如下: __meta_consul_tags:标记分隔符连接的目标的标记列表 __meta_consul_dc:目标的数据中心名称 __meta_consul_service:目标所属服务的名称 job':目标服务器的job __meta_consul_service_port:目标的服务端口