• 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:目标的服务端口
  • 相关阅读:
    使用docker sail镜像创建laravel项目
    Python使用阿里云镜像
    VMware安装OpenEuler虚拟机并配置图形界面
    机器学习模型评估指标汇总 (一)
    机器学习模型评估指标汇总 (二)
    运行docker命令需要sudo权限的问题
    如何不重装修复损坏的 Ubuntu 系统
    卡尔曼滤波
    升级anaconda
    jupyter notebook 代码自动补全
  • 原文地址:https://www.cnblogs.com/dahuige/p/15098803.html
Copyright © 2020-2023  润新知