繁体   English   中英

从Kubernetes中的Docker收集指标

[英]Collect metrics from dockers in Kubernetes

我使用Docker和Kubernetes。 我想从每个Docker收集特定于应用程序的指标。 有各种应用程序,每个应用程序都在一个或多个Docker中运行。 我想以JSON格式收集指标,以便对每种类型的指标进行进一步处理。

我试图了解什么是最佳实践(如果有的话)以及可以使用哪些工具实现我的目标。

目前,我正在研究几种选择,但看起来都不太好:

  1. 连接到kubectl,获取pod列表,在每个pod上执行命令(exec),以使应用程序使用指标打印/发送JSON。 我不喜欢这个选项,因为它意味着我需要知道存在哪些Pod并访问每个Pod,而拥有Kubernetes的全部目的是避免处理此问题。

  2. 我正在寻找Kubernetes API HTTP GET请求,该请求将允许我提取特定文件。 我找到的最接近的是GET /api/v1/namespaces/{namespace}/pods/{name}/log ,看来这不是我所需要的。 再一次,这迫使我按名称提及每个流行音乐。

  3. 我考虑在Probe中使用ExecAction定期发送带有指标的JSON。 这是一个hack(因为这不是Probe的目的),但是它消除了处理每个特定吊舱的需要

  4. 由于无法控制的原因,我无法使用Prometheus,但我想知道Prometheus如何收集指标。 也许我可以使用类似的方法?

任何可能的解决方案将不胜感激。

从架构的角度来看,这里有2个选项:

1) pull model :您的应用程序通过一种机制(例如,在不同端口上使用HTTP协议)公开指标数据,而外部工具则以一定的时间间隔抓取您的Pod(从k8s API获取Pod地址); 例如,这就是普罗米修斯使用的模型。

2) push model :您的应用程序会主动将指标推送到外部服务器,最重要的是将时间序列数据库(例如influxdb)与它最相关。

我认为,方案2是最容易实现的,因为:

  • 您无需处理k8s API即可发现Pod地址;
  • 您无需创建本地存储层来存储指标(因为它们在占用时被一个接一个地推送);

但是有一个缺点:您需要小心实现,这可能会导致API变慢,并且可能需要处理对指标服务器的异步调用。

这显然是一个非常通用的答案,但我希望它可以为您指明正确的方向。

可惜你不能使用普罗米修斯,但这是在这个范围内可以做的一个很好的线索。 舞会的工作如下:

1:假设您要抓取(收集)的指标与Prometheus可以访问的一些http端点公开。

2:它连接到kubernetes api来执行发现端点以从中刮取指标(有一个配置,但是通常这意味着它必须能够连接到API并列出服务/部署/吊舱并分析其注释(因为他们具有有关指标终结点的信息)来组成从中抓取数据的场所列表

3:周期性地(15s,60s等)连接到端点并收集公开的指标。

而已。 剩下的就是存储/后处理。 与kube相关的部分可能要做很多工作,因此最好使用已经存在的东西。

旁注:虽然这通常是基于拉的模型,但在某些情况下无法进行拉(例如php等短期脚本),这就是Prometheus pushgateway发挥作用的地方,它允许将度量推到Prometheus将要从中拉出的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM