我与Docker和Kubernetes合作。 我想从每个Docker收集特定于应用程序的指标。 有各种应用程序,每个应用程序在一个或多个Dockers中运行。 我想收集JSON格式的指标,以便对每种指标进行进一步处理。
我正在努力了解什么是最佳做法,如果有的话,我可以用什么工具来实现我的目标。
目前我正在研究几个选项,没有一个看起来太好了:
连接到kubectl,获取pod列表,在每个pod上执行命令(exec)以使应用程序打印/发送带有度量标准的JSON。我不喜欢这个选项,因为这意味着我需要知道哪些pod存在并访问每个pod,而Kubernetes的重点是避免处理这个问题。
我正在寻找允许我提取特定文件的Kubernetes API HTTP GET请求。
我找到的最接近的是$xml.branches.branch
,似乎不是我需要的。
再一次,它迫使我提到每个名字的流行音乐。
我考虑在Probe中使用ExecAction定期发送带有指标的JSON。这是一个hack(因为这不是Probe的目的),但它不需要处理每个特定的pod
我无法使用Prometheus,因为我无法控制,但我想知道Prometheus如何收集指标。也许我可以使用类似的方法?
任何可能的解决方案将不胜感激。
答案 0 :(得分:1)
从架构的角度来看,这里有2个选项:
1)pull model
:您的应用程序通过机制公开度量数据(例如在不同端口上使用HTTP协议),外部工具以定时间隔擦除您的pod(从k8s API获取pod地址) );这是普罗米修斯使用的模型。
2)push model
:您的应用程序主动将度量标准推送到外部服务器,这是一个时间序列数据库,例如Influxdb,当它与它最相关时。
在我看来,选项2是最容易实现的,因为:
但是有一个缺点:你需要小心如何实现它,它可能会导致你的API变慢,你可能需要处理对度量服务器的异步调用。
这显然是一个非常通用的答案,但我希望它可以指出你正确的方向。
答案 1 :(得分:1)
可惜你不能使用普罗米修斯,但它在这个范围内可以做的很好。 Prom的作用如下:
1:它假定您要抓取(收集)的指标暴露在Prometheus可以访问的某个http端点上。
2:它连接到kubernetes api以执行端点发现以从中获取指标(有一个配置,但通常它意味着它必须能够连接到API并列出服务/部署/ pod和分析他们的注释(因为他们有关于指标端点的信息)来组成一个地方列表以从中抓取数据
3:periodicaly(15s,60s等)它连接到端点并收集公开的指标。
那就是它。休息是存储/后处理。尽管如此,与kube相关的部分可能需要做大量的工作,因此最好选择已经存在的东西。
旁注:虽然这通常是一个基于拉动的模型,但有些情况下拉不可能(视短篇短文如php),这就是Prometheus pushgateway发挥作用,允许将指标推向普罗米修斯将拉动的地方从