Prometheus 普罗米修斯Traefik V2.0度量

Prometheus 普罗米修斯Traefik V2.0度量,prometheus,metrics,traefik,Prometheus,Metrics,Traefik,如果我想用普罗米修斯捕捉Traefik的指标,这只有在unsecure=true被激活时才有效。如果我将unsecure=false设置为404。也许有人举了一个正确配置的例子。因此,Traefik(V2.0cli)和prometheus.yml的配置 traefik.yml命令部分: command: - "--metrics=true" - "--metrics.prometheus=true" - "--metrics.prome

如果我想用普罗米修斯捕捉Traefik的指标,这只有在unsecure=true被激活时才有效。如果我将unsecure=false设置为404。也许有人举了一个正确配置的例子。因此,Traefik(V2.0cli)和prometheus.yml的配置

traefik.yml命令部分:

      command:
        - "--metrics=true"
        - "--metrics.prometheus=true"
        - "--metrics.prometheus.buckets=0.100000, 0.300000, 1.200000, 5.000000"
        - "--metrics.prometheus.entrypoint='metrics'"
        - "--metrics.prometheus.addEntryPointsLabels=true"
        - "--metrics.prometheus.addServicesLabels=true"

        - "--api=true"
        - "--api.dashboard=true"

        - "--log.level=INFO"

        - "--providers.docker=true"
        - "--providers.docker.swarmmode=true"
        - "--providers.docker.exposedbydefault=false"

        - "--entrypoints.web.address=:80"
        - "--entrypoints.websecure.address=:443"
        - "--certificatesResolvers.sec.acme.email=foo@bar.com"
        - "--certificatesResolvers.sec.acme.storage=/letsencrypt/acme.json"
        - "--certificatesResolvers.sec.acme.httpChallenge.entryPoint=web"
      deploy:
        labels:
            - "traefik.enable=true"

            - "traefik.http.routers.api.rule=PathPrefix(`/api`) || PathPrefix(`/dashboard`)"
            - "traefik.http.routers.api.rule=Host(`foo.bar`)"

            - "traefik.http.routers.api.service=api@internal"
            - "traefik.http.routers.api.middlewares=myauth"
            - "traefik.http.services.api.loadbalancer.server.port=8080"
            - "traefik.http.routers.api.tls.certresolver=sec"
            - "traefik.http.middlewares.myauth.basicauth.users=xxx"
普罗米修斯:

global:
    scrape_interval: 10s
    scrape_timeout: 10s
scrape_configs:
    - job_name: 'pushgateway'
      static_configs:
              - targets: ['pushgateway:9091']
      honor_labels: true
    - job_name: 'traefik'
      scheme: https
      static_configs:
              - targets: ['foo.bar']
      basic_auth:
              username: myusername
              password: mypassword

我在Traefik反向代理本身后面有一个prometheus metrics端点的工作配置,而不使用不安全的配置(尽管使用toml配置文件)——不太确定这是否是您想要实现的

从上面的示例配置来看,据我所知,您缺少了一些东西

首先,您将prometheus metrics配置为使用入口点“metrics”,因此需要在CLI部分中配置名为metrics的入口点,例如:

 - "--entrypoints.metrics.address=:8082"
如果您希望通过TLS(由traefik本身终止)访问度量端点并使用基本身份验证,则需要将度量端点的路由器配置和服务作为标签,例如,如下所示(除api端点配置外):

此外,我需要像这样配置docker swarm网络(否则我会得到503网关超时):

(代理是连接traefik和traefik将作为反向代理的所有服务的覆盖网络。)


希望这有助于…

如果您想在安全模式下访问api和仪表板,则需要使用api@internalTraefik文档中解释了“魔力”

这意味着添加一个标签,如:

"traefik.http.routers.<my-api-dash-name>.service=api@internal"
“traefik.http.routers..服务=api@internal"
不用说,这并不酷。本质上,我们将此视为特殊的雪花情况,而不是使用标准的Traefik服务声明。这似乎在某种程度上得到了认可,未来的Traefik版本计划至少在仪表板中显示此内部服务

