Prometheus(七):自动发现服务consule

news2024/9/21 2:41:11

目录

  • 1 consule配置使用
    • 1.1 Prometheus 支持的多种服务发现机制
    • 1.2 安装
      • 1、基于 docker 的 consul 集群 - docker-compose
      • 2、单节点cosule安装-docker安装
    • 1.3 使用
      • 1、使用接口注册服务
      • 2、配置 Prometheus 对接Consul 实现自动服务发现
      • 3、使用接口注册服务2-JSON文件
      • 4、relabel_action 的作用
    • 1.4 测试
    • 1.5 consul 常用
      • 1、常用CLI
      • 2、常用API
        • 注册服务
        • 查看所有注册服务列表
        • 查看服务实例状态(最佳接口)
        • 查询服务实例列表
        • 查询注册节点情况
        • 查看Consul集群成员 (常用来测试网络联通性)
        • 查询Consul集群Leader(常用来判断集群状态)

1 consule配置使用

1.1 Prometheus 支持的多种服务发现机制

Prometheus数据源的配置主要分为静态配置和动态发现, 常用的为以下几类:

  • 1)static_configs: #静态服务发现
  • 2)file_sd_configs: #文件服务发现
  • 3)dns_sd_configs: DNS #服务发现
  • 4)kubernetes_sd_configs: #Kubernetes 服务发现
  • 5)consul_sd_configs: Consul #服务发现

    在监控kubernetes的应用场景中,频繁更新的pod,svc,等等资源配置应该是最能体现Prometheus监控目标自动发现服务的好处

1.2 安装

1、基于 docker 的 consul 集群 - docker-compose

这里使用 docker-compose 方式部署 consul 集群

mkdir -p /data0/consul; cd /data0/consul

cat > /data0/consul/docker-compose.yaml << \EOF
version: '2'
networks:
  byfn:
 
services:
  consul1:
    image: consul
    container_name: node1
    volumes: 
      - /data0/consul/conf_with_acl:/consul/config
    command: agent -server -bootstrap-expect=3 -node=node1 -bind=0.0.0.0 -client=0.0.0.0 -config-dir=/consul/config
    networks:
      - byfn
 
  consul2:
    image: consul
    container_name: node2
    volumes:
      - /data0/consul/conf_with_acl:/consul/config
    command: agent -server -retry-join=node1 -node=node2 -bind=0.0.0.0 -client=0.0.0.0 -config-dir=/consul/config
    ports:
       - 8500:8500
    depends_on:
        - consul1
    networks:
      - byfn
 
  consul3:
    image: consul
    volumes:
      - /data0/consul/conf_with_acl:/consul/config
    container_name: node3
    command: agent -server -retry-join=node1 -node=node3 -bind=0.0.0.0 -client=0.0.0.0 -config-dir=/consul/config
    depends_on:
        - consul1
    networks:
      - byfn
 
  consul4:
    image: consul
    container_name: node4
    volumes:
      - /data0/consul/conf_with_acl:/consul/config
    command: agent -retry-join=node1 -node=ndoe4 -bind=0.0.0.0 -client=0.0.0.0 -ui -config-dir=/consul/config
    ports:
      - 8501:8500
    depends_on:
        - consul2
        - consul3
    networks:
      - byfn

  consul5:
    image: consul
    container_name: node5
    volumes:
      - /data0/consul/conf_without_acl:/consul/config
    command: agent -retry-join=node1 -node=ndoe5 -bind=0.0.0.0 -client=0.0.0.0 -ui -config-dir=/consul/config
    ports:
      - 8502:8500
    depends_on:
        - consul2
        - consul3
    networks:
      - byfn
EOF


docker-compose up -d

# 访问:http://192.168.92.100:8502/

在这里插入图片描述

2、单节点cosule安装-docker安装

# 安装
docker run --name consul -d -p 8500:8500 consul
# 或者
consul agent -dev -ui -client 0.0.0.0
# 登录:http://172.16.0.242:8500/

1.3 使用

1、使用接口注册服务

# 注册服务
curl -X PUT -d '{"id": "redis","name": "redis","address": "192.168.92.100","port": 9121,"tags": ["service"],"checks": [{"http": "http://192.168.92.100:9121/","interval": "5s"}]}' http://192.168.92.100:8502/v1/agent/service/register
# 注册服务
curl -X PUT -d '{
  "id": "node-exporter",
  "name": "node-exporter-172-16-0-242",
  "address": "172.16.0.242",
  "port": 9100,
  "tags": ["node2"],
  "checks": [{"http": "http://192.168.92.100:9100/metrics", "interval": "5s"}]
}' http://192.168.92.100:8500/v1/agent/service/register


# 查询指定节点以及指定的服务信息
curl http://192.168.92.100:8500/v1/catalog/service/redis
[{"ID":"f2a99a8e-c9ee-c3d1-601b-75992d7097e6","Node":"ndoe5","Address":"172.18.0.5","Datacenter":"dc1","TaggedAddresses":{"lan":"172.18.0.5","lan_ipv4":"172.18.0.5","wan":"172.18.0.5","wan_ipv4":"172.18.0.5"},"NodeMeta":{"consul-network-segment":""},"ServiceKind":"","ServiceID":"redis","ServiceName":"redis","ServiceTags":["service"],"ServiceAddress":"192.168.92.100","ServiceTaggedAddresses":{"lan_ipv4":{"Address":"192.168.92.100","Port":9121},"wan_ipv4":{"Address":"192.168.92.100","Port":9121}},"ServiceWeights":{"Passing":1,"Warning":1},"ServiceMeta":{},"ServicePort":9121,"ServiceSocketPath":"","ServiceEnableTagOverride":false,"ServiceProxy":{"Mode":"","MeshGateway":{},"Expose":{}},"ServiceConnect":{},"CreateIndex":68,"ModifyIndex":68}]


#删除指定服务 redis为要删除服务的id
curl -X PUT  http://192.168.92.100:8502/v1/agent/service/deregister/redis

在这里插入图片描述

2、配置 Prometheus 对接Consul 实现自动服务发现

# 现在 Consul 服务已经启动完毕,并成功注册了一个服务,接下来,我们需要配置 Prometheus 来使用 Consul 自动服务发现,目的就是能够将上边添加的服务自动发现到 Prometheus 的 Targets 中,增加 prometheus.yml 配置如下:
  - job_name: 'consul-prometheus'
    consul_sd_configs:
    - server: '192.168.92.100:8500'
      services: []  

# 可以配置 relabel_configs 来实现标签过滤,只加载符合规则的服务。以上边为例,可以通过过滤 __meta_consul_tags 标签为 test 的服务,relabel_config 向 Consul 注册服务的时候,只加载匹配 regex 表达式的标签的服务到自己的配置文件。修改 prometheus.yml 配置如下:

  - job_name: 'consul-prometheus'
    consul_sd_configs:
    - server: '192.168.92.100:8500'
      services: []  
    relabel_configs:
    - source_labels: [__meta_consul_tags]
      regex: .*test.*
      action: keep

# 可以在上述案例的基础上修改标签
- job_name: consul
  consul_sd_configs:
     - server: '127.0.0.1:8500'
  relabel_configs:
  - source_labels: ['__meta_consul_service_metadata_project_code']
    target_label: 'project_code'
  - source_labels: ['__meta_consul_service_metadata_env_code']
    target_label: 'env_code'
  - source_labels: ['__meta_consul_service_metadata_role_code']
    target_label: 'role_code'
  - source_labels: ['__meta_consul_service_metadata_server_code']
    target_label: 'server_code'
  - source_labels: ['__meta_consul_service_metadata_server_name']
    target_label: 'server_name'
  - source_labels: ['__meta_consul_service_metadata_remote_ip']
    target_label: 'remote_ip'
  - source_labels: ['__meta_consul_service_metadata_monitor_type']
    target_label: 'monitor_type'
  - source_labels: ['__meta_consul_service_metadata_monitor_port']
    target_label: 'monitor_port'
  - source_labels: [__meta_consul_tags]
    regex: '(.*port.*|.*ping.*)'
    action: drop

# 重新加载配置文件
curl -XPOST http://192.168.92.100:9090/-/reload
# 如果返回:Lifecycle API is not enabled. 那么就是
#启动的时候没有开启热更新配置,需要在启动的命令行增加参数: --web.enable-lifecycle
# 需要修改启动文件 /lib/systemd/system/prometheus.service
systemctl restart prometheus.service; systemctl status prometheus.service

3、使用接口注册服务2-JSON文件

$ vim consul-0.json
{
  "ID": "node-exporter",
  "Name": "node-exporter-172.30.12.167",
  "Tags": [
    "test"
  ],
  "Address": "172.30.12.167",
  "Port": 9100,
  "Meta": {
    "app": "spring-boot",
    "team": "appgroup",
    "project": "bigdata"
  },
  "EnableTagOverride": false,
  "Check": {
    "HTTP": "http://172.30.12.167:9100/metrics",
    "Interval": "10s"
  },
  "Weights": {
    "Passing": 10,
    "Warning": 1
  }
}

