如何使用 slack/grafana 或任何其他自动化方式重新启动 docker 容器?

Posted

技术标签:

【中文标题】如何使用 slack/grafana 或任何其他自动化方式重新启动 docker 容器?【英文标题】:How to restart a docker container using slack/grafana or any other automated way? 【发布时间】:2021-10-07 21:16:01 【问题描述】:

当我们在 slack 上收到来自 grafana 的警报时,我想重新启动使用 docker-compose 创建的 docker 容器。

指标位于我的服务器端点 url/metrics.json 上,我将其导出到 prometheus 并向 slack 发送警报。

有没有什么简单的方法可以在警报期间重新启动容器?

【问题讨论】:

为什么不能在容器级别直接使用Docker HEALTHCHECK @JanGaraj 因为指标来自其他容器,需要重新启动其他容器。示例 - 容器 B 公开了一些有关整个过程的指标,如果值在 10 分钟内保持为 0,我需要重新启动容器 A。 【参考方案1】:

指标位于我的服务器端点 url/metrics.json 上,我将其导出到 prometheus 并向 slack 发送警报。

如果您已经在 Prometheus 中使用 Alertmanger,请使用 prometheus-am-executor:

prometheus-am-executor 是一个 HTTP 服务器,它从 Prometheus Alertmanager 接收警报并执行给定的命令,并将警报详细信息设置为环境变量。

您在alertmanager.yml 中将其配置为接收器。除了您先前存在的接收器之外,将您的警报发送到此接收器:

receivers:
- name: 'alertmanager_executor'
  webhook_configs:
  - url: 'http://alertmanager.executor:8080'

在接收器端,将其配置为在收到带有所需标签的警报时重新启动容器:

listen_address: ":8080"
commands:
 - cmd: /usr/bin/docker restart [container]
   match_labels:
     "restart_docker": true

您也可以将其配置为运行脚本,以执行其他操作:

listen_address: ":8080"
commands:
 - cmd: /usr/sbin/restart-containers.sh
   match_labels:
     "restart_docker": true

如果您已正确设置,当您的警报触发时,将运行该命令以重新启动您的 docker 容器。

【讨论】:

以上是关于如何使用 slack/grafana 或任何其他自动化方式重新启动 docker 容器?的主要内容,如果未能解决你的问题,请参考以下文章

jqgrid更改子网格的位置或将子网格图标添加到自定义列而不是其他任何地方?

jqgrid 更改子网格的位置或将子网格图标添加到自定义列而不是其他任何地方?

如何在Extjs 4中使用自定义检查或选中的radiogroup事件

php 在首页或任何其他页面上添加自定义徽标

如何在 Qt 中自定义列表视图

如何制作自定义列css? [复制]