consul watch使用详解
  TEZNKK3IfmPf 2023年11月14日 24 0
 

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"
   }
  ]
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

TEZNKK3IfmPf