关于consul:prometheus结合consulconfd实现动态注册服务和动态更新配置告警规则

一、prometheus装置应用1.创立配置文件mkdir /opt/prometheus cd /opt/prometheus/vim prometheus.yml内容如下:global: scrape_interval: 60s #抓取数据的工夫距离 evaluation_interval: 60s #触发告警检测的工夫scrape_configs: - job_name: prometheus #工作名称 static_configs: #动态配置节点 - targets: ['localhost:9090'] labels: instance: prometheus #实例名称2.装置prometheusdocker run -d \ -p 9090:9090 \ -v /opt/prometheus/prometheus1.yml:/etc/prometheus/prometheus.yml \ -v /opt/prometheus/data:/prometheus \ prom/prometheus \3.拜访地址: http://localhost:9090/graph二、consul装置应用1.装置consuldocker run \ --name consul \ -p 8500:8500 \ -v /data/consul/conf/:/consul/conf/ \ -v /data/consul/data/:/consul/data/ \ -d consul拜访地址: http://ip:8500/graph(ip为你装置的服务器地址)2.应用consul首先理解consul+prometheus的大抵流程(1) 在服务器上装一个node节点(exporter节点),启动节点,例如mysql-exporter端口为9104(2) 将该服务器注册到consul的server中,在装置consul的服务器执行命令curl -X PUT -d '{"id": "test-exporter","name": "test-exporter","address": "ip","port": 9104,"tags": ["jvm-exporter"],"checks": [{"http": "http://ip:9104/metrics","interval":"5s"}]}' http://ip:8500/v1/agent/service/register name:consul的service注册名称id:consul的实例名称address:监控地址ipport:监控的端口号tags:标签名checks:查看的节点的门路(3) 在prometheus中配置服务主动发现,去读取consul中配置的服务器,只有consul有新的服务注册,prometheus也会更新节点,在prometheus.yml中批改为- job_name: 'consul-node-exporter' consul_sd_configs: - server: 'ip:8500' #consul的地址(4) 配置不同分类的job,对增加的标签进行正则表达式过滤,合乎则增加到相应job分类如上配置的毛病是,所有的注册节点都会归类到consul-node-exporter这个工作类别上面,有时候想对注册的服务进行分类,比方mysql为一类,oracle为一类,就要批改配置为: ...

April 18, 2023 · 2 min · jiezi

关于consul:不背锅运维配置管理和服务发现之Confd和Consul

