Prometheus 动态端口服务发现 Marathon/Mesos
Prometheus dynamic port service discovery with Marathon/Mesos
经过几天的谷歌搜索,我一直无法找到这个问题的答案。我在 Marathon/Mesos 有一项服务 运行。我有一个 Prometheus 集群抓取指标。我的马拉松指标端口配置如下所示:
{
"containerPort": 8081,
"hostPort": 0,
"servicePort": 31301,
"protocol": "tcp",
"labels": {
"metrics": "/metrics"
}
}
Prometheus,只配置了样板 marathon-sd 配置,成功找到了这个目标,但它随后会监听以下指标:__address__ = [NodeIP]:31301
;因此它使用服务端口而不是动态分配的主机端口侦听主机的 IP,而服务端口仅对 Marathon-LB 重要。
我知道 Marathon 将容器中的环境变量 $PORT0
定义为主机端口,但是我不知道如何从 Prometheus SD 配置访问它,也不知道如何访问其他字段由 Marathon 动态配置,如 Endpoints
。有没有人有什么建议?我不能't/don 不想分配静态 hostPort
因为我的容器比集群中的物理节点多,容器编排的意义就在于此。
这是一个known bug in Prometheus: it uses the servicePort
Marathon app definition property instead of the hostPort
one. It is fixed in the v2.6.0。
经过几天的谷歌搜索,我一直无法找到这个问题的答案。我在 Marathon/Mesos 有一项服务 运行。我有一个 Prometheus 集群抓取指标。我的马拉松指标端口配置如下所示:
{
"containerPort": 8081,
"hostPort": 0,
"servicePort": 31301,
"protocol": "tcp",
"labels": {
"metrics": "/metrics"
}
}
Prometheus,只配置了样板 marathon-sd 配置,成功找到了这个目标,但它随后会监听以下指标:__address__ = [NodeIP]:31301
;因此它使用服务端口而不是动态分配的主机端口侦听主机的 IP,而服务端口仅对 Marathon-LB 重要。
我知道 Marathon 将容器中的环境变量 $PORT0
定义为主机端口,但是我不知道如何从 Prometheus SD 配置访问它,也不知道如何访问其他字段由 Marathon 动态配置,如 Endpoints
。有没有人有什么建议?我不能't/don 不想分配静态 hostPort
因为我的容器比集群中的物理节点多,容器编排的意义就在于此。
这是一个known bug in Prometheus: it uses the servicePort
Marathon app definition property instead of the hostPort
one. It is fixed in the v2.6.0。