Prometheus(八)基于Consul的服务发现

基于Consul的服务发现

Consul是基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能,Consul提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能。之前我们通过Prometheus实现监控,当新增一个Target时,需要变更服务器上的配置文件,即使使用file_sd_configs配置,也需要登录服务器修改对应Json文件,会非常麻烦,不过Prometheus官方支持多种自动服务发现的类型,其中就支持Consul

1)安装consul

[root@localhost opt] ll consul_1.7.3_linux_amd64.zip 
-rw-r--r--. 1 root root 39717645 May 19 03:50 consul_1.7.3_linux_amd64.zip
[root@localhost opt] mkdir /usr/local/consul
[root@localhost opt] unzip consul_1.7.3_linux_amd64.zip -d /usr/local/consul/

2)启动consul

Consul必须启动agent才可使用,它是运行在Consul集群中每个成员上的守护进程,该进程负责维护集群中成员信息、注册服务、查询响应、运行检查等功能。Agent指令是Consul的核心,可以运行为Server或Client模式,操作如下:

[root@localhost ~] cd /usr/local/consul/
[root@localhost consul] ./consul agent -dev

==> Starting Consul agent...Version: 'v1.7.3'Node ID: '950de751-f475-f7b4-cc8e-624ef85be6e3'Node name: 'localhost.localdomain'Datacenter: 'dc1' (Segment: '')Server: true (Bootstrap: false)Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false

输出信息详解:
Version:当前Consul版本
Node name:节点名称,是agent的唯一名称,默认情况下,是计算机的主机名,可以使用命令行选项-node对其进行自定义
Datacenter:数据中心,是将agent配置运行的数据中心,Consul为多个数据中心提供一流的支持,你是要高效工作,必须将每个节点配置为报告其数据中心,可以使用命令行选项-datacenter设置数据中心,对于单DC配置,代理将默认为“dc1”
Server:agent是在Server还是Client模式下运行
Client Addr:客户端地址,是用于agent的客户端接口的地址,包含HTTP和DNS接口的端口,默认情况下,仅绑定到localhost,如果更改此地址端口,则在运行Consul成员等命令时,都必须制定-http-addr,以指示如何访问agent,其他应用程序也可以使用HTTP地址和端口
Cluster Addr:用子Consul集群中agent之间通信的地址和端口集,不是集群中所有的agent都必须使用相同的端口,但是这个地址必须能够被所有节点访问。
查看集群中所有节点的信息
./consul members
在这里插入图片描述
Consul运行需要监听至少6个不同的默认端口才能工作,这些默认端口使用TCP或UDP协议,说明如下;

端口说明
8003 TCPServer RPC端口,用于Client与Server通信或Server与Server通信
8301 TCP\UDP用于单个数据中心所有Client间通信
8302 TCP\UDP用于单个或多个数据中心之间Server信息同步
8400 TCP所有agent都要使用的端口,用于处理从CLI来的RPC
8500 TCP用于API接口或WEB UI访问
8600 TCP/UDP用于解析DNS查询

Consul常用命令

命令说明
agentConsul核心命令,运行agent来维护集群中成员信息、注册服务、查询响应、运行检查等功能
join通知Consul agent加入已经存在的集群中
members输出Consul agent目前所知道的所有成员以及其状态,节点的状态有alive、left、failed三种
reload重新加载agent的配置文件
monitor连接运行的agent且显示最近的日志
leave将agent关闭且移除所在集群,此后agent不会尝试再加入集群中
version打印Consul版本信息

Consul agent命令行选项

命令行选项说明
-bootstrap-expect在Server模式下提供数据中心内预测的Server数量。要么不设置该值,要么该值必须与机器中的其他Server一致。当设置该值后,Consul一致等到达到指定Server数目时才会引导整个集群,该选项不能和-bootstrap一起使用
-biind指定集群内部通信地址。集群中所有节点都可以访问该IP地址。默认是0.0.0.0时,如果主机有多个IPv4地址可用,Consul将在启动时退出并显示错误,这时需要指定对应的IP地址。
-config-dir配置文件目录,该目录下所有以.json结尾的文件都会被加载生效
-config-file指定特定需要加载的配置文件
-dev指定创建一个单节点的开发者模式的Consul环境
-data-dir指定一个目录用来存储agent的状态数据,所有的agent都需要该目录,特别是Server模式下更为重要,因为需要持久化集群的状态
-dc指定agent运行的datacenter的名称,默认是dc1
-json启动时要加入的另一个agent地址,可以多次指定多个agent地址。如果Consul无法加入任何指定的地址,则agent会启动失败,默认agent启动时不会加入任何节点
-node节点再集群中的名称,名称在集群中必须是唯一的。默认情况下为该计算机的主机名
-server指定agent运行在Server模式,每个数据中心至少有一个Server,官方推荐一个数据中心有3-5太Server最佳,但最多不要超过5个

3)服务注册发现

Consul服务注册提供了两种注册方法:一种是定义配置文件服务注册方法,即在配置文件中定义服务来进行注册;一种是HTTP API服务注册方法,即在启动后有服务自身通过调用API进行自我注册。

方法一:将本地运行的node_exporter通过服务的方式进行Consul服务注册。

[root@localhost consul] mkdir -p /usr/local/consul/consul.d
[root@localhost consul] cd /usr/local/consul/consul.d/
[root@localhost consul.d] vi node_exporter.json 
{
  "service": {
    "id": "node_exporter",
    "name": "node_exporter",
    "tags": [
      "dev_games"
    ],
    "address": "127.0.0.1",
    "port": 9100
  }
}

配置文件说明:
id:服务ID,可选提供项。若提供,则将其设置为name一致
name:服务名称,必须提供项。要求每个节点上的所有服务都有唯一的ID。
tags:服务的标签,自定义的可选提供项,用于区分主节点和辅助节点。
address:地址字段,用于指定特定于服务的IP地址。默认情况下,使用agent的IP地址,因而不需要提供这个地址。可以理解为服务注册到Consul使用的IP,服务发现是发现的此IP地址。
port:可以简单理解为服务注册到Consul使用的端口,服务发现也是发现address对应的端口。

编辑完配置文件后,若是首次创建使用,需要重新启动Consul服务进行加载生效。Ctrl+c停掉终端已经启动的开发者模式consul agent服务,之后再重新启动Consul服务:

[root@localhost consul] ./consul agent -dev -config-dir=/usr/local/consul/consul.d

4)服务注册成功后,我们可以通过HTTP API和DNS两种方式进行服务发现。(此方法用的相对较少,一般使用3小节里的配置文件的方式查看)

通过HTTP API的方式在Consul主机中获取服务列表,操作如下:

[root@localhost ~] curl http://localhost:8500/v1/catalog/service/node_exporter

在这里插入图片描述
使用Consul提供的内置DNS服务访问当前集群中的节点信息,操作如下:(如果没有dig需要安装bind-utils)

[root@localhost consul.d] dig @127.0.0.1 -p 8600 node_exporter.service.consul

在这里插入图片描述

5)与prometheus集成

[root@localhost prometheus] vi prometheus.yml

配置里127.0.0.1:8500 是指consul所在服务的端口
在这里插入图片描述

[root@prometheus prometheus] systemctl restart prometheus

这里发现的值就是consul.d/node_exporter.json 里配置的地址
在这里插入图片描述

6)监控机下线

当被监控服务节点故障失效或回收下线,需要删除被发现服务,否则prometheus的targets列表中仍然会显示该服务。
下面我们对以上发现的node_exporter服务进行删除操作

[root@localhost ~] curl --request PUT http://127.0.0.1:8500/v1/agent/service/deregister/node_exporter

在这里插入图片描述

在这里插入图片描述

这里的“node_exporter”为配置文件中service的id,若没有配置id,即为name内容。

7)监控机上线

被监控服务节点故障恢复后,可以使用命令:#./consul reload重新加载生效。

[root@localhost ~] cd /usr/local/consul/
[root@localhost consul] ./consul reload
[root@localhost consul] systemctl restart prometheus

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、prometheus简介 Prometheus是一个开源的系统监控和告警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF维护管理的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,prometheus支持多种exporter采集数据,还支持通过pushgateway进行数据上报,Prometheus再性能上可支撑上万台规模的集群。 二、prometheus架构图 三、prometheus组件介绍 1.Prometheus Server: 用于收集和存储时间序列数据。 2.Client Library: 客户端库,检测应用程序代码,当Prometheus抓取实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的当前状态发送到prometheus server端。 3.Exporters: prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端 4.Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉, slack等。 5.Grafana:监控仪表盘 6.pushgateway: 各个目标主机可上报数据到pushgatewy,然后prometheus server统一从pushgateway拉取数据。 四、课程亮点 五、效果图展示 六、讲师简介 先超(lucky):高级运维工程师、资深DevOps工程师,在互联网上市公司拥有多年一线运维经验,主导过亿级pv项目的架构设计和运维工作 主要研究方向: 1.云计算方向:容器 (kubernetes、docker),虚拟化(kvm、Vmware vSphere),微服务(istio),PaaS(openshift),IaaS(openstack)等2.系统/运维方向:linux系统下的常用组件(nginx,tomcat,elasticsearch,zookeeper,kafka等),DevOps(Jenkins+gitlab+sonarqube+nexus+k8s),CI/CD,监控(zabbix、prometheus、falcon)等 七、课程大纲

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值