$ curl --request PUT --data @a.json http://192.168.92.100:8500/v1/agent/service/register
# 以前的版本中需要加这个参数?replace-existing-checks=1,新版没有这个参数了,会直接覆盖原来的数据

4、relabel_action 的作用

...
- job_name: 'consul-prometheus'
  consul_sd_configs:
    - server: '172.30.12.167:8500'
      services: []  
  relabel_configs:
    - source_labels: [__meta_consul_tags]
      regex: .*test.*
      action: keep

说明:

  • replace: 根据 regex 的配置匹配 source_labels 标签的值(注意:多个 source_label 的值会按照 separator 进行拼接),并且将匹配到的值写入到 target_label 当中,如果有多个匹配组,则可以使用 ${1}, ${2} 确定写入的内容。如果没匹配到任何内容则不对 target_label 进行重新, 默认为 replace。
  • keep: 丢弃 source_labels 的值中没有匹配到 regex 正则表达式内容的 Target 实例
  • drop: 丢弃 source_labels 的值中匹配到 regex 正则表达式内容的 Target 实例
  • hashmod: 将 target_label 设置为关联的 source_label 的哈希模块
  • labelmap: 根据 regex 去匹配 Target 实例所有标签的名称(注意是名称),并且将捕获到的内容作为为新的标签名称,regex 匹配到标签的的值作为新标签的值
  • labeldrop: 对 Target 标签进行过滤,会移除匹配过滤条件的所有标签
  • labelkeep: 对 Target 标签进行过滤,会移除不匹配过滤条件的所有标签

1.4 测试

# 安装允许redis
docker run -d \
       --name redis_exporter \
       -p 9121:9121 \
       oliver006/redis_exporter \
       --redis.addr redis://172.16.90.9:6379 \
       --redis.password 123456
       
# 注册到consul中
curl -X PUT -d '{
"id": "redis_exporter",
"name": "redis_exporter",
"address": "192.168.92.100",
"port": 9121,
"tags": ["test"],
"checks": [{"http": "http://192.168.92.100:9121", "interval": "5s"}]
}'  http://192.168.92.100:8500/v1/agent/service/register
### 参数说明
# id : 注册ID 在consul中为唯一标识
# name :Service名称
# address:自动注册绑定ip
# port:自动注册绑定端口
# tags:注册标签,可多个
# checks : 健康检查
#   http:   检查数据来源
#   interval: 检查时间间隔
# http://192.168.0.181:8500/v1/agent/service/register192.168.0.181




# 查看
curl http://192.168.92.100:8500/v1/catalog/service/redis_exporter

# 重载
curl -X POST http://192.168.92.100:9090/-/reload

# 删除其下的一个instance
curl -X PUT http://192.168.92.100:8500/v1/agent/service/deregister/service_id
## 所有实例删除完毕,这个services就好默认删除

在这里插入图片描述

1.5 consul 常用

1、常用CLI

# 查看服务列表
consul catalog services

# 注销服务
consul services deregister -id=:service-id
// :service-id 为用户服务Id

# 查看节点成员
consul members

# 查看主节点
consul info

2、常用API

注册服务
payload.json
====
{
  "ID": "spring-cloud-provider-8080",
  "Name": "spring-cloud-provider",
  "Tags": ["primary", "v1"],
  "Address": "127.0.0.1",
  "Port": 8080,
  "EnableTagOverride": false,
   "Check": {
    "DeregisterCriticalServiceAfter": "1m",
    "Interval": "10s",
    "Timeout": "5s"
    "Tcp":"127.0.0.1:8080"
  },
  "Weights": {
    "Passing": 10,
    "Warning": 1
  }
}


curl \
    --request PUT \
    --data @payload.json \
    http://127.0.0.1:8500/v1/agent/service/register?replace-existing-checks=true
查看所有注册服务列表
curl 127.0.0.1:8500/v1/catalog/services
查看服务实例状态(最佳接口)
查看健康检查通过的
curl http://127.0.0.1:8500/v1/health/checks/:serviceName?passing |python -m json.tool

查看全部
curl http://127.0.0.1:8500/v1/health/checks/:serviceName | python -m json.tool
查询服务实例列表
健康实例(会拉取到未设置check的service)
curl http://127.0.0.1:8500/v1/health/service/:serviceName?passing | python -m json.tool

