配置在 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:历史架构发展和应用

dcos下rexray服务的配置

DCOS实践分享:基于DCOS的大数据应用分享

DC/OS安装

弹性集成Apache Mesos与Apache Kafka框架

Mesosphere在其数据中心操作系统中增加了对Kubernetes的支持