我的家庭服务器运行着大约15种不同的服务,每个服务都由一个Docker容器表示。根据开发人员实现Dockerfile的方式,某些服务具有运行状况检查,而大多数服务没有运行状况检查。

目前,我还没有办法确保这些服务保持运行正常。我确实设置了restart: always设置,但最坏的情况是,这意味着Docker如果无法启动或由于任何原因而崩溃,都会无休止地重启服务器。也许是docker pull在更新期间导致了问题。这些服务在白天无法启动或停止运行的原因可能有很多。

我想知道何时它们停止运行。也许是一封通知我的电子邮件,所以我可以解决问题,而不是仅在家人通知我或尝试使用该服务时才发现问题。

这种方式监视多个Docker容器的方法?我是否需要手写一堆执行ps的脚本来检查处理时间或其他内容?开箱即用的解决方案最好是很棒的。请注意,我使用Docker Compose进行所有操作,并且只有一台运行这些服务的物理机,因此无需担心复杂的设置。

评论

您的家庭服务器是在GCP / AWS / Azure /阿里云上运行的高可用性kubernetes集群...?

@ simbo1905不,我办公室里只运行着一个小巧的Intel NUC。

#1 楼

注意:仅根据文档回答,我对docker的使用并不多。 >
ps CLI:


Usage: events [options] [SERVICE...]

Options:
    --json      Output events as a stream of json objects


项目中每个容器的流容器事件。



docker-compose events CLI:


描述

从服务器获取实时事件


您将查找容器的docker events事件(来自扩展描述):


使用die从服务器获取实时事件。这些
事件根据Docker对象类型的不同而有所不同。 />

无论重新启动策略如何,都会产生该事件(来自Docker Events Explained): ,那里有大量监视工具,我还怀疑有些工具已经按照您的要求进行了操作。

还有什么?我可以在它们上创建警报。下次我的任何
容器决定呕吐而死时,我都可以收到有关它们的注定状态的短信。

#2 楼

如果您不介意在家中运行其他服务,那么建议您使用Grafana,dockerd-exporter和AlertManager尝试Prometheus。 -exporter,Grafana将以一种非常不错的方式显示该数据,而AlertManager将允许您根据需要配置警报。 />

还可以检查swarmprom项目。

#3 楼

如果大多数服务是网络服务,或者至少打开了一些管理TCP / IP端口,那么用curlnetcat监视它们可能不是最糟糕的解决方案。这就是像OpenShift这样的成熟的业务流程解决方案将如何做到的。因此,以某种递增的顺序:


检查TCP / IP端口是否已打开(netcat -z
检查端口是否已打开并以特定提示进行响应(netcat | grep HELLO) 。
检查端口是否使用特定的HTML响应(例如)(curl ... | grep <p>I'm alive</p>)。检查手写脚本是否返回true


#4 楼

您可以像使用其他任何计算机一样,使用check_mk监视容器的运行状况。在此处阅读有关内容。.

使用Check MK进行开源Docker监控

希望这会有所帮助。