Prometheus: consul service discvery:ServiceAddressの代わりにホストアドレスを使用することを期待しています

作成日 2017年01月14日  ·  3コメント  ·  ソース: prometheus/prometheus

あなたは何をした?

領事サービスディスカバリーを試してみました。

何を見たいと思いましたか?

Docker cuslterの外部で、DockerホストIPアドレスの公開ポートにアクセスするPrometheusサーバー。

代わりに何を見ましたか?

領事サービスディスカバリは、Docker内部ネットワークにあるServiceAddressを使用します。
そのため、Prometheusサーバーはメトリックエンドポイントに到達できません。

領事サービスディスカバリの現在の実装では、アドレスの前にServiceAddressを使用します。
https://github.com/prometheus/prometheus/blob/master/discovery/consul/consul.go#L278

領事はプロメテウスの次の応答に戻ります。

[
  {
    "Node": "docker1",
    "Address": "192.168.2.97", # Host IP
    "ServiceID": "docker1:testapp:8080",
    "ServiceName": "test",
    "ServiceTags": [],
    "ServiceAddress": "10.0.0.3",  # Container IP
    "ServicePort": 32814,
    "ServiceEnableTagOverride": false,
    "CreateIndex": 9033587,
    "ModifyIndex": 9033587
  }
]

PrometheusサーバーはDockerクラスターの外部で実行されています。
サーバーは、Docker内部ネットワークにあるServiceAddressに到達できません。
したがって、ServiceAddressの代わりにホストアドレスを使用することを期待しています。

この問題を解決する方法はありますか?

環境

Docker 1.11+執政官と群がる。
登録者はコンテナ情報を領事館に保管します。

  • システムインフォメーション:
# uname -srm
Linux 3.10.0-327.36.2.el7.x86_64 x86_64
  • プロメテウスバージョン:
# ./prometheus  -version
prometheus, version 1.4.1 (branch: master, revision: 2a89e8733f240d3cd57a6520b52c36ac4744ce12)
  build user:       root<strong i="36">@e685d23d8809</strong>
  build date:       20161128-09:59:22
  go version:       go1.7.3
  • Prometheus構成ファイル:
  - job_name: 'consul-test'
    metrics_path: '/api/prometheus'
    consul_sd_configs:
      - server: '127.0.0.1:8500'
        datacenter: 'dc1'
        services:
          - 'testapp'
  • ログ:

strace出力

[pid 22676] connect(33, {sa_family=AF_INET, sin_port=htons(32814), sin_addr=inet_addr("10.0.0.3")}, 16) = -1 EINPROGRESS (Operation now in progress)
kinquestion

最も参考になるコメント

@ brian-ブラジルありがとう!!

この問題は、以下のrelabelconfigで解決されました。 :+1:

    relabel_configs:
      - source_labels: ['__meta_consul_address', '__meta_consul_service_port']
        separator: ':'
        regex: '(.*)'
        target_label: '__address__'
        replacement: '$1'

全てのコメント3件

再ラベル付けを使用して、他のアドレスを取得できます。

@ brian-ブラジルありがとう!!

この問題は、以下のrelabelconfigで解決されました。 :+1:

    relabel_configs:
      - source_labels: ['__meta_consul_address', '__meta_consul_service_port']
        separator: ':'
        regex: '(.*)'
        target_label: '__address__'
        replacement: '$1'

このスレッドは、閉じられた後に最近のアクティビティがないため、自動的にロックされています。 関連するバグについては、新しい問題を開いてください。

このページは役に立ちましたか?
0 / 5 - 0 評価