配置在 mesosphere DCOS 上运行的 prometheus mesos-exporter
Posted
技术标签:
【中文标题】配置在 mesosphere DCOS 上运行的 prometheus mesos-exporter【英文标题】:Configuring prometheus mesos-exporter running on mesosphere DCOS 【发布时间】:2015-11-02 00:10:59 【问题描述】:我正在尝试在我的 mesosphere DCOS 集群上设置 mesos 导出器。我指的链接是https://github.com/prometheus/mesos_exporter。我使用的 JSON 文件是:
"id": "/mesosexporter",
"instances": 6,
"cpus": 0.1,
"mem": 25,
"constraints": [["hostname", "UNIQUE"]],
"acceptedResourceRoles": ["slave_public","*"],
"container":
"type": "DOCKER",
"docker":
"image": "prom/mesos-exporter",
"network": "BRIDGE",
"portMappings": [
"containerPort": 9105,
"hostPort": 9105,
"protocol": "tcp"
]
,
"healthChecks": [
"protocol": "TCP",
"gracePeriodSeconds": 600,
"intervalSeconds": 30,
"portIndex": 0,
"timeoutSeconds": 10,
"maxConsecutiveFailures": 2
]
但只有暴露给 Prometheus 的仪表是“mesos_exporter_slave_scrape_errors_total”。 mesos 导出器向 Promethues 公开的其他仪表是什么。 mesos-exporter 的 github 上的自述文件说我们需要提供命令行标志,但是如果我想将 mesos exporter 作为 docker 容器运行,我应该如何指定配置?
编辑 - 仪表“mesos_exporter_slave_scrape_errors_total”给出非零值,表示在抓取期间发生错误。
编辑 - 添加“参数”原语后,我的 JSON 文件如下所示:
"id": "/mesosexporter",
"instances": 1,
"cpus": 0.1,
"mem": 25,
"constraints": [["hostname", "UNIQUE"]],
"acceptedResourceRoles": ["slave_public"],
"container":
"type": "DOCKER",
"docker":
"image": "prom/mesos-exporter",
"network": "BRIDGE",
"portMappings": [
"containerPort": 9105,
"hostPort": 9105,
"protocol": "tcp"
],
"privileged": true,
"parameters": [
"key": "-exporter.discovery", "value": "true" ,
"key": "-exporter.discovery.master-url",
"value": "http://mymasterDNS.amazonaws.com:5050"
]
,
"healthChecks": [
"protocol": "TCP",
"gracePeriodSeconds": 600,
"intervalSeconds": 30,
"portIndex": 0,
"timeoutSeconds": 10,
"maxConsecutiveFailures": 2
]
Mesos 版本:0.22.1
马拉松版本:0.8.2-SNAPSHOT
应用在使用此 JSON 后仍处于“部署”状态
【问题讨论】:
【参考方案1】:但只有暴露给 Prometheus 的仪表是“mesos_exporter_slave_scrape_errors_total”。 mesos 导出器向 Promethues 公开的其他仪表是什么。
如果 mesos-exporter 正在侦听端口 9100,您可以检查 http://<hostname>:9100/metrics
以了解正在公开哪些指标。我指的是我在其中一个系统上设置的prom/node-exporter
。
但是如果我想将 mesos exporter 作为 docker 容器运行,我应该如何指定配置?
我假设您正在将此 JSON 文件发布到 Marathon REST API 以启动 Docker 容器。如果确实如此,您可以使用parameters
JSON 指令指定其他选项。更多信息可以在Marathon docsPrivileged Mode and Arbitrary Docker Options部分下找到。
希望有帮助!
【讨论】:
对,你需要将正确的选项传递给mesos exporter。如果你打算只运行一个exporter,你可能需要设置参数为[ "-exporter.discovery", "-exporter.discovery.master-url", "hostname-of-master" ]
@fish 被“-exporter.discovery”、“-exporter.discovery.master-url”、“hostname-of-master”接受为 docker run 命令的参数?因为我正在使用 docker image prom/mesos-exporter 运行 mesos-exporter。
实际上我刚刚检查了文档,使用的正确马拉松 json 参数将是“args”。应该这样做:gist.github.com/discordianfish/2b53f3b08a9b33cbfc2f
当我运行 docker 命令时 'docker run -p 9105:9105 prom/mesos-exporter -exporter.discovery=true -exporter.discovery.master-url="mymasternodeDNS:5050" -log.level=debug' 我得到了 9105 端口的所有仪表。 @Dharmit 我尝试了参数和 args 似乎都不适合我。
@Dharmit 感谢分享文档页面的链接。我认为“参数”原语应该最适合我。但是当我将它添加到我的 JSON 文件时,我的应用程序被困在“部署”中。您能否按照下面的答案查看我的 JSON 文件。【参考方案2】:
使用 args 原语解决了这个问题。等效的 docker 命令是 docker run -p 9105:9105 prom/mesos-exporter -exporter.discovery=true -exporter.discovery.master-url="mymasternodeDNS:5050" -log.level=debug 由于参数 'exporter.discovery'、'exporter.discovery.master-url' 和 'log.level' 用于镜像入口点,而不是用于 'docker run',因此必须使用 'args'。
在工作 JSON 中添加的“args”格式为:
"args": [
"-exporter.discovery=true",
"-exporter.discovery.master-url=http://mymasternodeDNS:5050",
"-log.level=debug"]
【讨论】:
很高兴看到它最终成功。您是否打算在每次失败时启动 Prometheus mesos-executor 容器?我一直将它与docker run
命令的--restart=always
选项一起使用。以上是关于配置在 mesosphere DCOS 上运行的 prometheus mesos-exporter的主要内容,如果未能解决你的问题,请参考以下文章
谈谈Apache Mesos和Mesosphere DCOS:历史架构发展和应用