如果 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 会发出警报的主要内容,如果未能解决你的问题,请参考以下文章