一、问题
1、服务不可用我们无法第一时间知道那个服务不可用,只有通过人为(用户)的触发才能发现服务不可用,然后信息同步给我们,我们再去排查问题,这样一来会使用户对我们系统的失去安全感。
2、运维这边没有没有更好的运维系统来实现对服务监控。
Q:为什么服务从注册中心掉线。
A:第一层就是健康检查未通过,其次就是造成健康检查未通过的原因,服务宕机、网络波动、服务错误,都可能会造成服务健康检查不通过。
二、思路:
从源头着手,注册中心就是问题源头,只要我们从注册中心知道那个服务掉线了,及可用情况就可以,发起作业报警,通知相关人员处理。
三、解决方案:
1、那就开始着手了解下consul,通过从consul官网了解到watches好像符合我们的目的,他的目的就是监视各个服务的状态其中还支持http回调。
Watch Types
The following types are supported. Detailed documentation on each is below:
key - Watch a specific KV pair
keyprefix - Watch a prefix in the KV store
services - Watch the list of available services
nodes - Watch the list of nodes
service- Watch the instances of a service
checks - Watch the value of health checks
event - Watch for custom user events
2、通过了解watch我们需要增加consul的配置文件,但是问题来了,通过测试他这个监控是获取当前服务状态信息,他对掉线的服务不会获取到更多的信息,例如多实例情况下当我们服务A有两个实例分别是实例1和实例2,服务A两个实例注册到注册中心,我们可以获取到服务A实例信息,但是服务A的实例1下线了我们可以获取到服务信息,当实例2下线了我们就无法获取到实例的信息了,至少这里是获取不到的,总的来说,多实例情况下,当最后一个实例掉线我们无法获取到实例信息,单实例更糟糕,一个掉线我们就什么也拿不到,什么也做不了,至少通过这种方式无法达到我们的目的,小伙伴可以测试下。
3、起始是想通过services监视类型来做到一个配置监视所有,经过尝试不支持会出现上面的问题,既然不行就要换下方式,我们使用service我们可以在配置文件中增加扩展参数,这样服务下线我们就可以知道那个服务下线了,配置文件如下 每个服务都要配置(比较麻烦的是每个服务都要配置)
新建config.json放到consul配置文件目录中
{
"datacenter": "dc1",
"data_dir": "D:\\Softwear\\consul_1.2.2_windows_amd64",
"ui": true,
"watches": [{
"type": "service", ###监视类型
"service": "consul-demo-02", ###要监视服务名称
"handler_type": "http",###回调类型
"http_handler_config": {
"path": "http://localhost:9609/notice/wechat/services",###回调通知地址
"method": "POST",###回调请求方式
"header": {###header参数
"name": ["consul-demo-02"], ###服务名称 为了确定知道
"environmental":["线上环境"], ### 所在环境
"member":["2"] ###服务实例数量
}
}
}
]
}
业务流程图
项目git地址https://github.com/fhlkds/service-watches-monitoring
使用步骤:
1、启动启动consul 命令:consul agent -config-dir=配置文件目录 -dev
我的启动命令是 consul agent -config-dir=D:/Softwear/consul_1.2.2_windows_amd64/wechat -dev
然后启动consul-watches-notice-service服务
收到邮件