如果 Docker 容器退出,GCP 会发出警报

Posted

技术标签:

【中文标题】如果 Docker 容器退出,GCP 会发出警报【英文标题】:GCP alert if Docker container exits 【发布时间】:2022-01-17 14:02:21 【问题描述】:

我们正在使用 Google Cloud Platform 及其服务 Compute Engine。我们在我们的一个虚拟机实例(它是 Compute Engine 的一部分)上安装了 Docker。我们可以在 GCP Monitoring 中设置一个警报以在容器退出时触发吗?

【问题讨论】:

当一个容器存在于哪里? 在属于 Compute Engine 的虚拟机上。 你必须编写一堆自定义代码。 如果这有效cloud.google.com/community/tutorials/docker-gcplogs-driver,然后使用基于日志的指标创建警报以通知您。 cloud.google.com/logging/docs/logs-based-metrics 谢谢@danyL 我在下面创建了一个基于此的 POC。 【参考方案1】:

是的。您必须使用云日志记录驱动程序配置 docker,创建基于日志的指标和针对该指标的警报策略。

解决方案:

使用云日志记录驱动程序配置 docker。

SSH 到您的实例。

以 root 身份运行此命令:dockerd --log-driver=gcplogs。这会将您的 docker 日志转发到 Google Cloud Logging。

如果运行容器优化的操作系统,请按照以下步骤操作:

echo '"log-driver":"gcplogs"' | sudo tee /etc/docker/daemon.json

sudo systemctl restart docker

尝试启动和退出容器。

这些是我们退出容器时生成的日志。请记住两个退出消息

创建基于日志的指标

转到日志记录 -> 选择基于日志的指标。

点击创建指标。

指标类型:计数器。在 Details 中,输入 Log Metric 名称(例如 mysite-container-exited)

在过滤器选择->构建过滤器下,复制以下代码

resource.type="gce_instance"

log_name="projects/myproject-12345/logs/gcplogs-docker-driver"myproject-12345 替换为您的项目名称。

jsonPayload.container.name="/mysite"mysite 更改为您的容器名称。

jsonPayload.message=~"exit$" 这是匹配 exit 作为一行中最后一个单词的正则表达式。

它应该看起来像这样。

创建提醒政策

转到监控 -> 选择警报。 点击创建策略。 单击选择指标并搜索您的指标名称(例如 mysite-container-exited)。 选择您的指标并单击应用。 将滚动窗口设置为 2 分钟,将滚动窗口功能设置为 count。点击下一步。 将警报触发器设置为任何违反时间序列,将阈值位置设置为高于阈值,将阈值设置为1。点击下一步。 选择一个通知频道来发送警报。如果不存在,请点击管理通知渠道并创建一个。 最简单的方法是为通知渠道添加电子邮件。 创建返回后,单击通知通道中的刷新图标并选择它。点击确定。 点击保存策略。

正如我们所见,每当我们退出容器时,每个容器都会向日志发出两个退出命令,这就是阈值设置为高于 1 的原因

您可以通过创建新指标并将jsonPayload.container.name="/mysite" 的值更改为您的容器名称来监控更多容器。

现在尝试启动和停止容器。您将在 2-3 分钟内收到电子邮件提醒。

【讨论】:

以上是关于如果 Docker 容器退出,GCP 会发出警报的主要内容,如果未能解决你的问题,请参考以下文章

docker 容器重启策略

docker常用操作命令

如何避免Docker容器启动脚本运行后自动退出

docker-compose up与docker-compose up -d

Docker 系列三(容器管理).

docker 启动 centos 镜像,容器会自动退出