web-dev-qa-db-fra.com

Métriques Traefik V2.0 avec Prometheus

Si je veux capturer des métriques de Traefik avec Prometheus, cela ne fonctionne que si insecure = true est activé. Si je mets insecure = false, j'obtiens un 404. Peut-être que quelqu'un a un exemple de ce à quoi ressemble une configuration correcte. Ainsi, la configuration de Traefik (V2.0 CLI) et du prometheus.yml.

section de la commande 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"
        - "[email protected]"
        - "--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
3
Beta-Logics

Exposez d'abord le port 8082 si vous êtes dans le docker.

Et ajoutez ces commandes au démarrage de Traefik.

--metrics.prometheus=true
--metrics.prometheus.entryPoint=metrics
--entryPoints.metrics.address=:8082

Accéder à ces métriques dans domain:8082/metrics

1
Musab Gültekin

J'ai une configuration de travail pour un point de terminaison de métriques prometheus derrière le proxy inverse Traefik lui-même sans utiliser la configuration non sécurisée (bien qu'en utilisant un fichier de configuration toml) - pas tout à fait sûr, si c'est ce que vous voulez réaliser.

Donc, d'après votre exemple de configuration ci-dessus, d'après ce que je comprends, il vous manque des trucs.

Vous avez d'abord configuré les métriques prometheus pour utiliser les `` métriques '' du point d'entrée, vous devez donc configurer un point d'entrée appelé métriques dans la section CLI, par ex. comme ça:

 - "--entrypoints.metrics.address=:8082"

Si vous souhaitez accéder au point de terminaison des métriques via TLS (terminé par traefik lui-même) et utiliser l'authentification de base, vous avez besoin d'une configuration de routeur et d'un service pour le point de terminaison des métriques sous forme d'étiquettes, par ex. comme le suivant (en plus de votre configuration du point de terminaison 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"

De plus, je devais configurer le réseau d'essaimage de docker comme ceci (sinon j'obtiens un délai d'expiration de la passerelle 503):

- "traefik.docker.network=proxy"

(le proxy est mon réseau de superposition connectant traefik et tous les services dont Traefik sera le proxy inverse.)

J'espère que cela pourra aider...

0
timmr

Si vous souhaitez accéder au tableau de bord api et en mode sécurisé, vous devrez utiliser l'api @ internal 'magic' expliqué dans la documentation de Traefik - ici .

Cela signifie ajouter une étiquette comme:

"traefik.http.routers.<my-api-dash-name>.service=api@internal"

Inutile de dire que ce n'est pas cool. En substance, nous traitons cela comme une situation spéciale de flocon de neige, par opposition à l'utilisation des déclarations de service Traefik standard. Il semble que cela soit quelque peu reconnu, et les futures versions de Traefik prévoient au minimum de faire apparaître ce service interne dans le tableau de bord.

Notez que lorsque vous utilisez le mode non sécurisé pour le tableau de bord, il ouvre le port 8080 sur votre serveur Traefik local. Lorsque vous passez à 8080 sécurisé est fermé.

J'ai, comme vous, cherché à déclarer mon tableau de bord/API en toute sécurité en routant en interne vers 8080. Si vous le faites via https et un mécanisme d'authentification, et sans même exposer 8080 en tant que port de service docker, alors sans doute IMO, vous pourriez être considéré comme sécurisé - mais vous devrez laisser le commutateur de tableau de bord non sécurisé dans votre configuration Traefik afin de pouvoir tirer parti du 8080 de cette manière.

Si d'autres ont des points de vue sur le modèle de sécurité décrit dans le paragraphe précédent par rapport à l'api @ internal cryptique, je suis à l'écoute.

0
fifofonix