查看全部
curl http://127.0.0.1:8500/v1/health/service/:serviceName  | python -m json.tool
查询注册节点情况
curl http://127.0.0.1:8500/v1/catalog/service/:serviceName  | python -m json.tool
查看Consul集群成员 (常用来测试网络联通性)
curl http://127.0.0.1:8500/v1/agent/members | python -m json.tool
查询Consul集群Leader(常用来判断集群状态)
curl http://127.0.0.1:8500/v1/status/leader

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2085530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【微信小程序】全局数据共享 - MobX

1. 什么是全局数据共享 2. 小程序中的全局数据共享方案 3.Mobx的使用 1.npm init -y(根据实际情况选择) 在小程序项目中&#xff0c;可以通过 npm 的方式引入 MobX 。 如果你还没有在小程序中使用过 npm &#xff0c;那先在小程序目录中执行命令&#xff1a; npm init -y2. …

从“输血“到“造血“:“拨改投“政策如何推动产业升级?

在经济发展的浪潮中&#xff0c;“拨改投”政策如同一股清流&#xff0c;以创新之姿重塑了财政资金的传统使用模式。这一政策精髓在于&#xff0c;将财政资金从直接的拨款方式转变为灵活的股权投资方式&#xff0c;不仅激活了市场活力&#xff0c;更引领了产业升级的新风尚。 “…

Windows 10/11降级漏洞的工具包现已发布 仅供安全测试

早前有研究人员在分析 Windows 10/11 更新机制时发现微软虽然已经考虑到潜在的安全问题增加了各种限制&#xff0c;但还是存在失误因此存在弱点&#xff0c;研究人员则通过该弱点成功降级了系统。通过该漏洞不仅可以成功降级系统&#xff0c;同时系统还会认为自己已经完成更新并…

高级算法设计与分析 学习笔记1 递归与分治法 复杂度计算 大数乘法

本章的目录&#xff1a; 排序问题的示例与分析&#xff1a;递归与分治 插入排序&#xff1a; 类似于排序扑克牌。先把第一个元素当成已排序序列&#xff0c;然后把第二个纳入&#xff0c;用一次插入排序&#xff0c;然后将第三个纳入…… 插入排序性能分析 大O表示上界&#x…

云微客一分钟告诉你,为什么要做短视频矩阵?

都说2024年是经济下行的一年&#xff0c;但是要问2024年的营销关键词是什么的话&#xff0c;那一定是&#xff1a;短视频矩阵。短视频矩阵就是在多个短视频平台上建立多个账号&#xff0c;通过矩阵系统发布不同类型的短视频内容&#xff0c;实现品牌曝光、用户引流、粉丝积累等…

探索AI智能问答:改变未来交流的新动力

随着大数据和机器学习的发展&#xff0c;AI智能问答系统已经不仅仅是科幻小说中的幻想&#xff0c;而是正逐步融入我们的日常生活&#xff0c;从客户服务到教育&#xff0c;再到医疗诊断&#xff0c;其应用范围如此之广&#xff0c;让人叹为观止。 一、AI智能问答系统的原理与运…

关于武汉芯景科技有限公司的实时时钟芯片XJ8337开发指南(兼容DS1337)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、系统结构图 三、功能描述 1.时钟功能 2.闹钟功能&#xff08;两个闹钟&#xff09; 3.振荡器停止控制 4.频率输出&#xff08;1HZ、1.096KHZ、8.192KHZ、32.768KHZ&#xff09; 5.振荡器停止检测 6.闹钟中断标志 四、程序代…

AI模型应该追求全能还是专精

目录 1.概述 2.AI模型的全面评估和比较 2.1. 精度 (Accuracy) 2.2. 速度 (Speed) 2.3. 鲁棒性 (Robustness) 2.4. 可扩展性 (Scalability) 2.5. 解释性/可解释性 (Interpretability) 2.6.应用场景分析 3.AI模型的专精化和可扩展性 3.1. 模型构架选择 3.2. 训练策略 …

sheng的学习笔记-AI-图半监督学习

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 半监督学习&#xff1a;sheng的学习笔记-AI-半监督学习-CSDN博客 什么是图半监督学习 给定一个数据集&#xff0c;我们可将其映射为一个图&#xff0c;数据集中每个样本对应于图中一个结点&#xff0c;若两个样本之间的相…

mysql的组从复制