请注意,当您对仪表板使用不安全模式时,它会打开本地Traefik服务器上的端口8080。当您切换到安全8080时,系统将关闭

一、 像您一样,通过内部路由到8080,试图安全地声明我的仪表板/api。如果您是通过https和某种身份验证机制来实现的,甚至没有将8080公开为docker服务端口,那么您可以认为是安全的-但是您需要将不安全的仪表板开关保留在Traefik配置中,以便您可以以这种方式利用8080


如果其他人对上一段中描述的安全模型与神秘的api@internal我洗耳恭听。

如果您在docker,请先暴露8082端口

并在启动Traefik时添加这些命令

--metrics.prometheus=true
--metrics.prometheus.entryPoint=metrics
--entryPoints.metrics.address=:8082
访问
域中的度量:8082/metrics

如果您还添加以下标签,它将允许您访问
traefikmetrics.mydomain.com/metrics
上的度量。您需要根据设置在大括号中填写值

traefik.http.routers.traefikmetrics.entrypoints: <http or https entrypoint>
traefik.http.routers.traefikmetrics.rule: Host(`traefikmetrics.mydomain.com`)
traefik.http.services.<traefik-service-name>.loadbalancer.server.port: 8082
traefik.http.routers.traefikmetrics.entrypoints:
traefik.http.routers.traefikmetrics.rule:Host(`traefikmetrics.mydomain.com`)
traefik.http.services..loadbalancer.server.port:8082

据我所知,端点是/metrics,这在路由器路径前缀中缺失。它使用“不安全”的事实可能是因为使用不安全,无论路由器配置如何,所有api端点都可以在:8080处使用。嗨,这里的同一个问题,我甚至没有得到带有不安全标志的度量。。。。。你找到解决办法了吗?Traefik 2.0没有明确的例子。度量是一个单独的端点,需要根据@timmr的答案定义一个单独的端点。这些指标在仪表板中没有附带的路由器/服务…它只是Traefik守护进程打开另一个端口。Docker执行到Traefik容器中,然后添加curl(
apk add curl
),然后命中端点(
curl-k localhost:8082/metrics
)作为最低测试应该是有效的。顺便说一句,您应该能够通过(
apk add nmap;nmap localhost
)看到Traefik侦听端口,并且在定义入口点时显示8082 open。欢迎@timmr。您关于定义入口点的观点是正确的。但是,我有一个工作配置,没有您上面建议的任何路由器/服务定义。我的理解(和经验)是,只需在toml中添加entrypoint部分和附带的metrics部分,就足以让Traefik引擎正确地公开度量。现在,如果您单独运行prometheus作为docker服务(我们是),那么您将需要Traefik标签来暴露prometheus,并且需要配置prometheus以添加Traefik作为目标。感谢您的澄清,@fifofinix。我想根据您的建议,您需要向主机公开metrics端口(比如-ports“8082:8082”)?我的理解是,OP希望通过TLS(由Traefik终止)访问metrics端点,并由basic auth?明白了。我想你可能是对的,我的问题是。是的,根据我的建议,您必须将端口暴露给swarm overlay网络,这可能是可取的,也可能是不可取的,取决于架构。你让我思考,我用路由器进行了一次本地安装,正如你在这里所展示的那样,成功地验证了你实际上可以通过主443入口点点击它,但只要你使用PathPrefix作为度量,就可以点击内部可用的8082上的度量服务。没想到会这样谢谢!并且,我验证了无论API是否不安全,它都能正常工作。这就是我要做的。在安全模式下,我无法访问指标。你能试着去掉你的8080声明吗?在安全模式下,端口关闭且无法访问。
--metrics.prometheus=true
--metrics.prometheus.entryPoint=metrics
--entryPoints.metrics.address=:8082
traefik.http.routers.traefikmetrics.entrypoints: <http or https entrypoint>
traefik.http.routers.traefikmetrics.rule: Host(`traefikmetrics.mydomain.com`)
traefik.http.services.<traefik-service-name>.loadbalancer.server.port: 8082