Confd和Consul是什么鬼?Confd和Consul都是用于配置管理和服务发现的工具。https://www.consul.io/https://www.tail-f.com/confd-basic/ConfdConfd是一个轻量级的工具,用于治理分布式系统中的配置文件。它通过将配置文件和模板拆散来解决配置管理的挑战。Confd监督由Etcd、Zookeeper、Consul等后端存储的配置更改,而后依据定义的模板生成配置文件,并将其散发到零碎中的所有节点。Confd还反对从命令行或环境变量中读取配置参数,并将其注入到模板中。 在实践中,Confd能够用于治理诸如Nginx、Apache等Web服务器的配置文件,以及运行在Docker或Kubernetes容器中的应用程序的配置文件。Confd还能够通过与Vault等密钥管理工具的集成来提供平安的配置存储和传输。 ConsulConsul是一个功能强大的服务发现和配置管理平台。它提供了分布式KV存储、健康检查、DNS和HTTP API等性能,使得服务的发现和治理变得非常简单。Consul还反对多数据中心和平安通信,以保证系统的高可用性和安全性。 在实践中,Consul能够用于治理多种类型的服务,包含Web应用程序、数据库、音讯队列等。它还能够与容器编排工具(如Docker Compose和Kubernetes)和配置管理工具(如Ansible和Chef)等集成,提供全面的配置管理和服务发现解决方案。 总的来说,Confd和Consul都是十分有用的工具,用于治理分布式系统的配置和服务发现。抉择哪个工具取决于您的具体需要,例如您须要治理什么类型的服务,以及您心愿在零碎中应用哪些特定的性能。利用场景Confd和Consul都是用于分布式系统配置管理和服务发现的工具,实用于许多不同的利用场景。以下是一些可能的利用场景: Confd配置Web服务器:Confd能够用于治理Nginx、Apache等Web服务器的配置文件,并主动将配置文件散发到所有节点。配置容器:Confd能够在Docker或Kubernetes容器中运行,并将容器所需的配置文件动静生成并散发到容器中的应用程序。集成密钥管理工具:Confd能够与Vault等密钥管理工具集成,提供平安的配置存储和传输。治理分布式系统配置:Confd能够治理分布式系统中的各种配置文件,例如数据库配置、应用程序配置等。Consul服务发现:Consul提供了弱小的服务发现性能,能够帮忙应用程序发现和连贯到其余服务。治理多数据中心环境:Consul能够治理多个数据中心之间的服务发现和配置管理,以保证系统的高可用性。DNS和HTTP API:Consul提供了DNS和HTTP API接口,以便应用程序能够轻松地发现和连贯到其余服务。健康检查:Consul能够查看服务的衰弱状态,并在服务呈现故障时主动将流量路由到衰弱的节点上。简而言之,Confd和Consul能够用于治理各种类型的配置文件和服务发现需要,实用于各种分布式系统和利用场景。抉择哪种工具取决于您的具体需要和偏好。Confd+Consul联合应用Confd和Consul能够提供更全面和灵便的分布式系统配置管理和服务发现解决方案,实用于许多不同的利用场景。以下是一些可能的联合应用场景: 在Docker容器中运行Confd,应用Consul来发现和治理容器中运行的服务。这种办法能够提供动静配置生成和散发以及服务发现和健康检查性能。应用Confd从后端存储(如Etcd、Zookeeper、Consul等)中获取配置信息,并应用Consul来发现服务和治理它们的衰弱状态。这种办法能够提供动静配置生成和散发以及服务发现和健康检查性能。应用Consul的KV存储来存储应用程序的配置信息,而后应用Confd从KV存储中获取配置并将其注入到应用程序的模板中。这种办法能够提供平安的配置存储和传输,同时提供灵便的配置选项。应用Confd和Consul来治理多个数据中心之间的服务发现和配置管理,以保证系统的高可用性。这种办法能够提供跨数据中心的服务发现和配置管理性能。将Confd和Consul与Vault等密钥管理工具联合应用,提供平安的配置存储和传输。这种办法能够确保应用程序的配置信息失去充沛爱护。联合应用Confd和Consul能够提供更全面和灵便的配置管理和服务发现解决方案,实用于各种分布式系统和利用场景。抉择哪种联合应用办法取决于您的具体需要和偏好。实战上面分享两个Confd和Consul的简略实战,心愿能起到抛砖引玉的成果。案例1场景:应用Confd、Consul和nginx来管理应用程序的动静配置和负载平衡:正式开撸装置etcd或Consul、Confd和nginx。创立一个Confd配置文件,指定etcd或Consul的地址和端口等信息,并指定要监督的配置文件的门路和格局。例如,以下是一个Confd配置文件的示例:[template]src = "/path/to/nginx.conf.tmpl"dest = "/etc/nginx/nginx.conf"keys = [  "/nginx/upstream/backend1/server1",  "/nginx/upstream/backend1/server2",]此配置指定将从etcd或Consul中监督/nginx/upstream/backend1/server1和/nginx/upstream/backend1/server2键,并应用nginx.conf.tmpl模板生成配置文件nginx.conf。 创立一个nginx.conf.tmpl模板文件,其中蕴含应用程序的负载平衡配置数据。例如:http {  upstream backend {    server {{key "/nginx/upstream/backend1/server1"}};    server {{key "/nginx/upstream/backend1/server2"}};  }  server {    listen 80;    server_name example.com;    location / {      proxy_pass http://backend;    }  }}此模板文件应用Confd的key函数将/nginx/upstream/backend1/server1和/nginx/upstream/backend1/server2键的值注入到nginx.conf中的upstream局部。 启动Confd,并应用以下命令指定下面创立的Confd配置文件:confd -config-file /path/to/confd.conf此命令将启动Confd并开始监督指定的键。 启动nginx,并指定应用生成的配置文件nginx.conf:nginx -c /etc/nginx/nginx.conf此命令将启动nginx,并应用生成的配置文件。 在Consul中注册后端服务,并增加服务器地址和端口。例如,以下是一个应用Consul API注册后端服务并增加服务器地址和端口的示例:curl -X PUT -d @service.json http://localhost:8500/v1/agent/service/registercurl -X PUT -d 'backend1.example.com:8080' http://localhost:8500/v1/kv/nginx/upstream/backend1/server1curl -X PUT -d 'backend2.example.com:8080' http://localhost:8500/v1/kv/nginx/upstream/backend1/server2此命令将注册一个名为backend1的服务,并增加服务器地址和端口到Consul的键/值存储中。 在浏览器中拜访nginx的IP地址或域名,例如example.com,以测试负载平衡性能。这个案例简略演示了如何应用Confd、Consul和nginx来实现动静配置和负载平衡性能,能够依据理论需要进行批改和扩大。案例2场景:在一个基于Docker的分布式应用程序中,咱们应用Confd从Consul中获取Nginx的配置信息,并将配置文件注入到Nginx容器中,以便Nginx能够自动更新其配置并反向代理到其余服务。正式开撸装置Docker、Confd和Consul。启动Consul服务器:consul agent -server -bootstrap-expect=1 -data-dir=consul-data -ui -bind=<ip-address>在Consul中注册其余服务,例如一个名为web-service的Web服务:consul services register -name web-service -port 8080在Consul中存储Nginx的配置信息,例如一个名为nginx.conf的配置文件:consul kv put nginx.conf 'server {    listen 80;    server_name example.com;    location / {        proxy_pass http://web-service:8080;    }}'启动Nginx容器,并在容器中运行Confd:docker run -d --name nginx \  -p 80:80 \  -v /etc/nginx/conf.d \  -e CONSUL_HTTP_ADDR=<ip-address>:8500 \  nginxdocker run -d --name confd \  -e CONSUL_HTTP_ADDR=<ip-address>:8500 \  -v /etc/nginx/conf.d \  confd -backend=consul -node=<ip-address>:8500 -watch在Nginx容器中,创立一个Confd模板文件nginx.conf.tmpl,用于将Consul中存储的配置信息注入到Nginx配置文件中:server {    listen 80;    server_name example.com;    {{range services "web-service"}}    location / {        proxy_pass http://{{.Address}}:{{.Port}};    }    {{end}}}在Nginx容器中,创立一个Confd配置文件nginx.toml,指定Confd如何将Consul中的配置信息注入到Nginx配置文件中:[template]src = "nginx.conf.tmpl"dest = "/etc/nginx/conf.d/nginx.conf"keys = [    "nginx.conf",]check_cmd = "/usr/sbin/nginx -t -c /etc/nginx/nginx.conf"reload_cmd = "/usr/sbin/nginx -s reload -c /etc/nginx/nginx.conf"启动Confd容器,并将Confd模板和配置文件挂载到Nginx容器中:$ docker run -d --name confd \  -v /etc/nginx/conf.d \  -v /etc/confd/conf.d \  -v /etc/confd/templates \  --link nginx \  confd -backend=consul -node=<ip-address>:8500 -watch拜访Nginx的Web服务,查看是否能够胜利反向代理到其余服务。本文转载于(喜爱的盆友关注咱们):https://mp.weixin.qq.com/s/daytnZIst7s88HUdag1x_Q

