通过Prometheus从多个Kubernetes吊舱中刮取自定义统计数据

时间:2017-12-01 11:21:48

标签: kubernetes prometheus

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

  

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

所以每个pod都必须声明一个端口(大概是k8s yaml,大概是?)否则就会出现端口无效。在哪种情况下,我如何确保每个pod具有唯一的端口号? (如果我没有,如果在同一节点上启动了两个pod,则可能会失败)

1 个答案:

答案 0 :(得分:2)

  

以及仅选择具有给定名称

的广告连播的重新标记

我认为这是可能的,但在我们的配置中,我们只是省略了scrape注释(下面讨论过),而且Prom没有联系那些Pod;我们几个月没有触及Prom配置本身,但更频繁地更改Pod注释。

  

因此每个pod必须声明一个端口

their example config中,可以看到Pod中的注释被提取并用于指向该特定Pod的端口和路径上的Prom刮刀(当然,包括是否要刮掉它)。

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

该代码段可以进入您的ReplicationController,部署,ReplicaSet,Pod(如果您部署"裸" Pod),或使用Kubernetes API连接到Pod事后。据我所知,可以随意申请和删除这些注释,而Prom将会在下一次搜索中将其删除。

  

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

假设您使用软件定义的网络安装了合理的Kubernetes,那么每个Pod都有自己的IP地址,因此也有自己的端口命名空间。如果你想使用9145标准化每个 Pod,那就完全没问题了。