Prometheus 使用 Consul 自动发现 Spring Boot 服务并拉取数据

Prometheus 同时被 2 个专栏收录
4 篇文章 0 订阅
56 篇文章 0 订阅

Prometheus 使用 Consul 自动发现 Spring Boot 服务并拉取数据

使用 Prometheus监控 SpringBoot 应用,当应用很多,且上下线频繁时,需要不断的更改 Prometheus 的配置文件,不能灵活的使用,可以通过为 Prometheus配置注册中心,从注册中心拉取应用数据获取监控数据

启动 Prometheus

  • 添加配置文件 prometheus.yaml
mkdir -p ~/docker/prometheus/config
vi ~/docker/prometheus/config/prometheus.yml
global:
  scrape_interval: 15s
  scrape_timeout: 10s
  evaluation_interval: 15s
alerting:
  alertmanagers:
  - static_configs:
    - targets: []
    scheme: http
    timeout: 10s
    api_version: v1
scrape_configs:
- job_name: prometheus
  honor_timestamps: true
  scrape_interval: 15s
  scrape_timeout: 10s
  metrics_path: /metrics
  scheme: http
  static_configs:
  - targets:
    - localhost:9090
  • 启动容器
docker run \
    -d \
    --name prometheus \
    -p 9090:9090 \
    -v ~/docker/prometheus/config/prometheus.yml:/etc/prometheus/prometheus.yml \
    prom/prometheus    

启动 Consul

docker run \
       -d \
       --name consul \
       -p 8500:8500 \
       consul

启动 Spring Boot 应用

添加监控

  • 添加依赖 build.gradle
    compile 'org.springframework.cloud:spring-cloud-starter-consul-discovery'
    compile 'org.springframework.boot:spring-boot-starter-actuator'
    compile 'io.micrometer:micrometer-core:1.5.1'
    compile 'io.micrometer:micrometer-registry-prometheus:1.5.1' 
  • 修改应用配置 applicaiton.properties
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.service-name=${spring.application.name}
spring.cloud.consul.discovery.prefer-ip-address=true
spring.cloud.consul.discovery.health-check-url=http://host.docker.internal:${server.port}/actuator/health
spring.cloud.consul.discovery.tags=metrics=true

management.endpoints.web.exposure.include=*
# prometheus
management.metrics.tags.application=${spring.application.name}

上面配置中指定健康检查是为了 Consul 从容器访问宿主机的应用,指定tag是为了Prometheus 从Consul列表中拉取需要监控的指定应用

使用 Consul 发现服务

修改 Prometheus 配置

  • prometheus.yaml
global:
  scrape_interval: 15s
  scrape_timeout: 10s
  evaluation_interval: 15s
alerting:
  alertmanagers:
    - static_configs:
        - targets: []
      scheme: http
      timeout: 10s
      api_version: v1
scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]
  - job_name: "consul"
    consul_sd_configs:
      - server: "host.docker.internal:8500"
    relabel_configs:
      - source_labels: ["__meta_consul_dc"]
        target_label: "dc"
      - source_labels: [__meta_consul_service]
        separator: ;
        regex: (.*)
        target_label: application
        replacement: $1
        action: replace
      - source_labels: [__address__]
        separator: ":"
        regex: (127.0.0.1):(.*)
        target_label: __address__
        replacement: host.docker.internal:${2}
        action: replace
      - source_labels: [__metrics_path__]
        separator: ;
        regex: /metrics
        target_label: __metrics_path__
        replacement: /actuator/prometheus
        action: replace
      - source_labels: ['__meta_consul_tags']
        regex: '^.*,metrics=true,.*$'
        action: keep

其中 :

  • consul_sd_configs指定 Consul 的地址
  • relabel_configs 指定配置标签覆盖规则
  • __meta_consul_service
      - source_labels: [__meta_consul_service]
        separator: ;
        regex: (.*)
        target_label: application
        replacement: $1
        action: replace

这个配置是将 __meta_consul_service 重新映射为 application字段,方便 Prometheus 查询

  • __address__
      - source_labels: [__address__]
        separator: ":"
        regex: (127.0.0.1):(.*)
        target_label: __address__
        replacement: host.docker.internal:${2}
        action: replace

这个配置是为了将 127.0.0.1的地址改为host.docker.internal,方便 Prometheus 从容器中访问宿主机的应用

  • __metrics_path__
      - source_labels: [__metrics_path__]
        separator: ;
        regex: /metrics
        target_label: __metrics_path__
        replacement: /actuator/prometheus
        action: replace

这个配置是为了将 Prometheus 默认的拉取数据 /metrics改成 /actuator/prometheus,方便从 Spring拉取,如果有多种不同的应用,数据路径不一样,建议设置多个job,以使用不同的规则

  • __meta_consul_tags
      - source_labels: ['__meta_consul_tags']
        regex: '^.*,metrics=true,.*$'
        action: keep

这个配置是为了筛选指定tag的应用,只有有这个tag的应用才会拉取监控数据,这里是 metrics=true,是在 Spring Boot的配置文件中配置的,这样就可以避免拉取不相关的数据的应用(如 Consul自己的数据,替换路径为/actuator/prometheus后无法获取到监控数据)

配置完成后重启 Prometheus

获取应用

  • Consul 中注册的应用

prometheus-consul-consul-service-list.png

  • Prometheus 的 Service Discovery

可以看到,consul这个服务下发现了三个服务,但是只有一个在拉取数据,另外两个被丢弃了,这是因为限制了只拉取 tag 为 metrics=true

prometheus-consul-prometheus-discovery-list.png

  • Prometheus 的 Target

可以看到 Target 也只拉取了这一个应用

prometheus-consul-prometheus-target-list.png

  • 查询监控数据

在 Prometheus 的 Graph中查询应用信息,也只能看到一个

process_uptime_seconds

prometheus-consul-prometheus-query-result1.png

  • 修改另一个 Spring Boot 应用,添加监控tag

再次查询 Prometheus 数据,可以看到另一个应用也开始拉取数据

