我使用领事出口商将我的服务的健康状况和状态摄入普罗米修斯.我想在Consul中的服务和节点状态很关键时发出警报,然后在路由这些警报时使用从Consul中提取的标签.
我从这个讨论中了解到,服务标签可能会作为单独的指标导出,但我不确定如何将一个系列与另一个系列连接起来,因此我可以利用具有健康状态的标签.
例如,以下查询:
max(consul_health_service_status{status="critical"}) by (service_name, status,node) == 1
Run Code Online (Sandbox Code Playgroud)
可以回来:
{node="app-server-02",service_name="app-server",status="critical"} 1
Run Code Online (Sandbox Code Playgroud)
但是我也喜欢这个系列中的'env':
consul_service_tags{node="app-server-02",service_name="app-server",env="prod"} 1
Run Code Online (Sandbox Code Playgroud)
沿节点和service_name连接以将以下内容作为单个系列传递给Alertmanager:
{node="app-server-02",service_name="app-server",status="critical",env="prod"} 1
Run Code Online (Sandbox Code Playgroud)
然后我可以在我的路由中匹配'env'.
有没有办法做到这一点?它并不像我任何操作或功能那样让我能够像这样分组或加入.据我所知,标签已经需要是consul_health_service_status指标上的标签.
如何从外部访问consul UI?
我想访问consul UI写作
<ANY_MASTER_OR_SLAVE_NODE_IP>:8500
我尝试使用ssh隧道进行访问:ssh -N -f -L 8500:localhost:8500 root@172.16.8.194
然后如果我访问http:// localhost:8500 它可以工作,但它不是我想要的.我需要外部访问,没有ssh隧道.
我的config.json文件是下一个:
{
"bind_addr":"172.16.8.216",
"server": false,
"datacenter": "nyc2",
"data_dir": "/var/consul",
"ui_dir": "/home/ikerlan/dist",
"log_level": "INFO",
"enable_syslog": true,
"start_join": ["172.16.8.211","172.16.8.212","172.16.8.213"]
}
Run Code Online (Sandbox Code Playgroud)
有帮助吗?谢谢
我得到的问题是etcd/consul/$试图解决的问题.服务消费者需要与服务提供商交谈,一个庞大流动的分布式系统需要一种机制来嫁给两者.
然而,"服务消费者在哪里满足他们的要求?"的问题.是旧的,IMO已经解决了MOM - 面向消息的中间件.
在MOM中,我们的想法是服务消费者并不关心服务提供商所在的位置.他们只是发送消息并让消息传递总线负责将消息路由到适当的消费者.可以有多个提供者都做同样的事情(基于队列的循环)或版本化的提供者(/ v1 /请求转到一个,/ v2 /请求转到另一个).
这是一个简单,强大的集成模式,它完全将服务接口与其实现分离.
然而,我看到了对发现服务提供商的这种奇怪的痴迷,这似乎在消费者和提供者之间创造了紧密的耦合(除了一些其他反模式之外).
那么,我在这里错过了什么?TIA.
我正在评估一些分布式键值存储,而etcd和Consul看起来非常有前途.我对服务发现,健康监控和配置服务感兴趣.
我喜欢Consul提供的额外功能,但是当服务出现故障时,我无法确定它是否仍然存在Key-Value存储区?似乎etcd提供了持久性.有什么建议?
我正试图从Eureka转到Consul进行服务发现并遇到问题 - 我的网关服务注册和我的客户服务注册,但网关服务不会自动将请求路由到客户服务.我在网关控制器中专门定义的路由,使用Feign客户端来正常工作,但之前(使用Eureka)我可以向任何路径发出请求,例如"/ customer-service/blah"(其中customer-service是注册名称)并且网关只是将请求转发到下游微服务.
这是我的网关bootstrap.yml(它在bootstrap而不是应用程序,因为我也使用consul for config)
spring:
application:
name: gateway-api
cloud:
consul:
config:
watch:
wait-time: 30
discovery:
prefer-ip-address: true
instanceId: ${spring.application.name}:${spring.application.instance_id:${random.value}}
Run Code Online (Sandbox Code Playgroud) 我正在使用consul的healthcheck功能,并且我不断获取这些"死"容器:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20fd397ba638 progrium/consul:latest "\"/bin/bash -c 'cur 15 minutes ago Dead
Run Code Online (Sandbox Code Playgroud)
什么是"死"容器?停止的容器何时变为"死"?
为了记录,我运行progrium/consul + gliderlabs/registrator图像+ SERVICE_XXXX_CHECK env变量来进行健康检查.它运行一个运行一个图像的健康检查脚本,每隔X秒,就像这样docker run --rm my/img healthcheck.sh
我对一般"死"意味着什么以及如何防止它发生感兴趣.另一个特殊的事情是我的死容器没有名字.
这是集装箱检查的一些信息:
"State": {
"Dead": true,
"Error": "",
"ExitCode": 1,
"FinishedAt": "2015-05-30T19:00:01.814291614Z",
"OOMKilled": false,
"Paused": false,
"Pid": 0,
"Restarting": false,
"Running": false,
"StartedAt": "2015-05-30T18:59:51.739464262Z"
},
Run Code Online (Sandbox Code Playgroud)
奇怪的是,只有每一个容器都会变得死亡并且不会被移除.
谢谢
编辑:查看日志,我发现了什么使容器停止失败:
Handler for DELETE /containers/{name:.*} returned error: Cannot destroy container 003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc:
Driver aufs failed to remove root filesystem 003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc:
rename /var/lib/docker/aufs/diff/003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc
/var/lib/docker/aufs/ diff/003876e41429013e46187ebcf6acce1486bc5011435c610bd163b159ba550fbc-removing:
device …Run Code Online (Sandbox Code Playgroud) 最近几种服务发现工具已经变得流行/"主流",我想知道在哪些主要用例中应该使用它们而不是传统的负载平衡器.
使用LB,您可以在平衡器后面聚集一堆节点,然后客户端向平衡器发出请求,然后平衡器(通常)将这些请求循环到集群中的所有节点.
通过服务发现(Consul,ZK等),您可以让集中的"共识"服务确定特定服务的哪些节点是健康的,并且您的应用程序连接到服务认为健康的节点.因此,虽然服务发现和负载平衡是两个独立的概念,但服务发现可为您提供负载平衡作为方便的副作用.
但是,如果负载均衡器(比如HAProxy或nginx)内置了监控和运行状况检查,那么您几乎可以将服务发现作为负载均衡的副作用!这意味着,如果我的LB知道不将请求转发到其集群中的不健康节点,那么这在功能上等同于共识服务器,告诉我的应用程序不要连接到不可靠的节点.
所以对我来说,服务发现工具感觉就像"6合1,其他半打"相当于负载均衡器.我在这里错过了什么吗?如果有人的应用程序架构完全基于负载平衡微服务,那么切换到基于服务发现的模型有什么好处?
load-balancing distributed-computing service-discovery consul microservices
我们的团队目前正在使用Consul探索Symfony2应用程序的服务发现概念.处于相对边界,讨论的方式很少.到目前为止,我们已经发现:
目前的想法是探索利用Consul观察者重新触发缓存构建以及外部参数.也就是说,如果服务半频繁地改变,那么对这种操作的开销存在一些担忧.
基于上述内容以及Consul/Symfony内部的知识,这是一种可行的方法吗?如果没有,为什么,有什么替代品?
service-discovery symfony 12factor consul runtime-configuration
我想将我的WebAPI注册到Consul服务发现中,为此,我应该提供我的WebAPI的URL(例如:http ://service1.com )和运行状况检查端点(http://service1.com/health/check)。如何获得该URL?
我找到了这段代码:
var features = app.Properties["server.Features"] as FeatureCollection;
var addresses = features.Get<IServerAddressesFeature>();
var address = addresses.Addresses.First();
var uri = new Uri(address);
Run Code Online (Sandbox Code Playgroud)
它返回127.0.0.1:16478而不是localhost:5600。我认为第一个由dotnet.exe使用,第二个是IIS,它将5600转发到16478。如何在Startup.cs中获得localhost:5600?
consul ×10
12factor ×1
c# ×1
docker ×1
etcd ×1
java ×1
key-value ×1
mom ×1
monitoring ×1
netflix-zuul ×1
persistence ×1
ports ×1
prometheus ×1
service ×1
spring-boot ×1
symfony ×1