March 7, 2023 · 1 min · jiezi

关于consul:Apache-APISIX-集成-Consul-KV服务发现能力再升级

背景信息Consul 是一个服务网格解决方案,其外围之一的 Consul KV 是一个分布式键值数据库,主要用途是存储配置参数和元数据,同时也容许用户存储索引对象。 在微服务架构模式下,当扩容、硬件故障等导致上游服务产生变动的状况呈现时,通过手动撰写配置,保护上游服务信息的形式,会导致保护老本陡增。对此,Apache APISIX 提供了服务发现注册核心的性能,实现动静获取最新的服务实例信息,以升高用户的保护老本。 目前,Apache APISIX 借由社区奉献的 consul_kv 模块,反对了基于 Consul KV 的服务发现注册核心。 插件工作原理Apache APISIX 利用 Consul KV 分布式键值存储能力的 consul_kv 模块,解耦了服务的提供者和消费者,实现了服务发现注册核心的两大外围性能。 服务注册:服务提供者向注册核心注册服务。服务发现:服务消费者通过注册核心查找服务提供者的路由信息。在此基础上构建的 Apache APISIX 将更灵便地适应现有的微服务架构,更好地满足用户需要。 如何应用本文中的测试环境均应用 docker-compose 在 Docker 中搭建。 下载 Apache APISIX。# 拉取 apisix-docker 的 Git 仓库git clone https://github.com/apache/apisix-docker.git 创立 Consul 文件夹和配置文件。# 创立 consul 文件夹mkdir -p ~/docker-things/consul/ && cd "$_" # 创立配置文件touch docker-compose.yml server1.json批改 docker-compose.yml 文件。version: '3.8'services: consul-server1: image: consul:1.9.3 container_name: consul-server1 restart: always volumes: - ./server1.json:/consul/config/server1.json:ro networks: - apisix ports: - '8500:8500' command: 'agent -bootstrap-expect=1'networks: apisix: external: true name: example_apisix批改 server1.json 文件。{ "node_name": "consul-server1", "server": true, "addresses": { "http": "0.0.0.0" }}在 Apache APISIX 中的配置文件 apisix_conf/config.yaml 增加 Consul 的相干配置信息。# config.yml# ...other configdiscovery: consul_kv: servers: - "http://consul-server1:8500" prefix: "upstreams"启动 Apache APISIX 和 Consul。# 进入 example、consul 文件夹,顺次启动 APISIX、Consuldocker-compose up -d将测试服务注册到 Consul。example 蕴含了两个 Web 服务,你能够间接应用这两个服务进行测试。# 查看 example 的 docker-compose.yml 就能够看到两个 Web 服务$ cat docker-compose.yml | grep web# 输入web1: - ./upstream/web1.conf:/etc/nginx/nginx.confweb2: - ./upstream/web2.conf:/etc/nginx/nginx.conf确认 Web 服务的 IP 地址。$ sudo docker inspect -f='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(sudo docker ps -aq) | grep web# 输入/example-web1-1 - 172.26.0.7/example-web2-1 - 172.26.0.2在终端中对 Consul 的 HTTP API 进行申请以注册测试服务。# 应用对应的 IP 进行注册curl \ -X PUT \ -d ' {"weight": 1, "max_fails": 2, "fail_timeout": 1}' \ http://127.0.0.1:8500/v1/kv/upstreams/webpages/172.26.0.7:80 curl \ -X PUT \ -d ' {"weight": 1, "max_fails": 2, "fail_timeout": 1}' \ http://127.0.0.1:8500/v1/kv/upstreams/webpages/172.26.0.2:80其中,/v1/kv/ 后的门路依照 {Prefix}/{Service Name}/{IP}:{Port} 的格局形成。 ...