prometheus-consul-prometheus-query-result2.png


  • 相关项目可以参考 grpc
  • 2
    点赞
  • 1
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
<p> <span style="font-size:16px;"></span><span style="font-size:20px;"><strong>一、prometheus简介</strong></span> </p> <p> <span style="font-size:16px;"><strong> </strong></span> </p> <p> <strong> Prometheus是一个开源的系统监控和告警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF维护管理的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,prometheus支持多种exporter采集数据,还支持通过pushgateway进行数据上报,<span style="color:#494949;">Prometheus再</span><span style="color:#494949;">性能上可支撑上万台规模的集群。</span> </strong> </p> <strong> </strong> <p> <strong> <span style="font-size:20px;"><strong><span style="color:#494949;">二、prometheus架构图</span></strong></span> </strong> </p> <strong> </strong> <p> <strong><span style="color:#494949;"><img src="https://img-bss.csdn.net/202004201352387874.png" alt="" /><br /></span> </strong> </p> <strong> </strong> <p> <strong> <span style="font-size:20px;"><strong>三、prometheus组件介绍</strong></span> </strong> </p> <strong> </strong> <p style="text-align:left;"> <strong> <span style="font-size:16px;color:#323232;"></span> </strong> </p> <strong> </strong> <p style="text-align:left;"> <strong> <span style="font-size:16px;color:#323232;">1.Prometheus Server: 用于收集和存储时间序列数据。</span> </strong> </p> <strong> </strong> <p style="text-align:left;"> <strong> <span style="font-size:16px;color:#323232;">2.Client Library: 客户端库,检测应用程序代码,当Prometheus实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的当前状态发送到prometheus server端。</span> </strong> </p> <strong> </strong> <p style="text-align:left;"> <strong> <span style="font-size:16px;color:#323232;">3.Exporters: prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端</span> </strong> </p> <strong> </strong> <p style="text-align:left;"> <strong> <span style="font-size:16px;color:#323232;">4.Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉, slack等。</span> </strong> </p> <strong> </strong> <p style="text-align:left;"> <strong> <span style="font-size:16px;color:#323232;">5.Grafana:监控仪表盘</span> </strong> </p> <strong> </strong> <p style="text-align:left;"> <strong> <span style="font-size:16px;color:#323232;">6.pushgateway: 各个目标主机可上报数据到pushgatewy,然后prometheus server统一从pushgateway数据。</span> </strong> </p> <strong> </strong> <p> <strong> <span style="font-size:20px;"><strong><span></span></strong></span> </strong> </p> <strong> </strong> <p> <strong> <span style="font-size:20px;"><strong><span>四、课程亮点</span></strong></span><strong><span style="font-size:16px;"><br /></span></strong> </strong> </p> <strong> </strong> <p> <img src="https://img-bss.csdn.net/202004201352522795.png" alt="" /></p> <strong> </strong> <p> <strong> <strong><span style="font-size:16px;"></span></strong> </strong> </p> <strong> </strong> <p> <strong> <span style="font-size:20px;"><strong><span></span></strong></span><span style="font-size:20px;"><strong><span>五、效果图展示</span></strong></span></strong> </p> <p> <strong><span style="font-size:20px;"><strong><span><img src="https://img-bss.csdn.net/202004201353077268.png" alt="" /><br /></span></strong></span></strong> </p> <strong> </strong> <p> <strong><span style="font-size:20px;"><strong><img src="https://img-bss.csdn.net/202004201353245111.png" alt="" /><br /></strong></span></strong> </p> <p> <strong><span style="font-size:20px;"><strong><img src="https://img-bss.csdn.net/202004201353384468.png" alt="" /><br /></strong></span></strong> </p> <p> <strong><span style="font-size:20px;"><strong><img src="https://img-bss.csdn.net/202004201354069425.png" alt="" /><br /></strong></span></strong> </p> <p> <strong><span style="font-size:20px;"><strong><img src="https://img-bss.csdn.net/202004201354193720.png" alt="" /><br /></strong></span></strong> </p> <p> <strong> <span style="font-size:20px;"><strong>六、讲师简介</strong></span> </strong> </p> <strong> </strong> <p> <strong> <span style="font-size:16px;"><span style="color:#000000;">先超(lucky)</span><span style="color:#000000;">:</span></span><span style="color:#000000;font-size:16px;">高级运维工程师、资深DevOps工程师,在互联网上市公司拥有多年一线运维经验,主导过亿级pv项目的架构设计和运维工作</span><span style="color:#000000;font-size:16px;"><br /></span> </strong> </p> <strong> </strong> <p> <strong> <span style="font-size:16px;"><span style="color:#000000;font-size:16px;">主要研究方向:</span><span style="color:#000000;font-size:16px;"><br /></span></span> </strong> </p> <strong> </strong> <p> <strong> <span style="font-size:16px;"><span style="color:#000000;font-size:16px;">1.云计算方向:</span><span style="font-size:40px;color:#000000;"></span><span style="color:#000000;font-size:16px;">容器</span></span> </strong> </p> <strong> </strong> <p> <strong> <span style="font-size:16px;"><span style="color:#000000;font-size:16px;">(kubernetes、docker),虚拟化(kvm、Vmware vSphere),微服务(istio),PaaS(openshift),IaaS(openstack)等</span><span style="font-size:27px;color:#000000;"><br /></span><span style="color:#000000;font-size:16px;">2.系统/运维方向:</span><span style="font-size:40px;color:#000000;"></span><span style="font-size:39px;color:#000000;"></span><span style="color:#000000;font-size:16px;">linux系统下的常用组件(nginx,tomcat,elasticsearch,zookeeper,kafka等),DevOps(Jenkins+gitlab+sonarqube+nexus+k8s),CI/CD,监控(zabbix、prometheus、falcon)等</span><span style="font-size:39px;color:#000000;"><br /></span></span> </strong> </p> <strong> </strong> <p> <strong> <span style="font-size:39px;color:#000000;"></span> </strong> </p> <strong></strong><strong></strong><strong></strong> <p> <strong><span style="font-size:18px;">七、课程大纲</span></strong> </p> <p> <strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/202004201355254800.png" alt="" /><br /></span></strong> </p> <p> <strong><span style="font-size:24px;"><img src="https://img-bss.csdn.net/202004201355386613.png" alt="" /><br /></span></strong> </p> <p> <strong><span style="font-size:24px;"><img src="https://img-bss.csdn.net/202004201356062136.png" alt="" /><br /></span></strong> </p> <p> <strong><span style="font-size:24px;"><img src="https://img-bss.csdn.net/202004201356218012.png" alt="" /><br /></span></strong> </p>
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页

打赏

呜呜呜啦啦啦

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值