1.原理分析 三个线程 1.实际上主从同步的原理就是基于 binlog 进行数据同步的。在主从复制过程中&#xff0c;会基于 3 个线程来操作&#xff0c; 一个主库线程&#xff0c;两个从库线程。 2.二进制日志转储线程&#xff08; Binlog dump thread &#xff09;是一个主库线程…

神仙级的免费开源电子书阅读器,还支持听书功能,极空间部署『Koodo Reader』

神仙级的免费开源电子书阅读器&#xff0c;还支持听书功能&#xff0c;极空间部署『Koodo Reader』 哈喽小伙伴们好&#xff0c;我是Stark-C~ 前段时间不是给大家分享的电子书管理工具『TaleBook』嘛~&#xff0c;然后就有粉丝私信我有没有那种专门看电子书的阅读器&#xff…

Qt上传文件小记

最近由于公司上线了云平台&#xff0c;需要用Qt与云平台进行对接&#xff0c;故拾起了network模块。 众所周知Qt网络http相关的类QNetworkAccessManager发挥着举足轻重的作用。 普通的http&#xff1a;GET POST PUT DELETE已经耳熟能详&#xff0c;网上也有很多的文章有介绍到…

如何限制企业内部文件外发?告别文件泄露,七大招数限制企业内部文件外发!

如何限制企业内部文件外发&#xff0c;告别文件泄露&#xff01;文件一旦外泄&#xff0c;不仅可能泄露商业机密&#xff0c;还可能对企业的声誉和利益造成重大损害。 因此&#xff0c;如何有效限制企业内部文件外发&#xff0c;成为了每个企业必须面对和解决的问题。以下七大…

Vue 3 CLI TypeScript 项目搭建全攻略

一、前期准备 在搭建 Vue 3 CLI TypeScript 项目之前&#xff0c;我们需要做好一系列的准备工作。 首先&#xff0c;Node.js 是必不可少的运行环境。Vue 3 CLI 要求 Node.js 的版本至少为 8.9 以上。您可以从Node.js 官方网站下载最新的长期支持&#xff08;LTS&#xff09;版…

数字芯片设计验证经验分享系列文章(第四部分):将ASIC IP核移植到FPGA上——如何测试IP核的功能和考虑纯电路以外的其他因素

作者&#xff1a;Philipp Jacobsohn&#xff0c;SmartDV首席应用工程师 Sunil Kumar&#xff0c;SmartDV FPGA设计总监 本系列文章从数字芯片设计项目技术总监的角度出发&#xff0c;介绍了如何将芯片的产品定义与设计和验证规划进行结合&#xff0c;详细讲述了在FPGA上使用I…

Python中类型转换函数1

1 bool()函数 bool()函数的作用是将给定参数转换为布尔类型&#xff0c;指定参数是非零值&#xff0c;则转换为True&#xff0c;否则转换为False&#xff0c;如图1所示。 图1 bool()函数的使用方法1 如果bool()函数没有参数&#xff0c;则返回值是False&#xff0c;如图2所示…

如何查看 Kubernetes 的操作审计日志?

极狐GitLab 通过 Kubernetes Agent 对 Kubernetes 集群进行管理。整体的步骤为 Kubernetes Agent 的注册、安装。当然&#xff0c;也可以直接对 Agent 进行删除。不管是添加还是删除&#xff0c;后台都会有对应的审计日志&#xff0c;方便对 Kubernetes 集群的操作进行安全审计…

金九银十面试丨Python自动化测试的面试真题:

1.请解释一下Python自动化测试是什么以及为什么它重要&#xff1f; Python自动化测试是指使用Python编程语言进行测试过程中的自动化的过程。它通过编写测试脚本和自动化工具来模拟用户的行为&#xff0c;执行测试用例&#xff0c;并能够自动捕获测试结果和生成测试报告。Pyth…

Qt QLineEdit输入内容的格式限制(2)

设置QlineEdit控件不可编辑、密文输入、输入格式等小技巧 1. 设置不可编辑 setReadOnly(false);//文本不可编辑&#xff0c;但可以复制到剪切板 setEnabled(false);//整个控件被禁用&#xff0c;且会调用控件的禁用状态 setFocusPolicy(Qt::NoFocus);//无法获得焦点&#xff…

什么是密码学?

什么是密码学&#xff1f; 密码学是一种通过使用编码算法、哈希和签名来保护信息的实践。此信息可以处于静态&#xff08;例如硬盘驱动器上的文件&#xff09;、传输中&#xff08;例如两方或多方之间交换的电子通信&#xff09;或使用中&#xff08;在对数据进行计算时&#…