开发者社区> 小柒2012> 正文

Consul+Prometheus系统监控之注册发现

简介: 缘起 前面几篇文章分别对系统服务、MySql以及Redis相关软件做了监控预警,但是大家有没有发现,在prometheus.yml里配置需要监听的服务时,我们需要按服务名手动写入,也就是说以后每增加一个服务,就得手动修改此配置,并重启promethues服务。
+关注继续查看

缘起

前面几篇文章分别对系统服务、MySql以及Redis相关软件做了监控预警,但是大家有没有发现,在prometheus.yml里配置需要监听的服务时,我们需要按服务名手动写入,也就是说以后每增加一个服务,就得手动修改此配置,并重启promethues服务。

那么我们如何做到动态的监听服务呢?相信不少接触过分布式框架Dubbo的小伙伴们都知道它是靠zookeeper做注册监听的,最近比较流行的Spring Cloud Netflix的Eureka,consul也是比较常用的注册中心。

参考官方文档consul_sd_config,可以发现promethues已经可以借助consul实现动态监听服务的功能了。

Consul简介

Consul是一个服务发现和注册的工具,其具有分布式、高扩展性能特点。

Consul主要包含如下功能:

  • 服务发现: 支持 http 和 dns 两种协议的服务注册和发现方式。
  • 监控检查: 支持多种方式的健康检查。
  • Key/Value存储: 支持通过HTTP API实现分布式KV数据存储。
  • 多数据中心支持:支持任意数量数据中心。

官方架构图:

Consul

使用场景

  • docker 实例的注册与配置共享
  • coreos 实例的注册与配置共享
  • vitess 集群
  • SaaS 应用的配置共享
  • 与 confd 服务集成,动态生成 nginx 和 haproxy 配置文件

优势

  • 使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接. 相比较而言, zookeeper 采用的是 Paxos, 而 etcd 使用的则是 Raft.
  • 支持多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟, 分片等情况等. zookeeper 和 etcd 均不提供多数据中心功能的支持.
  • 支持健康检查. etcd 不提供此功能.
  • 支持 http 和 dns 协议接口. zookeeper 的集成较为复杂, etcd 只支持 http 协议.
  • 官方提供web管理界面, etcd 无此功能.

角色

  • client: 客户端, 无状态, 将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群.
  • server: 服务端, 保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其他数据中心通讯. 每个数据中心的 server 数量推荐为 3 个或是 5 个.

Consul安装

下载并解压:

## 下载
wget  https://releases.hashicorp.com/consul/1.0.0/consul_1.0.0_linux_amd64.zip?_ga=2.31706621.2141899075.1510636997-716462484.1510636997
## 解压
unzip consul_1.0.0_linux_amd64.zip

以UI形式后台启动:

./consul agent -server -ui -bootstrap-expect 1 -data-dir /tmp/consul &

查看启动状态:

[root@iZ2ze74 home]# ./consul members
Node     Address   Status  Type    Build  Protocol  DC   Segment
iZ2ze74  172.17.120.102:8301  alive   server  1.0.0  2         dc1  <all>

说明:

  • Address:节点地址
  • Status:alive表示节点健康
  • Type:server运行状态是server状态
  • DC:dc1表示该节点属于DataCenter1

查看节点:

curl 127.0.0.1:8500/v1/catalog/nodes

Nginx代理访问:

 server {
        listen       80;
        server_name  consul.52itstyle.com;
        charset utf-8;
        location / {
            default_type text/html;
            proxy_pass http://127.0.0.1:8500;
        }
    }

界面:

UI

服务注册

使用http的方式,直接调用/v1/agent/service/register接口注册:

curl -X PUT -d '{"id": "MySql","name": "MySql","address": "localhost","port": 9104,"tags": ["dev"],"checks": [{"http": "http://localhost:9104/","interval": "5s"}]}'     http://localhost:8500/v1/agent/service/register

使用配置文件注册服务,创建文件夹/etc/consul.d
vi mysql.json内容如下:

{  
  "service":{  
    "id": "mysql",  
    "name": "mysql",  
    "address": "MySql",  
    "port": 9104,  
    "tags": ["dev"],  
    "checks": [  
        {  
            "http": "http://localhost:9104",  
            "interval": "5s"  
        }  
    ]  
  }  
}

指定文件启动:

./consul agent -server -ui -bootstrap-expect 1 -data-dir /tmp/consul   -config-dir /etc/consul.d &

如果文件变更,我们可以通过以下方式重新加载配置:

consul reload

我们也可以通过curl的方式注销服务:

curl  --request PUT  http://localhost:8500/v1/agent/service/deregister/MySql

配置promethues.yml:

global:
  scrape_interval:     15s
  evaluation_interval: 15s
  
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']
        labels:
          instance: prometheus
  - job_name: 'consul'
    consul_sd_configs:
#consul服务地址
      - server: 'localhost:8500'
