经过数天的谷歌搜索,我一直无法找到答案。我有在Marathon/Mesos中运行的服务。我有一个Prometheus集群抓取指标。我的Marathon指标端口配置如下所示:
{
"containerPort": 8081,
"hostPort": 0,
"servicePort": 31301,
"protocol": "tcp",
"labels": {
"metrics": "/metrics"
}
}
仅配置了样板marathon-sd配置的Prometheus成功找到了该目标,但随后监听了以下指标:
__address__ = [NodeIP]:31301
;因此,它使用服务端口监听主机的IP,而不是动态分配的主机端口,而服务端口仅对Marathon-LB重要。我知道Marathon将容器中的环境变量
$PORT0
定义为主机端口,但是我无法弄清楚如何从Prometheus SD配置中访问该变量,也无法弄清楚如何由Marathon动态配置的其他字段(如Endpoints
)。有没有人有什么建议?我不能/不想分配一个静态的hostPort
,因为我的容器比群集中的物理节点多,这与容器编排有关。 最佳答案
这是known bug in Prometheus:它使用servicePort
Marathon应用程序定义属性而不是hostPort
一个。它是fixed in the v2.6.0。