Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prometheus docker容器停止时发出警报_Prometheus_Cadvisor - Fatal编程技术网

Prometheus docker容器停止时发出警报

Prometheus docker容器停止时发出警报,prometheus,cadvisor,Prometheus,Cadvisor,我正在使用Prometheus、cAdvisor和Prometheus Alertmanager监控几个容器。我想知道的是,如果某个容器由于某种原因坠落,我会得到一个警报。问题是,如果容器死亡,则cAdvisor不会收集任何度量。任何查询都会返回“无数据”,因为查询没有匹配项。请查看Prometheus函数缺席() 缺席(v instant vector)如果传递给它的向量有任何元素,则返回空向量;如果传递给它的向量没有元素,则返回值为1的1元素向量 这对于在给定度量名称和标签组合不存在时间序列

我正在使用Prometheus、cAdvisor和Prometheus Alertmanager监控几个容器。我想知道的是,如果某个容器由于某种原因坠落,我会得到一个警报。问题是,如果容器死亡,则cAdvisor不会收集任何度量。任何查询都会返回“无数据”,因为查询没有匹配项。

请查看Prometheus函数缺席()

缺席(v instant vector)如果传递给它的向量有任何元素,则返回空向量;如果传递给它的向量没有元素,则返回值为1的1元素向量

这对于在给定度量名称和标签组合不存在时间序列时发出警报非常有用

示例:

缺席(不存在{job=“myjob”})=>{job=“myjob”}
缺席(不存在{job=“myjob”,实例=~“*”})=>{job=“myjob”}
缺席(总和(不存在{job=“myjob”}))=>{}

以下是警报示例:

ALERT kibana_absent
  IF absent(container_cpu_usage_seconds_total{com_docker_compose_service="kibana"})
  FOR 5s
  LABELS {
    severity="page"
  }
  ANNOTATIONS {
  SUMMARY= "Instance {{$labels.instance}} down",
  DESCRIPTION= "Instance= {{$labels.instance}}, Service/Job ={{$labels.job}} is down for more than 5 sec."
  }
我使用一个名为的小工具,它在Docker主机上作为容器运行,并在触发某些事件时向Slack、Discord或SparkPost发送警报。您可以配置触发警报的事件。

尝试以下操作:

 time() - container_last_seen{label="whatever-label-you-have", job="myjob"} > 60
如果60秒钟内看不到一个容器,它就会发出警报。 或

请小心,在第二种方法中,容器的内存使用率可能需要时间才能达到0

我们可以使用这两种方法:

缺席(容器\u开始\u时间\u秒{name=“my container”})

这个包含时间戳的特定指标似乎在5分钟内不会过时,因此它在最后一次刮取(参见:)后立即从普罗米修斯结果中消失,而不是在5分钟后消失,例如容器的cpu使用量秒总数。测试还可以,但我不确定我是否了解板岩

否则,您可以使用此选项:

time()-时间戳(container\u cpu\u usage\u seconds\u total{name=“mycontainer”})60或不存在(container\u cpu\u usage\u seconds\u total{name=“mycontainer”})

第一部分给出了指标被删除后的时间。因此,如果它从导出器输出中消失,但仍然由promql返回(默认情况下在5分钟内),则此方法有效。您必须根据刮油间隔调整>60

absent(container_memory_usage_bytes{label="whatever-label-you-have", job="myjob"})