March 8, 2022 · 2 min · jiezi

关于consul:如何安装部署Consul

Consul蕴含多个组件,然而作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下要害个性: 1、服务发现 Consul的客户端可用提供一个服务,比方 api 或者mysql ,另外一些客户端可用应用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务. 2、健康检查 Consul客户端可用提供任意数量的健康检查,指定一个服务(比方:webserver是否返回了200 OK 状态码)或者应用本地节点(比方:内存应用是否大于90%). 这个信息可由operator用来监督集群的衰弱.被服务发现组件用来防止将流量发送到不衰弱的主机. 3、Key/Value存储 应用程序可用依据本人的须要应用Consul的层级的Key/Value存储.比方动静配置,性能标记,协调,首领选举等等,简略的HTTP API让他更易于应用. 多数据中心: Consul反对开箱即用的多数据中心.这意味着用户不须要放心须要建设额定的形象层让业务扩大到多个区域. Consul面向DevOps和利用开发者敌对.是他适宜古代的弹性的基础设施. 上面咱们就来学习一下如何简略疾速的装置部署好Consul服务 1.找到Consul的装置服务可点击试用。 2.装置部署增加节点-抉择版本-填写参数-部署胜利 装置部署过程简略又疾速,具体的装置教程如下: 如何增加节点?https://www.bilibili.com/vide...如何装置部署Consul?https://www.bilibili.com/vide...

