18.基于Consul的服务发现和ConsulManager管理
192.168.10.14 prometheus、consul
192.168.10.100 各类服务
一、基于Consul的服务发现
Consul 是由 HashiCorp 开发的一个支持多数据中心的分布式服务发现和键值对存储服务的开源软件,是一个通用的服务发现和注册中心工具,被大量应用于基于微服务的软件架构当中。
1.1 二进制安装consul(二选一)
在页面 https://www.consul.io/downloads 下载符合自己系统的安装文件,比如我们这里是 Linux 系统,使用下面命令下载安装即可:
wget https://releases.hashicorp.com/consul/1.18.1/consul_1.18.1_linux_amd64.zip apt install unzip -y
unzip consul_1.18.1_linux_amd64.zip
mv consul /usr/local/bin
consul version # 启动consul
为了查看更多的日志信息,我们可以在 dev 模式下运行 Consul,如下所示:
consul agent -dev -client 0.0.0.0 启动命令后面使用 -client 参数指定了客户端绑定的 IP 地址,默认为 127.0.0.1
1.2 docker安装Consul(二选一)
# docker 运行
docker run -d --name consul -p 8500:8500 consul:1.14.5 # consul http访问地址
http://192.168.10.100:8500/ui/dc1/services
1.3 通过api注册到Consul
# 第一种方式:使用命令注册
curl -X PUT -d '{"id": "node1","name": "node_exporter","address": "node_exporter","port": 9100,"tags": ["exporter"],"meta": {"job": "node_exporter","instance": "Prometheus服务器"},"checks": [{"http": "http://192.168.10.14:9100/metrics", "interval": "5s"}]}' http://localhost:8500/v1/agent/service/register # 第二种方式:把json数据放在文件中,使用这个json文件注册
mkdir /data/consul
cd /data/consul cat > node_exporter.json<<"EOF"
{
"id": "node2",
"name": "node_exporter",
"address": "192.168.10.100",
"port": 9100,
"tags": ["exporter"],
"meta": {
"job": "node_exporter",
"instance": "test服务器"
},
"checks": [{
"http": "http://192.168.10.14:9100/metrics",
"interval": "10s"
}]
}
EOF curl --request PUT --data @node_exporter.json http://localhost:8500/v1/agent/service/register
consul
的服务,我们可以在浏览器中访问 http://192.168.11.61:8500
查看注册的服务。在 Consul UI 页面中可以看到有 consul
和 node_exporter
两个 Service 服务。
1.4 配置Prometheus
在 Prometheus 的配置文件 prometheus.yml
文件中的 scrape_configs
部分添加如下所示的抓取配置:
备份源文件:
cd /data/docker-prometheus
cp -a prometheus/prometheus.yml prometheus/prometheus.yml.bak
ls -l prometheus/prometheus.yml.bak
使用以下配置
cat > prometheus/prometheus.yml<<"EOF"
# 全局配置
global:
scrape_interval: 15s # 将搜刮间隔设置为每15秒一次。默认是每1分钟一次。
evaluation_interval: 15s # 每15秒评估一次规则。默认是每1分钟一次。 # Alertmanager 配置
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093'] # 报警(触发器)配置
rule_files:
- "alert.yml"
- "rules/*.yml" # 搜刮配置
scrape_configs:
- job_name: 'prometheus'
# 覆盖全局默认值,每15秒从该作业中刮取一次目标
scrape_interval: 15s
static_configs:
- targets: ['localhost:9090']
- job_name: 'alertmanager'
# 覆盖全局默认值,每15秒从该作业中刮取一次目标
scrape_interval: 15s
static_configs:
- targets: ['alertmanager:9093'] - job_name: 'consul_exporter'
consul_sd_configs:
- server: '192.168.10.14:8500'
services: []
relabel_configs:
- source_labels: [__meta_consul_tags]
regex: .*exporter.*
action: keep
- regex: __meta_consul_service_metadata_(.+)
action: labelmap
# Spring Boot 2.x 应用数据采集配置
- job_name: 'consul_springboot_demo'
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
consul_sd_configs:
- server: '192.168.10.14:8500'
services: []
relabel_configs:
- source_labels: [__meta_consul_tags]
regex: .*springboot.*
action: keep
- regex: __meta_consul_service_metadata_(.+)
action: labelmap
#http配置
- job_name: "consul-blackbox_http"
metrics_path: /probe
params:
module: [http_2xx]
consul_sd_configs:
- server: '192.168.10.14:8500'
services: []
relabel_configs:
- source_labels: [__meta_consul_tags]
regex: .*blackbox_http.*
action: keep
- regex: __meta_consul_service_metadata_(.+)
action: labelmap
- source_labels: [__meta_consul_service_address]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.10.100:9115
#tcp检查配置
- job_name: "consul_blackbox_tcp"
metrics_path: /probe
params:
module: [tcp_connect]
consul_sd_configs:
- server: '192.168.10.14:8500'
services: []
relabel_configs:
- source_labels: [__meta_consul_tags]
regex: .*blackbox_tcp.*
action: keep
- regex: __meta_consul_service_metadata_(.+)
action: labelmap
- source_labels: [__meta_consul_service_address]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.10.100:9115 #icmp检查配置
- job_name: "consul_blackbox_icmp"
metrics_path: /probe
params:
module: [icmp]
consul_sd_configs:
- server: '192.168.10.14:8500'
services: []
relabel_configs:
- source_labels: [__meta_consul_tags]
regex: .*blackbox_icmp.*
action: keep
- regex: __meta_consul_service_metadata_(.+)
action: labelmap
- source_labels: [__meta_consul_service_address]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.10.100:9115 #域名检测
- job_name: consul_domain_exporter
scrape_interval: 10s
metrics_path: /probe
consul_sd_configs:
- server: '192.168.10.14:8500'
services: []
relabel_configs:
- source_labels: [__meta_consul_tags]
regex: .*domain.*
action: keep
- regex: __meta_consul_service_metadata_(.+)
action: labelmap
- source_labels: [__meta_consul_service_address]
target_label: __param_target
- target_label: __address__
replacement: 192.168.10.100:9222
EOF
通过 consul_sd_configs
配置用于自动发现的 Consul 服务地址,服务名为[],我们通过relabel_configs的过滤规则只接收指定的exporter
curl -X POST http://localhost:9090/-/reload
配置完成后重新启动 Prometheus,然后重新查看 Prometheus 页面上的 targets
页面,验证上面的配置是否存在:
http://192.168.10.14:9090/targets?search=
正常情况下是可以看到会有一个 exporter
的任务,下面有 2 个自动发现的抓取目标。
1.5 创建添加脚本
prometheus上使用预先准备好的脚本,一次添加多个targets:
cat >/data/consul/api.sh <<"EOF"
#nginx
curl -X PUT -d '{"id": "nginx1","name": "nginx_exporter","address": "192.168.10.100","port": 9113,"tags": ["exporter"],"meta": {"job": "nginx_exporter","instance": "test服务器","env":"test"},"checks": [{"http": "http://192.168.10.100:9113/metrics", "interval": "5s"}]}' http://localhost:8500/v1/agent/service/register #rabbitmq
curl -X PUT -d '{"id": "rabbitmq1","name": "rabbitmq_exporter","address": "192.168.10.100","port": 9419,"tags": ["exporter"],"meta": {"job": "rabbitmq_exporter","instance": "test服务器","env":"test"},"checks": [{"http": "http://192.168.10.100:9419/metrics", "interval": "5s"}]}' http://localhost:8500/v1/agent/service/register #redis
curl -X PUT -d '{"id": "redis1","name": "redis_exporter","address": "192.168.10.100","port": 9121,"tags": ["exporter"],"meta": {"job": "redis_exporter","instance": "test服务器","env":"test"},"checks": [{"http": "http://192.168.10.100:9121/metrics", "interval": "5s"}]}' http://localhost:8500/v1/agent/service/register #mongodb
curl -X PUT -d '{"id": "mongodb1","name": "mongodb_exporter","address": "192.168.10.100","port": 9216,"tags": ["exporter"],"meta": {"job": "mongodb_exporter","instance": "test服务器","env":"test"},"checks": [{"http": "http://192.168.10.100:9216/metrics", "interval": "5s"}]}' http://localhost:8500/v1/agent/service/register #mysql
curl -X PUT -d '{"id": "mysql1","name": "mysqld_exporter","address": "192.168.10.100","port": 9104,"tags": ["exporter"],"meta": {"job": "mysqld_exporter","instance": "test服务器","env":"test"},"checks": [{"http": "http://192.168.10.100:9104/metrics", "interval": "5s"}]}' http://localhost:8500/v1/agent/service/register #cadvisor
curl -X PUT -d '{"id": "cadvisor1","name": "cadvisor","address": "cadvisor","port": 8080,"tags": ["exporter"],"meta": {"job": "cadvisor","instance": "Prometheus服务器","env":"test"},"checks": [{"http": "http://192.168.11.61:8080/metrics", "interval": "5s"}]}' http://localhost:8500/v1/agent/service/register
curl -X PUT -d '{"id": "cadvisor2","name": "cadvisor","address": "192.168.10.100","port": 8080,"tags": ["exporter"],"meta": {"job": "cadvisor","instance": "test服务器","env":"test"},"checks": [{"http": "http://192.168.10.100:8080/metrics", "interval": "5s"}]}' http://localhost:8500/v1/agent/service/register #springboot
curl -X PUT -d '{"id": "springboot1","name": "springboot","address": "192.168.10.100","port": 8081,"tags": ["springboot"],"meta": {"job": "springboot","instance": "test服务器","env":"test"},"checks": [{"http": "http://192.168.10.100:8081/actuator/prometheus", "interval": "5s"}]}' http://localhost:8500/v1/agent/service/register #process_exporter
curl -X PUT -d '{"id": "process1","name": "process_exporter","address": "192.168.10.100","port": 9256,"tags": ["exporter"],"meta": {"job": "process_exporter","instance": "test服务器","env":"test"},"checks": [{"http": "http://192.168.10.100:9256/metrics", "interval": "5s"}]}' http://localhost:8500/v1/agent/service/register #http
curl -X PUT -d '{"id": "http1","name": "blackbox_http","address": "https://www.jd.com","tags": ["blackbox_http"],"checks": [{"http": "http://192.168.10.100:9115", "interval": "5s"}]}' http://localhost:8500/v1/agent/service/register #tcp
curl -X PUT -d '{"id": "tcp1","name": "blackbox_tcp","address": "192.168.11.61:9090","tags": ["blackbox_tcp"],"checks": [{"http": "http://192.168.10.100:9115", "interval": "5s"}]}' http://localhost:8500/v1/agent/service/register #icmp
curl -X PUT -d '{"id": "icmp1","name": "blackbox_icmp","address": "192.168.10.100","tags": ["blackbox_icmp"],"checks": [{"http": "http://192.168.10.100:9115", "interval": "5s"}]}' http://localhost:8500/v1/agent/service/register #domin
curl -X PUT -d '{"id": "domain1","name": "domain_exporter","address": "baidu.com","tags": ["domain"],"checks": [{"http": "http://192.168.10.100:9222", "interval": "5s"}]}' http://localhost:8500/v1/agent/service/register
EOF
# 新增domin:id和adress需要修改
curl -X PUT -d '{"id": "domain2","name": "domain_exporter","address": "9you.com","tags": ["domain"],"checks": [{"http": "http://192.168.10.100:9222", "interval": "5s"}]}' http://localhost:8500/v1/agent/service/register
执行脚本
sh /data/consul/api.sh # 检查
http://192.168.10.14:9090/targets?search=
# 服务注册
http://192.168.10.14:8500/ui/dc1/services
1.6 consul删除服务
curl --request PUT http://127.0.0.1:8500/v1/agent/service/deregister/ID # 服务ID就是例如:"id": "domain2",id不能重复;微服务ID
二、ConsulManager
1、ConsulManager需要依赖Consul
,请先完成Consul的部署。(暂时最高支持Consul v1.14.5)(docs/Consul部署说明.md)
2、使用docker-compose
来部署ConsulManager
下载:wget https://starsl.cn/static/img/docker-compose.yml(仓库根目录下docker-compose.yml)
vim docker-compose.yml
version: "3.2"
services:
flask-consul:
image: swr.cn-south-1.myhuaweicloud.com/starsl.cn/flask-consul:latest
container_name: flask-consul
hostname: flask-consul
restart: always
volumes:
- /usr/share/zoneinfo/PRC:/etc/localtime
environment:
consul_token: xxxxx-xxxxx-xxxxx
consul_url: http://192.168.10.14:8500/v1
admin_passwd: password
log_level: INFO
nginx-consul:
image: swr.cn-south-1.myhuaweicloud.com/starsl.cn/nginx-consul:latest
container_name: nginx-consul
hostname: nginx-consul
restart: always
ports:
- "1026:1026"
volumes:
- /usr/share/zoneinfo/PRC:/etc/localtime
修改3个环境变量:
consul_token:consul的登录token(如何获取?),当然也可以不获取token,这样consul使用无密码登录(不安全)。
consul_url:consul的URL(http开头,/v1要保留)
admin_passwd:登录ConsulManager Web的admin密码
● 启动:docker-compose pull && docker-compose up -d
● 访问:http://{IP}:1026,使用配置的变量 admin_passwd 登录 参考:https://github.com/starsliao/ConsulManager/blob/main/docs/FAQ.md
http://192.168.10.14:1026,账号密码:admin/password
可以通过管理服务,新增和删除都行
新增
18.基于Consul的服务发现和ConsulManager管理的更多相关文章
- Go | Go 使用 consul 做服务发现
Go 使用 consul 做服务发现 目录 Go 使用 consul 做服务发现 前言 一.目标 二.使用步骤 1. 安装 consul 2. 服务注册 定义接口 具体实现 测试用例 3. 服务发现 ...
- .NET Core微服务之基于Consul实现服务治理
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.Consul基础介绍 Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发 ...
- 使用Consul做服务发现的若干姿势
从2016年起就开始接触Consul,使用的主要目的就是做服务发现,后来逐步应用于生产环境,并总结了少许使用经验.最开始使用Consul的人不多,为了方便交流创建了一个QQ群,这两年微服务越来越火,使 ...
- Consul做服务发现
使用Consul做服务发现的若干姿势 https://www.cnblogs.com/bossma/p/9756809.html 从2016年起就开始接触Consul,使用的主要目的就是做服务发现,后 ...
- Prometheus 基于文件的服务发现
Prometheus 基于文件的服务发现 官方文档:https://github.com/prometheus/prometheus/tree/master/discovery 服务发现支持: end ...
- .NET Core HttpClient+Consul实现服务发现
简介 随着.NET Core的不断发展与成熟,基于.NET Core实现微服务的解决方案也越来越多.这其中必然需要注册中心,Consul成为了.NET Core实现服务注册与发现的首选.类似的解决方案 ...
- Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用
写在前面 Api网关我们之前是用 .netcore写的 Ocelot的,使用后并没有完全达到我们的预期,花了些时间了解后觉得kong可能是个更合适的选择. 简单说下kong对比ocelot打动我的 ...
- prometheus — 基于文件的服务发现
基于文件的服务发现方式不需要依赖其他平台与第三方服务,用户只需将要新的target信息以yaml或json文件格式添加到target文件中 ,prometheus会定期从指定文件中读取target信息 ...
- .NET Core HttpClientFactory+Consul实现服务发现
前言 上篇文章.NET Core HttpClient+Consul实现服务发现提到过,HttpClient存在套接字延迟释放的问题,高并发情况导致端口号被耗尽引起服务器拒绝服务的问题.好在微软意识到 ...
- Prometheus基于Eureka的服务发现
Prometheus基于Eureka的服务发现 一.背景 二.实现步骤 1.eureka 客户端注册到prometheus中 2.prometheus中的写法 3.实现效果 三.完整代码 四.参考链接 ...
随机推荐
- 记录--Uni-app接入腾讯人脸核身
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 人脸核身功能有多种接入方式,其中包含微信H5.微信小程序.APP.独立H5.PC端.API接入6种方式. 我们的产品是使用uni-ap ...
- js中订阅发布模式bus
export default { list: {}, // 事件中心集中地 /** * 发布订阅 * @param {string} name 事件名 * @param [...args] */ $e ...
- KingbaseES 原生XML系列三--XML数据查询函数
KingbaseES 原生XML系列三--XML数据查询函数(EXTRACT,EXTRACTVALUE,EXISTSNODE,XPATH,XPATH_EXISTS,XMLEXISTS) XML的简单使 ...
- pymysql连接、关闭、查询,python如何操作mysql数据库
1 def get_conn(): 2 """ 3 :return: 连接,游标 4 """ 5 # 创建连接 6 conn = pymys ...
- Rust 实现日志记录功能
目录 log 日志库标准 简单示例 使用方法 库的开发者 应用开发者 日志库开发者 使用 log4rs 添加依赖 配置文件 运行项目 参考文章 log 日志库标准 log 是 Rust 的日志门面库, ...
- SSE与AVX指令基础介绍与使用
SSE与AVX指令基础介绍与使用 SSE/AVX指令属于Intrinsics函数,由编译器在编译时直接在调用处插入代码,避免了函数调用的额外开销.但又与inline函数不同,Intrinsics函数的 ...
- 欢迎体验BotBattle!
目录 1.常规游玩 2.快速开始 3.规则介绍 3.推荐的示例代码 1.常规游玩 前往复制 最基础代码 到剪切板 这有助于您开始游戏,且对于您熟悉 Bot 代码的 I/O 进而创建其他 bot 很有意 ...
- Luogu P3294 背单词
观前须知 本题解全部内容遵循CC BY-NC-SA 4.0 Deed原则 更好的观看体验 点这里 笔者的博客主页 正文 Luogu P3294 [SCOI2016]背单词 笔者在刷题的时候看到了这道好 ...
- 1 CSS的引入方式
1 CSS的引入方式 CSS样式有三种不同的使用方式,分别是行内样式,嵌入样式以及链接式.我们需要根据不同的场合不同的需求来使用不同的样式. 行内样式 行内样式,就是写在元素的style属性中的样式, ...
- HMS Core Discovery第15期直播预告|构筑立体世界,共造沉浸式营销
[导读] AR技术,是一种将真实世界信息和虚拟世界信息"无缝"衔接的技术,现如今AR技术受到日益广泛的关注,在我们生活中发挥着重要的作用,并显示出巨大的潜力--它是如何改变我们观察 ...