+-

我每隔5分钟运行一个流程并检查以确保每个容器.如果容器没有响应,我可以将其标记为关闭.我有容器IP地址,我遍历每个IP并检查它是否响应ping.如果不是,我将其标记为已关闭.有一个更好的方法吗?我的代码:
@Transactional
@Scheduled(fixedRate = 1000 * 60) //5 min
public void monitorHosts(){
Iterable<Ncl> ncls = nclRepository.findAll();
for(Ncl ncl: ncls){
for(String host: ncl.getHosts()){
Boolean isHostAlive = isHostAlive(host);
if(!isHostAlive){
Ncl nclWorking = nclRepository.findOne(ncl.getUuid());
if(nclWorking != null){
Set<String> hosts = nclWorking.getHosts().stream().filter(x -> x.equals(host)).collect(Collectors.toSet());
nclWorking.getHosts().clear();
nclWorking = nclRepository.save(nclWorking);
nclWorking.setHosts(hosts);
nclRepository.save(nclWorking);
}
}
}
}
}
private Boolean isHostAlive(String host){
try{
InetAddress address = InetAddress.getByName(host);
boolean reachable = address.isReachable(10000);
return reachable;
} catch (Exception e){
e.printStackTrace();
return false;
}
}
最佳答案
它主要取决于您对容器信息的需求.
有许多可用的监控解决方案,可以监控您的容器,并在有问题时通知某人.
如果你必须在某些应用程序中使用此信息,那么你可以使用一些解决方案,如Consul.io,让他们检查你的服务状态,而不是容器(在大多数情况下,人们知道容器中的服务可用性,而不是容器本身).或者你可以使用docker-api for Java,因为ICMP协议并不总是一个很好的解决方案,特别是在分布式网络中.
点击查看更多相关文章
转载注明原文:java – 如何检测docker容器是否崩溃 - 乐贴网