Prometheus 的 Traefik V2.0 指标
Traefik V2.0 Metrics with Prometheus
如果我想使用 Prometheus 捕获 Traefik 的指标,这仅在激活 insecure= true 时有效。如果我设置 insecure=false 我得到一个 404。也许有人有一个正确配置的例子。所以Traefik(V2.0 CLI)的配置和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"
prometheus.yml:
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 反向代理本身后面有一个普罗米修斯指标端点的工作配置,没有使用不安全的配置(尽管使用了 toml 配置文件)——不太确定,如果那是你想要实现的。
所以从上面的示例配置来看,据我所知,你遗漏了一些东西。
首先,您将 prometheus 指标配置为使用入口点 'metrics',因此您需要在 CLI 部分配置一个名为 metrics 的入口点,例如像这样:
- "--entrypoints.metrics.address=:8082"
如果您想通过 TLS(由 traefik 本身终止)访问指标端点并使用基本身份验证,则需要路由器配置和指标端点服务作为标签,例如像下面这样(除了你对 api 端点的配置):
- "traefik.http.routers.metrics.rule=PathPrefix(`/metrics`)"
- "traefik.http.routers.metrics.rule=Host(`foo.bar`)"
- "traefik.http.routers.metrics.tls=true"
- "traefik.http.routers.metrics.tls.certResolver=sec"
- "traefik.http.routers.metrics.service=metrics"
- "traefik.http.routers.metrics.middlewares=myauth"
- "traefik.http.services.metrics.loadbalancer.server.port=8082"
此外,我需要像这样配置 docker 集群网络(否则我会收到 503 网关超时):
- "traefik.docker.network=proxy"
(代理是我连接 traefik 的覆盖网络和 Traefik 将作为反向代理的所有服务。)
希望对您有所帮助...
如果您想以安全模式访问 api 和 仪表板,则需要使用 api@internal 'magic'在 Traefik 文档中解释 here.
这意味着添加如下标签:
"traefik.http.routers.<my-api-dash-name>.service=api@internal"
不用说这并不酷。本质上,我们将其视为一种特殊的雪花情况,而不是使用标准的 Traefik 服务声明。看来这在某种程度上得到了承认,未来的 Traefik 版本至少计划让这个内部服务出现在仪表板中。
请注意,当您对仪表板使用不安全模式时,它会在您的本地 Traefik 服务器上打开端口 8080。当您切换到安全时,8080 已关闭。
我和你一样,试图通过内部路由到 8080 来安全地声明我的 dashboard/api。如果你是通过 https 和一些身份验证机制这样做的,甚至没有将 8080 公开为 docker服务端口然后可以说 IMO 你可以被认为是安全的 - 但你需要在你的 Traefik 配置中保留不安全的仪表板开关,以便你可以通过这种方式利用 8080。
如果其他人对前一段中描述的安全模型与神秘 api@internal 我洗耳恭听。
如果你在 docker.
,首先公开 8082 端口
并在启动 Traefik 时添加这些命令。
--metrics.prometheus=true
--metrics.prometheus.entryPoint=metrics
--entryPoints.metrics.address=:8082
访问 domain: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
如果我想使用 Prometheus 捕获 Traefik 的指标,这仅在激活 insecure= true 时有效。如果我设置 insecure=false 我得到一个 404。也许有人有一个正确配置的例子。所以Traefik(V2.0 CLI)的配置和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"
prometheus.yml:
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 反向代理本身后面有一个普罗米修斯指标端点的工作配置,没有使用不安全的配置(尽管使用了 toml 配置文件)——不太确定,如果那是你想要实现的。
所以从上面的示例配置来看,据我所知,你遗漏了一些东西。
首先,您将 prometheus 指标配置为使用入口点 'metrics',因此您需要在 CLI 部分配置一个名为 metrics 的入口点,例如像这样:
- "--entrypoints.metrics.address=:8082"
如果您想通过 TLS(由 traefik 本身终止)访问指标端点并使用基本身份验证,则需要路由器配置和指标端点服务作为标签,例如像下面这样(除了你对 api 端点的配置):
- "traefik.http.routers.metrics.rule=PathPrefix(`/metrics`)"
- "traefik.http.routers.metrics.rule=Host(`foo.bar`)"
- "traefik.http.routers.metrics.tls=true"
- "traefik.http.routers.metrics.tls.certResolver=sec"
- "traefik.http.routers.metrics.service=metrics"
- "traefik.http.routers.metrics.middlewares=myauth"
- "traefik.http.services.metrics.loadbalancer.server.port=8082"
此外,我需要像这样配置 docker 集群网络(否则我会收到 503 网关超时):
- "traefik.docker.network=proxy"
(代理是我连接 traefik 的覆盖网络和 Traefik 将作为反向代理的所有服务。)
希望对您有所帮助...
如果您想以安全模式访问 api 和 仪表板,则需要使用 api@internal 'magic'在 Traefik 文档中解释 here.
这意味着添加如下标签:
"traefik.http.routers.<my-api-dash-name>.service=api@internal"
不用说这并不酷。本质上,我们将其视为一种特殊的雪花情况,而不是使用标准的 Traefik 服务声明。看来这在某种程度上得到了承认,未来的 Traefik 版本至少计划让这个内部服务出现在仪表板中。
请注意,当您对仪表板使用不安全模式时,它会在您的本地 Traefik 服务器上打开端口 8080。当您切换到安全时,8080 已关闭。
我和你一样,试图通过内部路由到 8080 来安全地声明我的 dashboard/api。如果你是通过 https 和一些身份验证机制这样做的,甚至没有将 8080 公开为 docker服务端口然后可以说 IMO 你可以被认为是安全的 - 但你需要在你的 Traefik 配置中保留不安全的仪表板开关,以便你可以通过这种方式利用 8080。
如果其他人对前一段中描述的安全模型与神秘 api@internal 我洗耳恭听。
如果你在 docker.
,首先公开 8082 端口并在启动 Traefik 时添加这些命令。
--metrics.prometheus=true
--metrics.prometheus.entryPoint=metrics
--entryPoints.metrics.address=:8082
访问 domain: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