consul watch使用详解
文章目录
- 1. 简介
- 2. docker安装consul
- 3. Handle
- 4. watch参数
- 5. Watches类型
- 5.1 key
- 第一种方法:
- 第二种方法:
- 第三种方法
- 第四种方法
- 第五种方法
- 5.2 keyprefix
- 5.3 services
- 5.4 nodes
- 5.5 service
- 5.6 check
1. 简介
- Watches是查看指定数据信息的一种方法,比如查看nodes列表、键值对、健康检查。当监控到更新时,可以调用外部处理程序——可以自定义。比如,发现健康状态发生变化可以通知外部系统健康异常。
- Watches在调用http api接口使用阻塞队列。Agent会自动调用合适的API接口俩监控数据的变化。
- Watches可以作为Agent配置的一部分。在Agent初始化时就运行,并且支持重新载入配置——运行时新添加或删除配置。
- 在任意情况下,watches的type都必须指定。Watch支持的每一个type需要的不同的参数,一些是必须的一些事非必须的。这些都是通过JSON来设置的。
2. docker安装consul
docker run -d --net=host --name=dev-consul consul agent -dev -client 0.0.0.0
3. Handle
Watch配置可以指定监控的数据。一旦数据发生变化,可以运行指定的处理程序——可以是任意可执行的程序。
处理程序可以从标准输入中读取输入,也可以读取json数据。数据格式依赖于watch类型。Watch类型与Json格式是想对象的。因为watch是直接调用HTTP API,因此输入数据要格式化。
4. watch参数
除了每一种类型支持的参数外,还有一些全局参数:
type - 监控的数据类型
key - 监控的键值数据的Key
handler_type - 通知类型,支持script和http
args - 配置通知类型为script的,执行命令,是一个数组,第一个元素是命令,后面第2个到第N个元素是命令的参数。
handler – 监控到数据变化后的调用程序。
http_handler_config参数说明:
path - 通知Url
method - http请求方法
header - 自定义Http请求头,没有可以忽略
timeout - 超时时间,10秒
tls_skip_verify - 是否跳过tls验证
5. Watches类型
不同的watch类型对应着不同HTTP API
- Key – 监视指定K/V键值对
- Keyprefix – Watch a prefix in the KV store
- Services – 监视服务列表
- nodes – 监控节点列表
- service – 监视服务实例
- checks- 监视健康检查的值
- event – 监视用户事件
5.1 key
Key watch类型通常用来监视指定键值对的变化。要求提供key参数
第一种方法:
注意: watch json配置要放在和配置文件同一个目录下才会生效
{"watches": [ {"type": "key","key": "foo/bar/baz","handler": "/usr/bin/my-key-handler.sh hello"
}]
}
root@node1:~/consul# cat /root/consul/demo/my-service-handler.sh
#!/bin/sh
echo "This is a test $1 !"
修改foo/bar/baz的值
consul kv putfoo/bar/baz 2
当watch发现foo/bar/baz
的值发生变化,便会执行一次/root/consul/demo/my-key-handler.sh
,
consul reload
#界面修改key:foo/bar/baz的值。,或者命令行修改 consul kv put foo/bar/baz 1
docker logs dev-consul -f --tail 200 #会看到执行/consul/demo/my-service-handler.sh输出
第二种方法:
{"watches": [{"type": "key","key": "foo/bar/baz","handler_type": "script","args": ["/consul/demo/my-service-handler.sh", "-redis"]}]
}
第三种方法
使用命令行:放在后台监控
$ consul watch -type key -key foo/bar/baz /usr/bin/my-service-handler.sh hello &
This is a test hello !
当然这会是命令行输出结果,而不是日志,当然你也可以自定义日志。
第四种方法
和配置文件写在一起也是可以的
{"datacenter": "dc1", "data_dir": "/consul/data", "ui": true,"watches": [{"type": "key","key": "foo/bar/baz","handler_type": "script","args": ["/usr/bin/my-service-handler.sh", "-redis"]}]
}
第五种方法
通过http API接口通知
{"datacenter": "dc1","data_dir": "/consul/data","ui": true,"watches": [{"type": "key","key": "foo/bar/baz","handler_type": "http","http_handler_config": {"path": "https://localhost:8000/watch","method": "POST","header": {"x-foo": ["bar", "baz"]},"timeout": "10s","tls_skip_verify": false}}]
}
当然http API https://localhost:8000/watch是我们自定义开发的。
5.2 keyprefix
第一种方法:
Keyprefix类型是用来监视KV存储中keys的前缀。必须提供prefix参数。
监视会返回匹配prefix的所有键值对。
{"watches": [{"type": "keyprefix","prefix": "foo/","handler": "/usr/bin/my-prefix-handler.sh"
}]
}
$ consul watch -typekeyprefix -prefix foo/ /usr/bin/my-prefix-handler.sh
5.3 services
监视一系列有效的service,无参数
内部接口/v1/catalog/services
命令行输出信息如下:
{"consul": [],"redis": [],"web": []
}
5.4 nodes
监视一系列有效的节点,无参数。
内部API:/v1/catalog/nodes
[{"Node": "nyc1-consul-1","Address": "192.241.159.115"},{"Node": "nyc1-consul-2","Address": "192.241.158.205"},{"Node": "nyc1-consul-3","Address": "198.199.77.133"},{"Node": "nyc1-worker-1","Address": "162.243.162.228"},{"Node": "nyc1-worker-2","Address": "162.243.162.226"},{"Node": "nyc1-worker-3","Address": "162.243.162.229"}
]
5.5 service
监控指定的单个service。必须提供参数service。tag和passingonly参数可选。
第一种方法
内部接口:/v1/health/service
{"type": "service","service": "redis","handler": "/usr/bin/my-service-handler.sh"
}
第二种方法
$ consul watch -typeservice -service redis /usr/bin/my-service-handler.sh
5.6 check
{"watches": [{"type": "checks","state": "critical","args": ["/root/hello.sh", "test"],"token":"AN8uRFhY"},{"type": "checks","state": "warning","args": ["/root/hello2", "test2"],"token":"AN8uRFhY"}]
}
consul watch使用详解相关推荐
- go使用grpc实现异步_(python、go)基于ETCD的gRPC分布式服务器实现详解
作者:Zarten知乎专栏:框架工具篇详解知乎ID: Zarten简介: 互联网一线工作者,尊重原创并欢迎评论留言指出不足之处,也希望多些关注和点赞是给作者最好的鼓励 ! 1-概述 gRPC框架是一个 ...
- Ocelot简易教程(三)之主要特性及路由详解
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9664977.html 上篇<Ocelot简易教程(二)之快速开始2>教大家如何快速跑起来一个 ...
- Linkerd实战(2)示例详解
概述 我们用一个step by step的基本示例来动手搭建一个linkerd代理. 服务提供方 为了简化示例,我们以ubuntu上的ngnix为例,搭建一个最基本的http服务作为服务提供方. su ...
- Redis基础与高可用集群架构进阶详解
一.NoSQL简介 1.问题引入 每年到了过年期间,大家都会自觉自发的组织一场活动,叫做春运!以前我们买票都是到火车站排队,后来呢,有了 12306,有了它以后就更方便了,我们可以在网上买票,但是带来 ...
- EndPoint详解
EndPoint详解 EndPoint主要用于暴露一些SpringMvc内部运行的信息,通常是通过SpringMvc的请求地址获取相关信息.如/health获取健康检查信息. 简单单元测试 @Test ...
- viper4android io错误,golang常用库之配置文件解析库-viper使用详解
一.viper简介 viper 配置管理解析库,是由大神 Steve Francia 开发,他在google领导着 golang 的产品开发,他也是 gohugo.io 的创始人之一,命令行解析库 c ...
- ShardingShpere分库分表5-ShardingSphere分布式事务详解
文章目录 一.ShardingJDBC分布式事务快速上手 LOCAL本地事务 XA事务快速上手 BASE柔性事务快速上手 seata部署方式: 客户端使用Base事务 二.分布式事务原理详解 XA事务 ...
- SpringCloud Gateway 详解
文章目录 一.网关简介 1.服务网关介绍 1.1 API网关介绍 1.2 网关主要功能 2.常用网关介绍 2.1 Nginx+Lua 2.2 Kong 2.3 Traefik 2.4 Zuul 二.S ...
- 分布式事务(Seata) 四大模式详解
前言 在上一节中我们讲解了,关于分布式事务和seata的基本介绍和使用,感兴趣的小伙伴可以回顾一下<别再说你不知道分布式事务了!> 最后小农也说了,下期会带给大家关于Seata中关于sea ...
最新文章
- 线段树/树状数组问题 | 问题集合
- python函数只有被调用才会执行_Python函数调用
- Discuz常见小问题-如何快速清除帖子
- ESFramework介绍之(16)―― Tcp数据自动发送器ITcpAutoSender
- linux下gem卸载,gem 安装卸载pod
- postman添加cookie
- 如何利用pandas将时间戳格式化日期字符串呢?
- [翻译 EF Core in Action] 1.5 关于NoSql
- 银行核心系统是什么?
- PandoraBox潘多拉无线桥接(中继)使用方法和无法使用解决----小米mini小米3路由
- 经纬度及其与坐标系的转换
- 如何清除浏览器历史记录-在Chrome,Firefox和Safari中删除浏览历史记录
- iPad作为Windows电脑副屏使用技巧(详细向)
- 大家都在努力,你凭什么不努力?
- 数据集成解决方案探讨
- 论文阅读笔记:MuTual: A Dataset for Multi-Turn Dialogue Reasoning
- 实现打印日历的一种方式(-,-)
- Spotify敏捷模式详解三部曲第三篇:工程文化
- 使用JS实现俄罗斯方块游戏
- DNS和代理服务器的介绍
热门文章
- VS2008C#Sqlserver2008数据库的连接以及增删改查
- github在linux安装教程
- 思维导图 基础篇(12)应用-文章分析-记忆法
- Windows驱动_WFP之三Callout驱动的操作
- python制作酒店系统_酒店前台管理系统需求分析
- 电脑螺旋丸html,modal_window.html
- 2009.11.01北京下雪了!
- 【Spring6】| GoF之代理模式(JDK动态代理和CGLIB动态代理)
- Android数据访问(一)——Asserts
- SQL数据库之索引优缺点