September 26, 2021 · 1 min · jiezi

SpringCloud-初始化父子项目并集成-Consul-服务发现

SpringCloud 初始化父子项目并集成 Consul 服务发现准备工作IDEA2020.1JDK1.8Spring Cloud版本:Hoxton.SR5Spring Boot 版本:2.3.0.RELEASE安装Consulwindows安装:https://www.yuque.com/ekko/ap...Mac安装:https://www.yuque.com/ekko/ap...开始简介:consul的功能 服务发现Key/Value存储健康检查今天我们主要来学习实践服务发现功能先到 https://start.spring.io/ 初始化一个父项目生成之后解压,先用IDE编辑文件修改pom.xml,如下图,在底部 </build> 标签下切换国内阿里源 <repositories> <!--阿里云主仓库,代理了maven central和jcenter仓库--> <repository> <id>aliyun</id> <name>aliyun</name> <url>https://maven.aliyun.com/repository/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <!--阿里云代理Spring 官方仓库--> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://maven.aliyun.com/repository/spring</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>保存,然后使用 IDEA 打开,等Maven加载完毕 新建子项目右击项目名称,New -> Module 包名自定义,不一定非要相同,这里的包名或许后面也要改掉下一步选择包,先跳过,点击Finish 完成 关联父子项目在父 Module的pom.xml中的<dependencies>标签上部新增 <modules> <module>pro-service</module> </modules>如图示在子项目 pro-service 中的 <modelVersion>4.0.0</modelVersion> 标签后追加 <parent> <groupId>com.github.springtools</groupId> <artifactId>SpringCloudPro</artifactId> <version>0.0.1</version> </parent>到这里会发现Maven找不到一些Spring Boot的依赖在父项目增加管理依赖版本号的定义最终的父项目pom.xml <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.github.springtools</groupId> <artifactId>SpringCloudPro</artifactId> <version>0.0.1</version> <name>SpringCloudPro</name> <description>父项目</description> <packaging>pom</packaging> <properties> <java.version>1.8</java.version> <spring-cloud.version>Hoxton.SR5</spring-cloud.version> <spring-boot.version>2.3.0.RELEASE</spring-boot.version> </properties> <modules> <module>pro-service</module> </modules> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> <!--监控--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!--支持Spring Boot 2.3.X--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <!--阿里云主仓库,代理了maven central和jcenter仓库--> <repository> <id>aliyun</id> <name>aliyun</name> <url>https://maven.aliyun.com/repository/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <!--阿里云代理Spring 官方仓库--> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://maven.aliyun.com/repository/spring</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories></project>子项目pom.xml ...

June 3, 2020 · 2 min · jiezi