繁体   English   中英

通过Prometheus从多个Kubernetes容器中刮取自定义统计信息

[英]Scraping custom stats from multiple Kubernetes pods via Prometheus

我们正在Kubernetes下的云上运行Prometheus,并且能够获取节点的内存,CPU使用率等统计信息。 现在,我们希望能够从云上运行的Pod中抓取自己的自定义时间序列。 据我了解,这需要具有kubernetes_sd_config角色“ pod”的工作(以及一个重新标签,该标签将仅选择具有给定名称的Pod)。 到现在为止还挺好。 但是,从文档中我读到:

容器角色发现所有容器并将其容器公开为目标。 对于容器的每个声明的端口,将生成一个目标。 如果容器没有指定的端口,则会为每个容器创建无端口目标,以通过重新标记手动添加端口。

因此,每个Pod必须声明一个端口(大概是在其k8s yaml中),否则它将不依赖端口。 在那种情况下,我如何确保每个Pod有一个唯一的端口号? (如果没有,那么如果在同一节点上启动两个pod,可能会失败)

和一个重新标签,它将仅选择具有给定名称的豆荚

我想这是可能的,但是在我们的配置中,我们只是省略了scrape注释(在下面讨论),并且Prom不会与这些Pod联系。 我们已经有几个月没有接触Prom配置了,但是更频繁地更改Pod注释。

因此,每个Pod必须声明一个端口

他们的示例配置中,可以看到从Pod中提取注释的位置,并将其用于将Prom刮板指向该特定Pod的端口和路径(当然包括是否完全刮除它)。

metadata:
    annotation:
        prometheus.io/scrape: true
        prometheus.io/path: /custom-prom-metrics
        prometheus.io/port: 9145

该代码段可以进入您的ReplicationController,Deployment,ReplicaSet,Pod(如果您部署“裸” Pod),或者可以使用Kubernetes API附加到Pod事后。 据我所知,可以随意应用和删除这些注释,而Prom会在下一次抓取中使用它。

如何确保每个Pod具有唯一的端口号? (如果没有,那么如果在同一节点上启动两个pod,可能会失败)

假设您使用软件定义的网络安装了合理的Kubernetes,则每个Pod都有其自己的IP地址,因此也有其自己的端口名称空间。 如果您想使用9145在每个 Pod上进行标准化,那将是非常好的。

暂无
暂无

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

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