#services是微服务名的数组,如果什么都不填,则默认取consul上注册的所有微服务
        services: ['redis', 'mysql', 'linux']

然后我们重启promethues,这时候只要Consul有服务注册,promethues就会检测到。

常用命令

常用命令command:

  • agent:运行一个consul agent
  • join:将agent加入到consul cluster
  • members:列出consul cluster集群中的members

常用选项option:

-data-dir

  • 作用:指定agent储存状态的数据目录
  • 这是所有agent都必须的
  • 对于server尤其重要,因为他们必须持久化集群的状态

-config-dir

  • 作用:指定service的配置文件和检查定义所在的位置
  • 通常会指定为"某一个路径/consul.d"(通常情况下,.d表示一系列配置文件存放的目录)

-config-file

  • 作用:指定一个要装载的配置文件
  • 该选项可以配置多次,进而配置多个配置文件(后边的会合并前边的,相同的值覆盖)

-dev

  • 作用:创建一个开发环境下的server节点
  • 该参数配置下,不会有任何持久化操作,即不会有任何数据写入到磁盘
  • 这种模式不能用于生产环境(因为第二条)

-bootstrap-expect

  • 作用:该命令通知consul server我们现在准备加入的server节点个数,该参数是为了延迟日志复制的启动直到我们指定数量的server节点成功的加入后启动。

-node

  • 作用:指定节点在集群中的名称
  • 该名称在集群中必须是唯一的(默认采用机器的host)
  • 推荐:直接采用机器的IP

-bind

  • 作用:指明节点的IP地址

-server

  • 作用:指定节点为server
  • 每个数据中心(DC)的server数推荐为3或5(理想的是,最多不要超过5)
  • 所有的server都采用raft一致性算法来确保事务的一致性和线性化,事务修改了集群的状态,且集群的状态保存在每一台server上保证可用性
  • server也是与其他DC交互的门面(gateway)

-client

  • 作用:指定节点为client
  • 若不指定为-server,其实就是-client

-join

  • 作用:将节点加入到集群

参考链接

https://www.consul.io

https://www.consul.io/api/

http://consul.la/intro/what-is-consul

http://kkkkkk.blog.51cto.com/468162/1914469

https://prometheus.io/docs/prometheus/latest/configuration/configuration/

作者: 小柒

出处: https://blog.52itstyle.com

分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Grafana+Prometheus系统监控之SpringBoot
前言 前一段时间使用SpringBoot创建了一个webhook项目,由于近期项目中也使用了不少SpringBoot相关的项目,趁着周末,配置一下使用prometheus监控微服务Springboot。
11677 0
Grafana+Prometheus系统监控之webhook
概述 Webhook是一个API概念,并且变得越来越流行。我们能用事件描述的事物越多,webhook的作用范围也就越大。Webhook作为一个轻量的事件处理应用,正变得越来越有用。 准确的说webhoo是一种web回调或者http的push API,是向APP或者其他应用提供实时信息的一种方式。
7032 0
Grafana+Prometheus系统监控之MySql
架构 grafana和prometheus之前安装配置过,见:Grafana+Prometheus打造全方位立体监控系统 MySql安装 MySql的地位和重要性就不言而喻了,作为开源产品深受广大中小企业以及互联网企业喜爱,所以这里我们也有必要对其进行相应的监控。
10102 0
Grafana+Prometheus系统监控之Redis
介绍 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。 Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
21907 0
Grafana+Prometheus系统监控之钉钉报警功能
介绍 钉钉,阿里巴巴出品,专为中国企业打造的免费智能移动办公平台,含PC版,Web版和手机版。智能办公电话,消息已读未读,DING消息任务管理,让沟通更高效;移动办公考勤,签到,审批,企业邮箱,企业网盘,企业通讯录,让工作更简单;酷公司,用钉钉,随时随地移动办公。
14661 0
实践教程之基于Prometheus+Grafana的PolarDB-X监控体系
PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。
34698 0
统一观测丨使用 Prometheus 监控 Nginx Ingress 网关最佳实践
统一观测丨使用 Prometheus 监控 Nginx Ingress 网关最佳实践
233 0
Prometheus+SpringBoot应用监控全过程详解
1. Prometheus是什么 Prometheus是一个具有活跃生态系统的开源系统监控和告警工具包。一言以蔽之,它是一套开源监控解决方案
132 0
统一观测丨使用 Prometheus 监控 SNMP,我们该关注哪些指标?
统一观测丨使用 Prometheus 监控 SNMP,我们该关注哪些指标?
132 0
统一观测丨使用 Prometheus 监控 E-MapReduce,我们该关注哪些指标?
统一观测丨使用 Prometheus 监控 E-MapReduce,我们该关注哪些指标?
139 0
+关注
小柒2012
一个程序员,欢迎骚扰!!!
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
Ingress日志中心介绍
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载