web-dev-qa-db-ja.com

Prometheusを使用したTraefik V2.0メトリック

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"
        - "[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

Dockerにいる場合は、最初に8082ポートを公開します。

そして、Traefikの起動時にこれらのコマンドを追加します。

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

domain:8082/metricsでそのメトリックにアクセス

1
Musab Gültekin

安全でない構成(toml構成ファイルを使用します)を使用せずに、Traefikリバースプロキシ自体の背後にあるプロメテウスメトリックエンドポイントの有効な構成があります。

上記の構成例から、私が理解していることから、いくつかの要素が欠落しています。

最初に、エントリポイント 'metrics'を使用するようにPrometheusメトリックを構成したので、CLIセクションでメトリックと呼ばれるエントリポイントを構成する必要があります。このような:

 - "--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 swarmネットワークを構成する必要がありました(そうしないと、503ゲートウェイのタイムアウトが発生します)。

- "traefik.docker.network=proxy"

(プロキシは、TraefikとTraefikがリバースプロキシになるすべてのサービスを接続する私のオーバーレイネットワークです。)

お役に立てば幸い...

0
timmr

セキュアモードでAPIおよびダッシュボードにアクセスする場合は、Traefikのドキュメントで説明されているapi @ internal 'magic'を使用する必要があります- ここ

つまり、次のようなラベルを追加します。

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

言うまでもなく、これはクールではありません。基本的に、これは、標準のTraefikサービス宣言を使用するのではなく、これを特別な雪片の状況として扱います。これはいくぶん認められているようで、Traefikの将来のバージョンでは、少なくともこの内部サービスをダッシュ​​ボードに表示する予定です。

ダッシュボードに非セキュアモードを使用すると、ローカルのTraefikサーバーのポート8080が開かれることに注意してください。セキュアに切り替えると8080が閉じます。

私と同じように、内部で8080にルーティングすることにより、ダッシュボード/ APIを安全に宣言しようとしました。httpsと何らかの認証メカニズムを介してそうし、8080をDockerサービスポートとして公開しない場合でも、間違いなくIMOは安全であると考えられます-ただし、この方法で8080を活用できるようにするには、Traefik構成に安全でないダッシュボードスイッチを残す必要があります。

他の人が前の段落で説明したセキュリティモデルと不可解なapi @ internalの違いについて意見を持っている場合、私はすべて耳を傾けています。

0
fifofonix